1 pièce(s) jointe(s)
Copie qui s'arrête via code vb
Bonjour à tous,
J'ai un problème de copie lorsque je souhaite copier deux colonnes d'une feuille (nommé Extraction) vers une autre feuille (nommé analyse), je souhaite automatisé cette tache car j'ai beaucoup de données et cela est plus simple. J'ai donc esquissé un code VB (que vous trouverez ci-dessous) pour réaliser cette tâche. Or les colonnes ne se copie pas entièrement! Je vous glisse aussi en pièce jointe un exemple avec un classeur Excel avec beaucoup moins de données. Vous pouvez lancer la macro et voir le problème !
J'espère avoir été le plus clair possible.
Code:
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 31 32 33 34 35 36 37 38 39 40 41 42
|
Sheets("Extraction").Select
i = 3
j = 5
Do While Cells(i, j) <> "Recettes - Missions"
If j < 80 Then
j = j + 1
Else
MsgBox "La colonne n'existe pas !"
End If
Loop
Cells(i, j).Select
Range(Selection, Selection.End(xlDown)).Copy
Sheets("Analyse").Select
Range("A65536").End(xlUp).Offset(1, 0).Select
ActiveSheet.Paste
Sheets("Extraction").Select
i = 3
j = 5
Do While Cells(i, j) <> "Recettes - Hors Missions"
If j < 80 Then
j = j + 1
Else
MsgBox "La colonne n'existe pas !"
End If
Loop
Cells(i, j).Select
Range(Selection, Selection.End(xlDown)).Copy
Sheets("Analyse").Select
Range("B65536").End(xlUp).Offset(1, 0).Select
ActiveSheet.Paste |
Merci par avance de votre aide,
xszma.
re si tu veux garder les cellule vide
re
voir titre
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| [Sub test2()
Dim c1 As Range, c2 As Range, sh1 As Worksheet, sh2 As Worksheet, nextcel As Range 'on declare des object range et sheets pour simplifier l'ecriture du code
Set sh1 = Sheets("Extraction") 'on attribut le sheet extraction a sh1
Set sh2 = Sheets("Analyse") 'on attribut le sheet analyse a sh2
Set c1 = sh1.Cells.Find("Recettes - Missions", LookIn:=xlValues, lookat:=xlWhole) 'on trouve la cellule recettes - mission
Set c2 = sh1.Cells.Find("Recettes - Hors Missions", LookIn:=xlValues, lookat:=xlWhole) 'on trouve la cellule recettes -hors mission
If Not c1 Is Nothing Then 'si c1 n'est pas rien (donc la cellule recettes missions)
Set nextcel = c1.EntireColumn.Find("*", , , , , xlPrevious) 'on prends la derniere ligne remplie dans une des deux colonnes
With sh1.Range(c1, nextcel) 'on prends la cellule jusqu'a la derniere cellule remplie dans la meme colonne
.Copy Destination:=sh2.Cells(Rows.Count, 1).End(xlUp) 'et enfin on copie dans le sheets analyse (sh2) dans la colonne"A" a partir de la premiere cellule dispo
End With
End If
' et on fai t EXACTEMENT!!!! pareil avec la cellule hors missions
If Not c2 Is Nothing Then 'si c1 n'est pas rien (donc la cellule recettes missions)
Set nextcel = c2.EntireColumn.Find("*", , , , , xlPrevious) 'on prends la derniere ligne remplie dans une des deux colonnes
With sh1.Range(c2, nextcel)
.Copy Destination:=sh2.Cells(Rows.Count, 2).End(xlUp)
End With
End If
End Sub |
ce la dit
par la methode globale range ou autofilter
j'espere que c'est pas quelque chose qui est fait régulièrement sinon on va avoir un probleme l'ors du prochain ajout
sauf si on prend le xl(up) ,,,previous des colonnes "A:B" du sheets "Annalyse"