VBA/Macro dans Excel: Comment ca marche

Fermé
cris0709 Messages postés 2 Date d'inscription lundi 28 mars 2011 Statut Membre Dernière intervention 30 mars 2011 - 28 mars 2011 à 19:41
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 - 30 mars 2011 à 08:29
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!


A voir également:

1 réponse

pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 757
29 mars 2011 à 08:47
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
cris0709 Messages postés 2 Date d'inscription lundi 28 mars 2011 Statut Membre Dernière intervention 30 mars 2011
30 mars 2011 à 02:11
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
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 757
30 mars 2011 à 08:29
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