OVH Cloud OVH Cloud

Copie de lignes d'une feuille a une autre

5 réponses
Avatar
sloun
Bonjour,
J'essaie de cr=E9er un prgramme VBA pour faire un r=E9capitulatif de tous
mes onglets ( un par mois ) dans une seule feuille que j'appelerais
recap. Dans le futur j'essaierais aussi de rajouter des conditions,
mais pour l'instant je n'arrive d=E9ja pas a copier toutes les donn=E9es.

J'ai bricol=E9 un code qui ressemble a ca :

Dim x, y As Integer
Dim Ligne As Variant
Private Sub CommandButton1_Click()
x =3D 5 'D=E9but de mon tableau =E0 copier
y =3D 2 'D=E9but de mon tableau d'arriv=E9e
With Worksheets
Sheets("Janvier 06").Select ' Pour l'instant je copie d'une feuille
fixe
For x =3D 5 To 100 'ActiveSheet.UsedRange.Rows.Count
Rows(x).Copy
Ligne =3D "A" & y
Worksheets("Recap").Select
Range(Ligne).Select
Selection.Paste
y =3D ActiveSheet.UsedRange.Rows.Count + 1
x =3D x + 1
Sheets("Janvier 06").Select
Next
End With
End Sub


Pour l'instant j'ai une erreur 438, mais j'ai eu aussi des erreurs 1004
il me semble.

Ca fait trois jours que je m'arrache les cheveux, du coup je viens voir
si quelqu'un avait une piste pour m'aider

Merci d'avance

5 réponses

Avatar
anonymousA
Bonjour

Imaginons que tes feuilles s'appellent toto, tata, tutu et pour
respecter ton souhait que ta feuille destination s'appelle RECAP. Je
suppose que dans tes feuilles à copier on comence à la ligne 5 et
qu'il y a forcément quelque chose en ligne 5 au moins ou plus.


Dim tableau(1 To 3) As String, derligne(1 To 3) As Long

tableau(1) = "toto"
tableau(2) = "tata"
tableau(3) = "tutu"

With Sheets(tableau(1))
derligne(1) = .Cells.Find("*", .Range("A1"), xlFormulas, , xlByRows,
xlPrevious).Row
End With
With Sheets(tableau(2))
derligne(2) = .Cells.Find("*", .Range("A1"), xlFormulas, , xlByRows,
xlPrevious).Row
End With
With Sheets(tableau(3))
derligne(3) = .Cells.Find("*", .Range("A1"), xlFormulas, ,
xlByRows, xlPrevious).Row
End With

For I = 1 To 3
With Sheets("RECAP")
On Error Resume Next
ligneRECAP = .Cells.Find("*", .Range("A1"), xlFormulas, , xlByRows,
xlPrevious).Row
If Err.Number <> 0 Then Err.Clear: ligneRECAP = 1
End With
Sheets(tableau(I)).Range("A5:A" & derligne(I)).EntireRow.Copy
Sheets("RECAP").Range("A" & ligneRECAP + 1)
Next

A+

wrote:
Bonjour,
J'essaie de créer un prgramme VBA pour faire un récapitulatif de tous
mes onglets ( un par mois ) dans une seule feuille que j'appelerais
recap. Dans le futur j'essaierais aussi de rajouter des conditions,
mais pour l'instant je n'arrive déja pas a copier toutes les données.

J'ai bricolé un code qui ressemble a ca :

Dim x, y As Integer
Dim Ligne As Variant
Private Sub CommandButton1_Click()
x = 5 'Début de mon tableau à copier
y = 2 'Début de mon tableau d'arrivée
With Worksheets
Sheets("Janvier 06").Select ' Pour l'instant je copie d'une feuille
fixe
For x = 5 To 100 'ActiveSheet.UsedRange.Rows.Count
Rows(x).Copy
Ligne = "A" & y
Worksheets("Recap").Select
Range(Ligne).Select
Selection.Paste
y = ActiveSheet.UsedRange.Rows.Count + 1
x = x + 1
Sheets("Janvier 06").Select
Next
End With
End Sub


Pour l'instant j'ai une erreur 438, mais j'ai eu aussi des erreurs 1004
il me semble.

Ca fait trois jours que je m'arrache les cheveux, du coup je viens voir
si quelqu'un avait une piste pour m'aider

Merci d'avance


Avatar
sloun
Merci beaucoup, je vais essayer de comprendre et tester tout ca :)


Bonjour

Imaginons que tes feuilles s'appellent toto, tata, tutu et pour
respecter ton souhait que ta feuille destination s'appelle RECAP. Je
suppose que dans tes feuilles à copier on comence à la ligne 5 et
qu'il y a forcément quelque chose en ligne 5 au moins ou plus.




Avatar
sloun
Ca marche pas, j'ai toujours une erreur 438 quand j'enleve le on error
resume next

est ce qu'il ne faudrait pas que je déclare lignerecap avant ca :

ligneRecap = .Cells.Find("*", .Range("A1"), xlFormulas, , xlByRows,
xlPrevious).Row


j'ai essayé de le declarer comme range mais ca ne marche pas
Avatar
anonymousA
le on error resume next est là pour prendre en compte le fait que la
1ere fois la feuille récap est vide auquel cas, Find ne renvoie aucun
objet range et dans ces conditions rien.row renvoie une erreur. Il ne
faut donc pas l'enlever sauf si on est certain qu'il existe quelque
chose sur la feuille RECAP la 1ere fois où la boucle est parcourue.
Donc si la feuille RECAP est vide, on skippe l'erreur en utilisant on
error resume next et du coup on passe la valeur ligneRECAP manuellement
à 1.

A+

wrote:
Ca marche pas, j'ai toujours une erreur 438 quand j'enleve le on error
resume next

est ce qu'il ne faudrait pas que je déclare lignerecap avant ca :

ligneRecap = .Cells.Find("*", .Range("A1"), xlFormulas, , xlByRows,
xlPrevious).Row


j'ai essayé de le declarer comme range mais ca ne marche pas


Avatar
anonymousA
et j'oubliais, ligneRECAP est un nombre et en aucun cas un range.

A+

anonymousA wrote:
le on error resume next est là pour prendre en compte le fait que la
1ere fois la feuille récap est vide auquel cas, Find ne renvoie aucun
objet range et dans ces conditions rien.row renvoie une erreur. Il ne
faut donc pas l'enlever sauf si on est certain qu'il existe quelque
chose sur la feuille RECAP la 1ere fois où la boucle est parcourue.
Donc si la feuille RECAP est vide, on skippe l'erreur en utilisant on
error resume next et du coup on passe la valeur ligneRECAP manuellement
à 1.

A+

wrote:
Ca marche pas, j'ai toujours une erreur 438 quand j'enleve le on error
resume next

est ce qu'il ne faudrait pas que je déclare lignerecap avant ca :

ligneRecap = .Cells.Find("*", .Range("A1"), xlFormulas, , xlByRows,
xlPrevious).Row


j'ai essayé de le declarer comme range mais ca ne marche pas