Copier coller ligne d'un tableau avec condition
Bonjour,
J'ai deux feuilles Source et Destination. Dans Source, il y a la colonne Code Client, Port et montant et date. Le duo Code Client et Port est unique pour chaque commande. Depuis hier j'essaye de comparer le duo Code client et Port de Source avec le duo Code Client et port de Destination. J'aimerais que lorsqu'il ne trouve pas le duo Code Client et Port dans Destination, il colle la ligne de Source à la fin du tableau dans Destination. Il faut absolument que j'insère ces lignes en fin de tab parce qu'il y aura des ajouts fait manuellement dans mon tab.
J'ai essayé plein de choses dont :
et
mais ça ne fonctionne pas et je bloque énormément.
Alors est ce qu'il y aurait un moyen de comparer les deux colonnes A et B de Source avec les deux colonnes A et B de Destination et s'il y a aucune correspondance, le mettre en fin de tableau de Destination s'il vous plait ?
Bonjour,
Bon je préviens je suis nul en array et je n'arrive pas à le transposer une fois les data chargées, si quelqu'un peu m'indiquer comment le faire au lieu de passer par la deuxième boucle je suis preneur mais en attendant :
Sub COMPAR()
Dim TEMP(), L%, I%
Dim WS_D As Object, WS_S As Object
Set WS_D = Worksheets("DESTINATION")
Set WS_S = Worksheets("SOURCE")
L = 2
With WS_D.ListObjects("Tableau1")
ReDim Preserve TEMP(0)
Do While WS_S.Cells(L, 1) <> ""
If Application.WorksheetFunction.CountIfs(.ListColumns(1).DataBodyRange, WS_S.Cells(L, 1), .ListColumns(2).DataBodyRange, WS_S.Cells(L, 2)) = 0 Then
ReDim Preserve TEMP(UBound(TEMP) + 1)
TEMP(UBound(TEMP)) = WS_S.Range(WS_S.Cells(L, 1), WS_S.Cells(L, 4))
End If
L = L + 1
Loop
For I = 1 To UBound(TEMP)
WS_D.Cells(.ListRows.Count + 2, 1).Resize(, 4) = TEMP(I)
Next I
End With
End SubSinon en semi manuel : MEFC > Filtrage par couleur > Copie les lignes > Les colles à la suite dans le tableau de destination.
Cdlt,
Merci beaucoup ça fonctionne très bien !!! En tout cas je suis plus nulle que toi parce que je cherche comment faire depuis hier et impossible de trouver un moyen
Pourrais tu m'expliquer ton code si tu as le temps s'il te plaît ?
Cdlt,
Bonjour,
Avec les commentaires :
ub COMPAR()
Dim TEMP(), L%, I%
Dim WS_D As Object, WS_S As Object
Set WS_D = Worksheets("DESTINATION") 'Defini feuille destination
Set WS_S = Worksheets("SOURCE") 'Défini feuille source
L = 2 'initie à la ligne 2
With WS_D.ListObjects("Tableau1") 'avec le tableau 1 de la feuille destination
ReDim Preserve TEMP(0) 'initialise tableau temporaire à 0
Do While WS_S.Cells(L, 1) <> "" 'boucle jusqu'à la dernière ligne vide de feuille source
If Application.WorksheetFunction.CountIfs(.ListColumns(1).DataBodyRange, WS_S.Cells(L, 1), .ListColumns(2).DataBodyRange, WS_S.Cells(L, 2)) = 0 Then 'si NB.SI.ENS (code client et port de la cellule à ligne L de la feuille source, tableau 1 feuille destination) = 0 (donc non trouvé)
ReDim Preserve TEMP(UBound(TEMP) + 1) 'J'augmente mon tableau temporaire de 1
TEMP(UBound(TEMP)) = WS_S.Range(WS_S.Cells(L, 1), WS_S.Cells(L, 4)) 'j'ajoute sur cette nouvelle ligne de mon tableau temporaire ma ligne source
End If
L = L + 1 'Passage L suivant
Loop
For I = 1 To UBound(TEMP) 'pour chaque ligne de mon tableau temporaire
WS_D.Cells(.ListRows.Count + 2, 1).Resize(, 4) = TEMP(I) 'on met les valeurs à la suite du tableau de destination
Next I
End With
End SubJe pense qu'on pourrait modifier le code pour avoir uen valeur dans la dimension 0 du tableau temporaire, et supprimer la dernière boucle avec une méthode .transpose mais je n'y arrive pas avec les tableaux multidimensionnels.
Si quelqu'un passe par là et sait le faire ...
Cdlt,
Bonjour,
d'accord, merci pour les commentaires sur le code et pour l'aide.
Cdlt,
Bonjour,
d'accord, merci pour les commentaires sur le code et pour l'aide.
Cdlt,