Affichage des articles dont le libellé est procédure. Afficher tous les articles
Affichage des articles dont le libellé est procédure. Afficher tous les articles

VBA : La conjecture de Syracuse



Comment reprendre l'activité sur le blog, fortement délaissé ces derniers mois.  Une idée pour aider mes lecteurs à la manipulation du VBA, est de reprendre tous les grands classiques que l'on peut rencontrer dans l'enseignement de l'algorithmie. Aussi je commence cette semaine avec l'indécidable (au sens mathématique du terme) conjecture de Syracuse.

Également appelé suite de Collatz, du nom du mathématicien allemand qui l’énonça  pour la première fois en 1928. Puis, elle apparu à nouveau à l'université de Syracuse (New-York) dans les années 50. Aucune solution n'étant trouvée, le probléme s'est propagé aux autres universités américaines. Dans le contexte de la guerre froide, on évoqua une manœuvre russe pour paralyser la recherche américaine.

Considérons un entier n positif auquel on va faire subir une transformation.
  • Si n est pair on le divise par deux
  • Si n est impair, on le multiplie par 3 et on ajoute 1
Puis, on recommence sur le résultat obtenu.
Par exemple, en prenant n = 10, on obtient : 10 - 5 -16 - 8 - 4 - 2 - 1

Conjecture :  Quel que soit l'entier n choisit, on finit toujours par atteindre la valeur 1.

Dans cette procédure VBA, nous testons la conjecture pour un entier n compris entre 1 et 100 (l'intervalle [1, 100] est vérifié et on ne peut faire que trois saisies). Ensuite elle calcule le temps de vol ( nombre d'entier rencontré avant de trouver 1 ) et l'altitude maximale ( la valeur maximale de la suite ).

Bonne programmation...

Sub Syracuse()
Dim n As Long
Dim vol As Long
Dim am As Long
Dim cpt As Byte
vol = 0
cpt = 1
n = 0
am = 0
On Error GoTo Sierreur
'******************************
'nettoyage des afichages précédents

Range("d1:d3").ClearContents
Range("a:a").ClearContents
'********************
n = InputBox("Saisir un entier n = ", _
"Conjecture de Syracuse - " & cpt & " fois", 1)
Do While n < 1 Or n > 100
    cpt = cpt + 1
    n = InputBox("Saisir un entier n = ", _
    "Conjecture de Syracuse - " & cpt & " fois", 1)
    If cpt = 3 And ((n < 1) Or (n > 100)) Then
        MsgBox "vous avez essayé 3 fois", _
        vbOKOnly + vbCritical, "Conjecture de Syracuse"
        Exit Sub
    End If
Loop
Range("d3").Value = n
'*****************************
Do While n <> 1
    If n Mod 2 = 0 Then
    'rien de mieux que le modulo pour savoir si un
    'nombre est pair ou impair

        n = n / 2
    Else
        n = (n * 3) + 1
    End If
    vol = vol + 1
    'incrementons le temps de vol
    Cells(vol, 1).Value = n
    If n > am Then
    'recuperons le max
        am = n
    End If
Loop
    Range("d1").Value = vol
    Range("d2").Value = am
Sierreur:
End Sub



VBA : Les fichiers XLAM




Suite à l’article concernant l’emploi des fichiers XLSB, classeur de  « macros personnelles » VBA : Créer une macro multi feuilles, je vous présente aujourd’hui une alternative permettant de garder en mémoire, les macros utiles de manière transversales. Les fichiers xlam sont en fait des classeurs de macros, nommés « Macro complémentaires »

Si vous avez créé des macros dans un classeur, procédé à son enregistrement par Fichier / Enregistrer sous, et sélectionnez dans la liste Type, la valeur : Macro complémentaires Excel (*.xlam). Le chemin d’accès du fichier est alors dans Users \ appData \ Roaming \ Microsoft \ AddIns



Ensuite il faudra activer le classeur de Macro complémentaires en passant la commande Fichier / Options / compléments puis en cliquant sur le bouton atteindre de la commande Gérer les compléments Excel

Activer ensuite le classeur de vos macros complémentaires qui apparait dans la liste :



Accéder alors à votre éditeur Visual basic vous constaterez que le classeur est bien inclus dans la fenêtre des projets VB.



Ensuite si vous accédez à la gestion de votre barre d’outils d’accès rapide et que vous sélectionnez la valeur Macro dans la liste des catégories, vous verrez apparaitre la liste des macros contenues dans votre fichier XLAM.





A la semaine prochaine….



VBA : La nature des données




Sur Excel, on trouve deux types de données différentes, soit des données numériques, soit des données textes. Nous allons nous intéresser dans cette vidéo aux procédures d'écriture VBA permettant de gérer la nature des données.







Bonne consultation...



VBA : Appel de procédure (II)






A la suite de la vidéo précédente, nous découvrons comment gérer les appels de procédure dans l’hypothèse ou les différentes procédures ne se  trouvent pas dans la même feuille de module de code. N'hésitez pas à consulter l'article "VBA : Les modules d’un projet" du 6 août 2009 pour comprendre comment, les différents modules du projet VBA communiquent entre eux.






Bonne consultation...



VBA : Appel de procédure


Il est préférable de découper vos programmes informatique en plusieurs procédures, cela en facilite grandement la lecture et surtout la maintenance. Dans cette vidéo nous découvrons comment interagissent entre elles les différentes procédures VBA d'une application, et comment se fait la déclaration et le passage des arguments par valeur.




Bonne Consultation...



top