VBA/Macro dans Excel: Comment ca marche

Bonjour,

Je suis débutant en ce qui concerne les macros et le langage VBA.
Je suis en stage présentement et j'ai besoin de faire une macro.

Voici mon problème:
J'ai un classeur ayant plusieurs feuilles. Toutes les feuilles ont le même format de présentation de données (les colonnes A à V sont utilisées).
Cependant, je veux copier les données d'une ligne dans tout le classeur et je veux qu'elle se copie sur la première ligne disponible.

Pouvez-vous m'aider s.v.p. ?

Merci de votre aide!

1 réponse

  1. Modérateur
    Bonjour débutant en VBA,
    On va procéder point par point... Voyons déjà à quel point tu débutes...
    Peux tu faire ton code avec ces éléments :
    - copier une ligne définie :
    Sheets("Feuil1").Range("A6:V6").Copy
    - numéro de la première ligne vide de la feuille 2 (en supposant que la colonne A ne comporte pas de "trous") :
    Sheets("Feuil2").Range("A65536").End'xlUp).Row
    - boucle sur toutes les feuilles du classeur :
    Dim Ws As Worksheet
    For Each Ws In ThisWorkbook.Worksheets
        MsgBox Ws.Name
    Next

    - test si la feuille est la feuille "Feuil1" :
    Dim Ws As WorkSheet
    If Ws.Name = "Feuil1" Then

    - Coller dans une feuille : en gras dans le code la destination du "collage"; il y a juste un espace après copy.
    Sheets("Feuil").Range("Source").Copy Sheets("Feuil2").Range(destination)
    Le tout, placé dans une sub, à l'intérieur d'un module peux créer ta macro. Essaye de la faire et reviens nous ici avec ton code final.
    1. Salut Pijaku,
      Premièrement, merci pour ton aide! Ma base en VBA est relativement très, très, très limitée. Voici ce que cela donne avec ton code:

      Sub Copier_Ligne()

      Sheets("Feuil1").Range("A:V").Copy
      Sheets("Feuil2").Range("A4:A65536").End 'xlUp).Row
      Dim Ws As Worksheets
      For Each Ws In ThisWorkbook.Worksheets
      MsgBox Ws.Name
      Next
      If Ws.Name = "Feuil1" Then
      Sheets("Feuil").Range("Source").Copy Sheets("Feuil2").Range(Destination)
      End If
      End Sub

      J'avais oublié de spécifier que chaque feuile a un en-tête de 3 lignes. Également, les colonnes ne sont pas de la même largeur partout sur la feuille, mais, selon ma compréhension de VBA, ceci n'a pas d'importance.

      Aussi, je présume que les cellules A6:V6 étaient un exemple. Donc, j'aimerais savoir comment on spécifie dans VBA les cellules des colonnes (A_n'importe quoi :V_n'importe quoi).
      Finalement, je sais qu'il y a une erreur et ceci concerne l'appel des "sheets" mais je ne sais pas comment faire dans VBA.

      Merci de ton aide encore Pijaku!

      Cris0709
    2. Modérateur
      Salut,
      Bon alors c'est pas très compliqué, on va reprendre à 2. Ce que tu veux faire c'est :
      - copier une ligne de ta feuille Feuil1
      - la coller dans toutes les feuilles en dernière ligne.
      En VBA on traduirait cela comme :
      - Quel est le numéro de la ligne à copier
      - Boucle toutes les feuilles du classeur
      - Si nom de la feuille = Feuil1 alors on ne fait rien
      - Sinon on copie la ligne en feuil1 et on la colle dans cette feuille.
      - Suivante...
      Ce qui se traduit en code VBA par :
      Sub Copier_Ligne()
      Dim Ws As Worksheet
      Dim LignACopier As Integer
      'ici on lui dit quel est le numéro de la ligne à copier; tu peux bien entendu le changer
      LignACopier = 3
      'on boucle sur toutes les feuilles du classeur
      For Each Ws In ThisWorkbook.Worksheets
          'si la feuille s'appele Feuil1 alors
          If Ws.Name = "Feuil1" Then
          'on ne fait rien
          Else 'sinon
              'on copie la ligne de Feuil1 que l'on colle dans cette feuille
              Sheets("Feuil1").Range("A" & LignACopier & ":V" & LignACopier).Copy Sheets(Ws.Name).Range("A65536").End(xlUp).Offset(1, 0)
          End If
      'feuille suivante
      Next
      End Sub