IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Mémento sur la programmation en VBA pour EXCEL [Tutoriel]


Sujet :

Macros et VBA Excel

  1. #1
    Rédacteur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2013
    Messages
    947
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Août 2013
    Messages : 947
    Points : 4 058
    Points
    4 058
    Par défaut Mémento sur la programmation en VBA pour EXCEL
    Bonjour,
    Je vous propose ce mémento sur la programmation en VBA pour Excel.

    Il s'agit d'une compilation d'exemples pratiques pour apprendre la programmation en Microsoft Office Excel avec VBA.
    Vous allez aussi apprendre des exemples d'Excel avec les autres composants de Microsoft Office tels que Outlook et Access.

    C'est un cours qui peut servir de support de formation pratique pour apprendre la programmation VBA sous Microsoft Office Excel. Les exemples sont en Excel 2010, mais peuvent être adaptés pour les versions récentes : Excel 2013 et Excel 2016.
    Bonne lecture et n'hésitez pas à apporter vos commentaires.


    Retrouvez les meilleurs cours et tutoriels pour apprendre Microsoft Excel

  2. #2
    Membre habitué
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Novembre 2013
    Messages
    226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2013
    Messages : 226
    Points : 134
    Points
    134
    Par défaut
    Merci pour ce Mémento,

    Vraiment bien fait, ça permet de revoir les fondamentaux .

    Bonne continuation.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    9
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 9
    Points : 8
    Points
    8
    Par défaut
    Super bien fait !! Bravo et merci

  4. #4
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    Bonjour,

    bravo !!!, je crois que je vais m'y attarder dès que possible
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  5. #5
    Rédacteur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2013
    Messages
    947
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Août 2013
    Messages : 947
    Points : 4 058
    Points
    4 058
    Par défaut
    Pour plus d'informations sur la compatibilité des API avec windows 64 bits je vous invite à lire l'excellente documentation de Thierry Gasperment : Développer avec office 64 bits.
    Cordialement.

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 5
    Points : 9
    Points
    9
    Par défaut Pb avec programme final sur mesbonbon et mes scoubidous
    Bonjour ,
    C est mon premier post sur ce forum que je consulte trés souvent.
    Je programme un peu maladroitement et j aimerias me structurer et donc je reprends les bases .

    Dans la fonction CompterPoche du tuto Apprendre la programmation en VBA pour EXCEL par la pratique - Première partie , je ne retrouve pas les variables publics MesBonbon et MesScoubidou. On a NbBonbon = NbBonbon + 1 . N'ai je rien compris ou y a-t-il un pb de copier/coller dans ce tuto ?

    A tout cas merci pour ce tuto que je vais continuer a lire.

  7. #7
    Rédacteur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2013
    Messages
    947
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Août 2013
    Messages : 947
    Points : 4 058
    Points
    4 058
    Par défaut
    Si nous parlons du même code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    Option Explicit
     
    Dim MesBonbon As Long    ' Variable numérique qui contiendra le nombre de bonbons
    Dim MesScoubidou As Long ' Variable numérique qui contiendra le nombre de scoubidous
     
    Sub CompterLeCartable()
     
    Call CompterPoche(3)  ' Alimente MesBonbon et MesScoubidou
     
    MsgBox "J'ai " & MesBonbon & " bonbons et " _
            & MesScoubidou & " scoubidous dans mon cartable."
     
    End Sub
     
     
    Function CompterPoche(MaColonne As Long) As Long
     
    Dim Ligne As Long               ' Variable numérique pour balayer les lignes de la feuille.
    Ligne = 1                       ' Initialise Ligne à 1
    MesBonbon = 0: MesScoubidou = 0 ' Variables mises à zéro par sécurité.
     
    While Cells(Ligne, MaColonne) <> ""  ' Tant que cellule(y,x) n'est pas vide.
     
        CompterPoche = CompterPoche + 1 ' Incrémente le nombre d'éléments trouvés.
        If Cells(Ligne, MaColonne) = "x" Then NbBonbon = NbBonbon + 1       ' Les bonbons.
        If Cells(Ligne, MaColonne) = "s" Then NbScoubidou = NbScoubidou + 1 ' Les scoubidous.
        Ligne = Ligne + 1 ' Passe à la ligne suivante.
     
    Wend
     
    End Function
    Les variables MesBonbon et MesScoubidou sont déclarées en début du module :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim MesBonbon As Long    ' Variable numérique qui contiendra le nombre de bonbons
    Dim MesScoubidou As Long ' Variable numérique qui contiendra le nombre de scoubidous
    Par cette déclaration en début du module, la portée des variables s'étend à l'ensemble des procédures du module.

  8. #8
    Rédacteur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2013
    Messages
    947
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Août 2013
    Messages : 947
    Points : 4 058
    Points
    4 058
    Par défaut
    Bonjour à tous,

    j'ai le plaisir de vous présenter le tome 2 de ce mémento qui aborde la programmation en mode graphique avec un cas de programmation d'un jeu d'arcade en VBA et Microsoft Excel.

    Dans le tome 1, nous avons étudié les bases de la programmation d'EXCEL en VBA. Ce tome 2 est consacré à une partie plus ludique : la programmation en mode graphique.

    Mais pourquoi programmer en mode graphique ? Imaginez que vous puissiez maîtriser chacun des pixels de votre écran, afficher des images, gérer des animations… Vous devinez toute la richesse qu'une programmation en mode graphique peut vous apporter. Certes, pas dans une application ordinaire, mais pour un jeu d'arcade, c'est l'outil idéal qui vous manquait pour laisser libre cours à votre imagination.

    Bonne lecture et n'hésitez pas à apporter vos commentaires

    Retrouvez les meilleurs cours et tutoriels pour apprendre Microsoft Excel

  9. #9
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Très intéressant, mais il est dommage qu'il n'y ait pas une image pour chaque code expliqué pour voir le résultat.

    Philippe

  10. #10
    Futur Membre du Club
    Homme Profil pro
    gestionnaire de flotte
    Inscrit en
    Septembre 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : gestionnaire de flotte

    Informations forums :
    Inscription : Septembre 2016
    Messages : 6
    Points : 5
    Points
    5
    Par défaut bloqué sur apprendre la programmation en VBA - TOME 1 - chapitre VII
    Bonjour,
    je m 'initie à VBA pour la 1ere fois de ma vie. j'ai découvert ce site et je te trouve très bien.
    Mon problème est que je suis bloqué au chapitre VII sur un exercice de triage de données.
    Dans un 1er exemple,L'auteur utilise un 1er programme couplé avec une fonction => pas de problème
    ensuite dans un 2éme , il combine la même fonction dans le même programme pour travailler plus rapidement et dans le 3éme il utilise quicksort combiné dans un programme.

    Mon problème est que je ne sais pas pourquoi mais les programmes 2 & 3 ne sont pas reconnus comme des programmes impossible de les utiliser.
    j'ai copier mot pour mot les programme rien à faire.
    Pour moi cela vient des parenthèses remplie avec des références dans le nom du programme.
    Comment puis-je me corriger ?

    Merci de votre aide.

  11. #11
    Candidat au Club
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Septembre 2016
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2016
    Messages : 1
    Points : 3
    Points
    3
    Par défaut Pb avec programme final sur mesbonbon et mes scoubidous
    Bonjour
    Je débute également avec VBA, et suis pas à pas ce tuto très intéressant

    En fait, le problème soulevé par Bernardassyst vient des lignes 25 et 26 :
    Il faut renommer les variables NbBonbon et NbScoubidou (que l'on avait créées précédemment comme argument facultatif pour modifier la fonction CompterPoche) en : MesBonbon et MesScoubidou, qui elles, sont bien déclarées.
    Cela donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    While Cells(Ligne, MaColonne) <> ""  ' Tant que cellule(y,x) n'est pas vide.
     
        CompterPoche = CompterPoche + 1 ' Incrémente le nombre d'éléments trouvés.
        If Cells(Ligne, MaColonne) = "x" Then MesBonbon = MesBonbon + 1       ' Les bonbons.
        If Cells(Ligne, MaColonne) = "s" Then MesScoubidou = MesScoubidou + 1 ' Les scoubidous.
        Ligne = Ligne + 1 ' Passe à la ligne suivante.
     
    Wend
    Et là, ça refonctionne !

    (sauf erreur ou omission... )

  12. #12
    Rédacteur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2013
    Messages
    947
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Août 2013
    Messages : 947
    Points : 4 058
    Points
    4 058
    Par défaut Tome 1 - Coquille dans le code exemple
    Mea-culpa, effectivement il y a une coquille dans le code. Bravo à vous deux (bernardassyst et difilisyl) qui l’avez vue. Ça prouve qu’il y a au moins deux lecteurs. Bonne continuation dans votre apprentissage du VBA, et rendez-vous dans le tome 2 qui est bien plus ludique et vous permettra de mettre en application vos connaissances pour faire autre chose que de l’EXCEL avec EXCEL.
    Le code correct :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    Option Explicit
     
    Dim MesBonbon As Long    ' Variable numérique qui contiendra le nombre de bonbons
    Dim MesScoubidou As Long ' Variable numérique qui contiendra le nombre de scoubidous
     
    Sub CompterLeCartable()
     
    Call CompterPoche(3)  ' Alimente MesBonbon et MesScoubidou
     
    MsgBox "J'ai " & MesBonbon & " bonbons et " _
            & MesScoubidou & " scoubidous dans mon cartable."
     
    End Sub
     
    Function CompterPoche(MaColonne As Long) As Long
     
    Dim Ligne As Long               ' Variable numérique pour balayer les lignes de la feuille.
    Ligne = 1                       ' Initialise Ligne à 1
    MesBonbon = 0: MesScoubidou = 0 ' Variables mises à zéro par sécurité.
     
    While Cells(Ligne, MaColonne) <> ""  ' Tant Que cellule(y,x) n'est pas vide.
     
        CompterPoche = CompterPoche + 1 ' Incrémente le nombre d'éléments trouvés.
        If Cells(Ligne, MaColonne) = "x" Then MesBonbon = MesBonbon + 1         ' Les bonbons.
        If Cells(Ligne, MaColonne) = "s" Then MesScoubidou = MesScoubidou + 1   ' Les scoubidous.
        Ligne = Ligne + 1 ' Passe à la ligne suivante.
     
    Wend
     
    End Function

  13. #13
    FMJ
    FMJ est déconnecté
    Membre averti
    Profil pro
    tutu
    Inscrit en
    Octobre 2003
    Messages
    416
    Détails du profil
    Informations personnelles :
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : tutu

    Informations forums :
    Inscription : Octobre 2003
    Messages : 416
    Points : 356
    Points
    356
    Par défaut
    Bravo et merci pour tout ce travail !

  14. #14
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 073
    Points : 9 853
    Points
    9 853
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    bravo pour ce travail de pédagogie et concentration de "l'essentiel pour débuter efficacement".

    je n'ai encore que partiellement parcouru le Tome 1 (et du coup pas encore lu le Tome 2 non plus)

    mais un point n'est pas en accord avec ma façon de voir l'apprentisation de programmation VBA

    dans le chapitre II Prérequis, il est écrit

    Un objet peut avoir une propriété par défaut. Par exemple la propriété Value pour l'objet Range. Dans ce cas il n'est pas nécessaire de saisir cette propriété. Et Range("A1") = 15 équivaut à Range("A1").Value = 15
    Cela me semble dangereux, sur un tutoriel dont la vocation principale est tournée vers les débutants, de leur donner cette pratique, à la fois "non conforme aux règles de l'art", mais surtout laissant à VBA la libre interprétation de la bonne propriété en fonction du contexte.
    en effet, débat déjà abordé dans plusieurs sujets de la section VBA Excel : dans certaines situation, c'est le propriété .Text qui sera prise par défaut. Et là clairement, on est plus sur le même type de variable (.Text = ce qui est affiché dans la cellule, .Value = ce qui est affiché dans la barre de formule pour simplifier grandement)
    De quoi rendre chauve un débutant qui ne va pas réussir à débogger

    J'avais laissé quelques exemples sur le forum, mais je ne retrouve plus les messages

  15. #15
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut
    Bonjour !

    Je confirme : Range n'a pas de propriété par défaut !

    Souvent VBA sélectionne Value mais selon le contexte il arrive parfois à la propriété Text d'être choisie,
    j'en connais encore se les mordant (au choix !) en ayant buté plusieurs jours sans spécifier de propriété !

    _________________________________________________________________________________________________________
    Je suis Paris, Nice, Bruxelles, Charlie, …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  16. #16
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 073
    Points : 9 853
    Points
    9 853
    Billets dans le blog
    5
    Par défaut
    Marc-L

    si tu retrouves les deux discussions où on avait justement discuté et présenté des cas où le .Text était la propriété implicite qui était retenue, hésite pas à mettre les liens ici, là j'ai pas le temps de chercher

  17. #17
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut

    Idem pour moi … Si le constat de la propriété Text à la place de Value est rare
    - on s'en aperçoit qu'en cas de souci - j'ai quand même rencontré ce cas plusieurs fois !
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  18. #18
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 073
    Points : 9 853
    Points
    9 853
    Billets dans le blog
    5

  19. #19
    Rédacteur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2013
    Messages
    947
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Août 2013
    Messages : 947
    Points : 4 058
    Points
    4 058
    Par défaut
    Chers membres du club,

    j'ai le plaisir de vous présenter le tome 3 de ce mémento qui aborde le problème du voyageur de commerce avec une méthode d'approximation basée sur des principes simples.

    Ce cours est une suite de la série sur « apprendre la programmation en VBA pour Excel par la pratique ». Après le tome 1, qui a donné les bases avec un exemple d'implémentation d'un algorithme de QuickRanking, et le tome 2 qui a introduit la programmation graphique, dans ce tome 3, il s'agira d'aborder un problème relativement complexe : le parcours du voyageur de commerce.

    Bonne lecture et n'hésitez pas à apporter vos commentaires.

    Retrouvez les meilleurs cours et tutoriels pour apprendre Microsoft Excel

  20. #20
    Nouveau Candidat au Club
    Homme Profil pro
    retraite
    Inscrit en
    Juillet 2017
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Landes (Aquitaine)

    Informations professionnelles :
    Activité : retraite

    Informations forums :
    Inscription : Juillet 2017
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Grand merci pour ces tutoriels
    Un grand merci pour ce tutoriel (il me tarde d'explorer les 2 tomes suivants) parfait pour un néophyte comme moi.
    Responsable associatif, j'espère très rapidement moderniser les différents suivis obsolètes que nous possédions.
    Pierre

Discussions similaires

  1. [VBA pour Excel] Différence entre activate et select
    Par loacast dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 23/10/2008, 17h20
  2. [VBA-E] Help création d'un programme vba pour excel
    Par yampi dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 18/01/2007, 11h46
  3. [VBA-E] tri sur VBA pour Excel
    Par mariedrouin dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 21/05/2006, 13h32
  4. Réaliser une macro en VBA pour excel afin de créer un graphe
    Par xavier le breuil dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 04/12/2005, 14h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo