VBA/Macro dans Excel: Comment ca marche

cris0709 Messages postés 2 Statut Membre -  
pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   -
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. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    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.
    0
    1. cris0709 Messages postés 2 Statut Membre
       
      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
      0
    2. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      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
      0