VBA - Aide pour macro de copie

Fermé
NicoKaraR Messages postés 17 Date d'inscription jeudi 31 octobre 2013 Statut Membre Dernière intervention 15 janvier 2014 - 10 janv. 2014 à 09:39
NicoKaraR Messages postés 17 Date d'inscription jeudi 31 octobre 2013 Statut Membre Dernière intervention 15 janvier 2014 - 15 janv. 2014 à 10:24
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 samedi 20 juillet 2013 Statut Membre Dernière intervention 9 décembre 2016 523
10 janv. 2014 à 10:27
Bonjour,

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


A+
0
NicoKaraR Messages postés 17 Date d'inscription jeudi 31 octobre 2013 Statut Membre Dernière intervention 15 janvier 2014
10 janv. 2014 à 10:55
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 samedi 20 juillet 2013 Statut Membre Dernière intervention 9 décembre 2016 523
10 janv. 2014 à 11:11
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 jeudi 31 octobre 2013 Statut Membre Dernière intervention 15 janvier 2014
10 janv. 2014 à 14:30
Ç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 samedi 20 juillet 2013 Statut Membre Dernière intervention 9 décembre 2016 523
10 janv. 2014 à 14:59
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 jeudi 31 octobre 2013 Statut Membre Dernière intervention 15 janvier 2014
10 janv. 2014 à 16:46
Merci Gyrus !
Bonne fin de journée ;)
0
NicoKaraR Messages postés 17 Date d'inscription jeudi 31 octobre 2013 Statut Membre Dernière intervention 15 janvier 2014
15 janv. 2014 à 10:06
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 jeudi 31 octobre 2013 Statut Membre Dernière intervention 15 janvier 2014
15 janv. 2014 à 10:24
http://cjoint.com/data/0ApkyNFF4KQ.htm
0