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 Sub

Merci 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 Sub

Bonjour,

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 3

Bonjour,

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

Rechercher des sujets similaires à "copier coller deplacer suivant condition vba"