VBA - Aide pour macro de copie

NicoKaraR Messages postés 17 Date d'inscription   Statut Membre Dernière intervention   -  
NicoKaraR Messages postés 17 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

J'ai un petit souci de macro. J'ai bricolé avec mes maigres connaissances jusqu'à présent mais je bloque un peu maintenant.

J'ai un tableau de données dans une première feuille, je veux copier certaines données dans deuxième feuille.

Voici la configuration de la première feuille :
Col E --- Col F  --- Col G --- Col H --- Col I --- Col J
ABCD --- Blabla --- 30 --- 10 --- 3 --- 0
EFGH --- Toitoi --- 8 --- 8 --- 1 --- 0
IJKL --- Albalb --- 36 --- 10 --- 3 --- 4
MNOP --- Iotiot --- 10 --- 4 --- 2 --- 2

Quand la colonne G est renseignée (non vide), je veux copier E - F - H sur ma feuille 2, I fois.
Et si J est différent de 0, je rajoute une ligne E - F - J.

Avec l'exemple ci-dessus, j'obtiendrai ça :

Feuille 2 :
Col A --- Col B  --- Col C 
ABCD --- Blabla --- 10
ABCD --- Blabla --- 10
ABCD --- Blabla --- 10
EFGH --- Toitoi --- 8
EFGH --- Toitoi --- 8
EFGH --- Toitoi --- 8
IJKL --- Albalb --- 10
IJKL --- Albalb --- 10
IJKL --- Albalb --- 10
IJKL --- Albalb --- 4
MNOP --- Iotiot --- 4
MNOP --- Iotiot --- 4
MNOP --- Iotiot --- 2





À l'heure actuelle, j'ai la macro suivante :

Sub COPIER()

Dim Derlig As Integer, Ligvide As Integer, Lig As Integer, Nbre As Byte, Copies()

Application.ScreenUpdating = False
Sheets("DEUX").Range("A2:D500").ClearContents

With Sheets("UNE")
For Lig = 5 To 139
If .Cells(Lig, "H") > 0 Then
Copies = .Range(.Cells(Lig, "E"), .Cells(Lig, "J")).Value
Nbre = .Cells(Lig, "I")
With Sheets("DEUX")
Ligvide = .Columns("A").Find("", .Range("A1")).Row
.Cells(Ligvide, "A").Resize(Nbre, 6) = Copies
End With
If .Cells(Lig, "J") > 0 Then
Copies = .Range(.Cells(Lig, "E"), .Cells(Lig, "J")).Value
End If
With Sheets("DEUX")
Ligvide = .Columns("A").Find("", .Range("A1")).Row
.Cells(Ligvide, "A").Resize(1, 6) = Copies
End With
End If
Next
End With
End Sub

Pourriez m'aider un petit peu svp ?!
A voir également:

8 réponses

Gyrus Messages postés 3334 Date d'inscription   Statut Membre Dernière intervention   526
 
Bonjour,

Une solution
https://www.cjoint.com/?DAkkArWjnsM


A+
0
NicoKaraR Messages postés 17 Date d'inscription   Statut Membre Dernière intervention  
 
Merci Gyrus,

Ta macro fonctionne mais j'y comprends rien ! :(
Par contre, quand je l'applique à mon fichier, j'ai une erreur 400.
D'où cela peut-il venir ?
0
Gyrus Messages postés 3334 Date d'inscription   Statut Membre Dernière intervention   526
 
Désolé, j'ai égaré ma boule de cristal :D

En mode débogage, tu dois voir une ligne surlignée en jaune qui t'indiquera où se situe l'erreur.

A+
0
NicoKaraR Messages postés 17 Date d'inscription   Statut Membre Dernière intervention  
 
Ça fonctionne maintenant (j'ai rien touché, juste copié la macro dans un nouveau fichier).

Par contre, que dois-je rajouter pour que cela ne copie pas le format des cellules ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Gyrus Messages postés 3334 Date d'inscription   Statut Membre Dernière intervention   526
 
Il faut faire un collage spécial valeurs

Sub COPIER()
Dim LigneS As Long, LigneC As Long
Application.ScreenUpdating = False
Sheets("DEUX").Range("A2:D500").ClearContents
With Sheets("UNE")
For LigneS = 5 To .Range("E" & Rows.Count).End(xlUp).Row
If .Cells(LigneS, "G") > 0 Then
LigneC = Sheets("DEUX").Range("A" & Rows.Count).End(xlUp).Row + 1
.Application.Union(.Range("E" & LigneS), .Range("F" & LigneS), .Range("H" & LigneS)).Copy
Sheets("DEUX").Range("A" & LigneC).Resize(.Cells(LigneS, "I"), 3).PasteSpecial _
Paste:=xlPasteValues
If .Cells(LigneS, "J") > 0 Then
LigneC = Sheets("DEUX").Range("A" & Rows.Count).End(xlUp).Row + 1
.Application.Union(.Cells(LigneS, "E"), .Cells(LigneS, "F"), .Cells(LigneS, "J")).Copy
Sheets("DEUX").Range("A" & LigneC).Resize(1, 3).PasteSpecial _
Paste:=xlPasteValues
End If
End If
Next
End With
End Sub

A+
0
NicoKaraR Messages postés 17 Date d'inscription   Statut Membre Dernière intervention  
 
Merci Gyrus !
Bonne fin de journée ;)
0
NicoKaraR Messages postés 17 Date d'inscription   Statut Membre Dernière intervention  
 
Bonjour Gyrus,

Je reviens vers toi car j'ai rencontré un problème avec la macro.

If .Cells(LigneS, "G") > 0 Then

Dès qu'une cellule de la colonne G est vide, la macro ne s'exécute plus.

Et j'ai toujours cette erreur 400 que je n'arrive pas à résoudre..
0
NicoKaraR Messages postés 17 Date d'inscription   Statut Membre Dernière intervention  
 
http://cjoint.com/data/0ApkyNFF4KQ.htm
0