Copier Coller Deplacer suivant condition VBA
Bonjour,
Je seche complet!
Je dois copier depuis la feuille "SCHEDULE" les données de la colonne "ORDRE", de la colonne "Operation", de la colonne "Ressource" et de la colonne "durée normale".
Ces données doivent être collées dans la feuille "SAP DETAIL".
Si les données ordre et opération sont les même alors ressource et durée normale doivent être sur la même ligne que l'ordre et l'opération et il y aura alors une ligne qui recapitulera la totalité des info
J'ai créé un feuille "SAP DETAIL Exemple" afin que ma demande soit plus claire.
Merci de votre aide
bonjour,
une proposition
Sub aargh()
' suppose feuille scehdule triée sur la colonne 1
Dim ws1, ws2, dlws1, dlws2, i, oldo, k, c
Set ws1 = Sheets("schedule")
Set ws2 = Sheets("SAP DETAIL exemple")
dlws2 = ws2.Cells(Rows.Count, 1).End(xlUp).Row
ws2.Rows("2:" & dlws2).ClearContents
With ws1
dlws1 = .Cells(Rows.Count, 1).End(xlUp).Row
k = 1
oldo = ""
For i = 3 To dlws1
If .Cells(i, 1) <> oldo Then
k = k + 1
ws2.Cells(k, 1) = .Cells(i, 1)
ws2.Cells(k, 2) = .Cells(i, 4)
oldo = .Cells(i, 1)
c = 2
End If
c = c + 2
ws2.Cells(k, c) = .Cells(i, "I")
ws2.Cells(k, c + 1) = .Cells(i, "G")
Next i
End With
End SubMerci h2so4,
ce n'est pas tout à fait çà.
il ne faut pas suprimer les doublons lorsque le numero d'opération est different,
exemple : pour le numero d'ordre 400192518, il y a 3 opérations différentes, je dois donc trouver 3 lignes.
Les doublons peuvent être suprimer si le numéro d'ordre et l'opération est identique.
Merci
re-bonjour,
code adapté
Sub aargh()
' suppose feuille schedule triée sur la colonne 1 et 4
Dim ws1, ws2, dlws1, dlws2, i, oldo, k, c
Set ws1 = Sheets("schedule")
Set ws2 = Sheets("SAP DETAIL exemple")
dlws2 = ws2.Cells(Rows.Count, 1).End(xlUp).Row
ws2.Rows("2:" & dlws2).ClearContents
With ws1
dlws1 = .Cells(Rows.Count, 1).End(xlUp).Row
k = 1
oldo = ""
For i = 3 To dlws1
If .Cells(i, 1) & .Cells(i, 4) <> oldo Then
k = k + 1
ws2.Cells(k, 1) = .Cells(i, 1)
ws2.Cells(k, 2) = .Cells(i, 4)
oldo = .Cells(i, 1) & .Cells(i, 4)
c = 2
End If
c = c + 2
ws2.Cells(k, c) = .Cells(i, "I")
ws2.Cells(k, c + 1) = .Cells(i, "G")
Next i
End With
End SubBonjour,
aprés different test, je m'apperçois d'un bug. Si je décale mon tableau qui se trouve dans la feuille schedule d'une ligne ou plusieurs ligne, les données ne seront pas correctement copiées.
Je n'arrive pas à trouver sur quelle partie du code je dois intervenir pour rétablir le code.
Merci de votre aide
bonjour,
j'ai mis quelques commentaires dans le code
Sub aargh()
' suppose feuille schedule triée sur la colonne 1 et 4
Dim ws1, ws2, dlws1, dlws2, i, oldo, k, c
Set ws1 = Sheets("schedule")
Set ws2 = Sheets("SAP DETAIL exemple")
dlws2 = ws2.Cells(Rows.Count, 1).End(xlUp).Row 'dlws2 dernière ligne de ws2
ws2.Rows("2:" & dlws2).ClearContents 'on nettoie la la feuille ws2
With ws1
dlws1 = .Cells(Rows.Count, 1).End(xlUp).Row 'dlws1 dernière ligne de ws1
k = 1 'numéro de ligne sur ws2
oldo = "" ' numéro et operation précédent
For i = 3 To dlws1 'on parcourt toutes les lignes ws1 à partir de la ligne 3
If .Cells(i, 1) & .Cells(i, 4) <> oldo Then 'si numéro et opération <> numéro ligne précédente
k = k + 1 'nouvelle ligne sur ws2
ws2.Cells(k, 1) = .Cells(i, 1) 'numéro
ws2.Cells(k, 2) = .Cells(i, 4) 'opération
oldo = .Cells(i, 1) & .Cells(i, 4) '
c = 2 ' numéro de colonne sur ws2 pour les primes
End If
c = c + 2 'on passe à la colonne suivante pour la prime
ws2.Cells(k, c) = .Cells(i, "I") 'type de prime
ws2.Cells(k, c + 1) = .Cells(i, "G") 'montant de la prime
Next i
End With
End Sub
si ton tableau commence à une autre ligne que la ligne 3 voci l'instruction à modifier
For i = 3 To dlws1 'on parcourt toutes les lignes ws1 à partir de la ligne 3Bonjour,
Merci pour tous ces détails cela me permet de comprendre tous les trmres utilisés.
J'ai pu adapter ton code à mon utilistation
Merci beaucoup