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 :

Incrémentation d'un macro sous VBA


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Mars 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2017
    Messages : 4
    Par défaut Incrémentation d'un macro sous VBA
    Je suis en dernière année de logistique et je souhaiterai mettre en place une macro qui puisse prendre un tableau sur une feuille et la retranscrire sur une autre feuille dans un ordre bien précis.
    J'ai essayé de le faire par plusieurs façon mais sans succès. Voici un exemple de la macro qui a été long et fastidieux a faire.

    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
    Range("G29:H30").Select
        Selection.Copy
        Sheets("Etiquettes (2)").Select
        Range("A31:B31").Select
        ActiveSheet.Paste
        Sheets("Etiquettes").Select
        Range("D29:E30").Select
        Application.CutCopyMode = False
        Selection.Copy
        Sheets("Etiquettes (2)").Select
        Range("A33:B33").Select
        ActiveSheet.Paste
        ActiveWindow.SmallScroll Down:=3
        Sheets("Etiquettes").Select
        Range("A29:B30").Select
        Application.CutCopyMode = False
        Selection.Copy
        Sheets("Etiquettes (2)").Select
        Range("A35:B35").Select
        ActiveSheet.Paste
        Sheets("Etiquettes").Select
        Range("G27:H28").Select
        Application.CutCopyMode = False
        Selection.Copy
        Sheets("Etiquettes (2)").Select
        Range("A37:B37").Select
        ActiveSheet.Paste
        Sheets("Etiquettes").Select
        Range("D27:E28").Select
        Application.CutCopyMode = False

  2. #2
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Une erreur de débutant (j'y suis passé aussi), c'est de faire trop confiance à l'enregistreur de macro et de mettre des Select/Selection partout.
    VBA est un langage objet, ce qui permet d'enchainer les objet pour faire un code plus simple.

    Par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Range("G29:H30").Select
        Selection.Copy
        Sheets("Etiquettes (2)").Select
        Range("A31:B31").Select
        ActiveSheet.Paste
    Peut s'écrire plus simplement sans Select/Selection :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Range("G29:H30").Copy
        Sheets("Etiquettes (2)").Range("A31:B31").PasteSpecial
    Voir même encore plus rapidement ainsi.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("G29:H30").Copy Sheets("Etiquettes (2)").Range("A31")
    Ca permet d'avoir un code plus simple et plus agréable à lire.
    Ca permet aussi une exécution plus rapide et moins désagréable à l'affichage.

    Sans compter les ActiveWindow.SmallScroll Down:=3 et les Application.CutCopyMode = False inutiles qui viennent le parasiter.

    Du coup, ton code devient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sheets("Etiquettes").Range("G29:H30").Copy Sheets("Etiquettes (2)").Range("A31")
    Sheets("Etiquettes").Range("D29:E30").Copy Sheets("Etiquettes (2)").Range("A33")
    Sheets("Etiquettes").Range("A29:B30").Copy Sheets("Etiquettes (2)").Range("A35")
    Sheets("Etiquettes").Range("G27:H28").Copy Sheets("Etiquettes (2)").Range("A37")
    Ce qui est quand même plus facile à comprendre, non ?

    Un conseil : l'enregistreur automatique de macro est un très bon outil, très intéressant pour te mettre sur la voie d'une solution.
    Mais il ne faut pas utiliser directement le code qu'il produit. Il faut essayer de comprendre les éléments de ce code (en utilisant l'aide VBA intégrée à Excel) pour créer ton propre code, plus propre.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Mars 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2017
    Messages : 4
    Par défaut Macro
    Merci Menhir, mais comme je ne suis pas doué alors j'ai préféré avoir une base avec l'enregistreur et la modifier par la suite.
    Et j'aurais voulu que la macro continue et s'arrête quand elle tombe sur une cellule vide, c'est possible ?

  4. #4
    Membre Expert
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If IsEmpty(cellule) Then Exit Sub
    Cela correspond-il à ce que tu cherches?

  5. #5
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par Kirss Voir le message
    Merci Menhir, mais comme je ne suis pas doué alors j'ai préféré avoir une base avec l'enregistreur et la modifier par la suite.
    Tu as raison, c'est une bonne méthode qui permet de montrer la voie sur le "comment faire".
    Mais il ne faut pas oublier la partie "modifier par la suite", parce que le code produit par l'enregistreur n'est souvent pas propre.

    Et j'aurais voulu que la macro continue et s'arrête quand elle tombe sur une cellule vide, c'est possible ?
    J'ai compris la logique des trois premières copies mais la quatrième semble introduire une autre logique qu'il n'est pas évident de comprendre.
    Il faudrait que tu indiques clairement l'algorithme d'enchainement des cellules à copier et de leur destination.
    En écrivant clairement ces règles, ça représentera déjà 90% de la réponse.

    En attendant, pour les enchainement, je te conseille de lire ça :
    https://msdn.microsoft.com/fr-fr/lib.../gg251601.aspx
    https://msdn.microsoft.com/fr-fr/lib.../gg278815.aspx
    https://msdn.microsoft.com/fr-fr/lib.../gg264682.aspx

    Et, d'une manière plus générale : http://bidou.developpez.com/article/VBA/
    Parce qu'il est important de partir sur de bonnes bases.

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Mars 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2017
    Messages : 4
    Par défaut Macro VBA
    riaolle non ce n'est pas ce que je cherchais mais Menhir m'a redirigé vers un lien intéréssant.

    Excuser moi pour le temps que j'ai pris pour vous répondre mais tu m'as été d'une grande aide pour ma macro

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Mars 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2017
    Messages : 4
    Par défaut Macro VBA
    riaolle oui c'est ce que je cherchais justement pour je ne sais pas comment l'a mettre dans ma macro comme dis Menhir a chaque 3 nouvelle ligne la macro s'incrémente de 3 et a un certain moment

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("Etiquettes").Range("G29:H30").Copy Sheets("Etiquettes (2)").Range("A31")
    Deviens

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("Etiquettes").Range("G29:H30").Copy Sheets("Etiquettes (2)").Range("G31")
    Pour faire simple je vais vous montrer la macro entière et vous verrez

Discussions similaires

  1. Contenu des macros sous VBA
    Par NOODLE02 dans le forum VBA Access
    Réponses: 6
    Dernier message: 24/05/2007, 09h52
  2. [VBA-E]Problème de longueur de macro sous VBA [E]
    Par titou8383 dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 23/04/2007, 19h00
  3. [VBA]Macros sous BO Reporter 5.1.8
    Par dieu08 dans le forum SDK
    Réponses: 10
    Dernier message: 11/10/2006, 15h46
  4. [VBA-E][débutant]aide pour macro sous excel
    Par julyBL dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 09/06/2006, 22h42
  5. execute une macro via vba sous access
    Par nes dans le forum Access
    Réponses: 4
    Dernier message: 28/03/2006, 23h15

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