Copier les données d'une colonne Feui2 vers Feuil1 selon plusieurs critères

9vba.xlsm (54.31 Ko)

Bonjour,

Je souhaite avec une macro VBA copier les données d'une colonne "feuil2" vers "feuil1" selon plusieurs critères.

Les deux feuilles ont la même structure. Mais je dois récupérer la dernière colonne de la feuil2 et la coller après la dernière colonne de la feuil1.

Algorithme :

Si "col1 & col2 & col3 & col3 & col4" de la "Feuil2" identiques "col1 & col2 & col3 & col3 & col4" de la "Feuil1" pour chaque ligne alors copier la valeur de la col5 de la feuil2 vers la "col6" de la "Feuil1".

Si pas de correspondance alors copier toute la ligne de la "Feuil2" et l'insérer à la "Feuil1" et décaler d'une colonne la dernière cellule de la ligne copier.

J'ai mis une copie d'un fichier anonyme.

Je vous remercie !

Un essai :

Sub Copie()
    Dim wS1 As Worksheet, wS2 As Worksheet
    Dim nL As Long, i As Long, j As Long
    Dim chaine1 As String, chaine2 As String

    Set wS1 = Sheets("Feuil1")
    Set wS2 = Sheets("Feuil2")
    nL = wS2.Cells(Rows.Count, "E").End(xlUp).Row

    For i = 2 To nL
        chaine1 = wS1.Cells(i, 1) & wS1.Cells(i, 2) & wS1.Cells(i, 3) & wS1.Cells(i, 4)
        For j = 2 To nL
            chaine2 = wS2.Cells(j, 1) & wS2.Cells(j, 2) & wS2.Cells(j, 3) & wS2.Cells(j, 4)
            If chaine2 = chaine1 Then
               wS1.Cells(i, 6) = wS2.Cells(j, 5)
               Exit For
            End If
        Next j
    Next i
End Sub

Bonjour Optimix,

Un grand merci infiniment !

Le code fait 90% environ de ce que je veux mais il me manque une instruction si "Chaine1 <> chaine2" alors insérer chaine2 dans Feuil1 et décaler wS2.Cells(j, 4) vers wS1.Cells(i, 6).

Mon objectif c'est de rapatrier toutes les infos de la feuil2 vers la feuil1.

i.e. quand je fais la somme Cells(j, 5) à la feuil2, que je retrouve la même somme sur la feuil1.

L'insertion peut se faire à la dernière ligne de tableau de feuil1 (peut importe à quelle ligne où sera insérer chaine2).

J'ai essayé d'insérer :

wS1.Cells(i, 6) = wS2.Cells(j, 5)
Exit For
Else
If chaine2 <> chaine1 Then
......

End If
Next j
Next i
End Sub

Je vous remercie vraiment.

On peut identifier les lignes orphelines (chaine2 qui n'ont pas de correspondance dans les 533 lignes de la feuille 1). Il suffit en sortie de boucle J de n'avoir pas trouvé de ligne identique. Un simple flag suffit.

Mais une insertion n'est pas possible puisqu'on ne sait pas où elle doit se faire. Ce n'est pas un If...Else...End if.
Pour conserver dans la feuille 1 toutes les lignes orphelines de la feuille 2 afin d'avoir le même total, on peut les ajouter à la suite sur la feuille 1 si ça te convient.

Bonsoir,

Oui cette idée de rajouter les lignes orphelines me convient parfaitement. Toutes les lignes orphelines je veux les conserver dans la feuil1.

Je ne sais pas pas comment m’y prendre car je faisais des copier/coller, impossible de bien gérer.

C’est vraiment sympa de votre part.

Merci !

Il y a quand même quelques problèmes dans ce tableau.
- les colonnes "montant" étaient dans un format autre que nombre qui faisaient passer les centimes à la trappe.
- la feuille 1 est truffée de doublons et parfois même d'incohérences : les lignes 106 et 107 ont les mêmes critères dans les colonnes A,B,C et D, ce sont donc des doublons. Leurs montants sont différents. Le programme ne mets que les valeurs de la feuille 2. Par conséquent, tu ne trouveras jamais les mêmes totaux dans les feuilles 1 et 2.

Je me suis donc contenté d'inscrire les valeurs de la feuille 2 dans la feuille 1 lorsque les 4 critères étaient les mêmes et d'ajouter les lignes orphelines à la fin comme souhaité. Maintenant, à toi d'adapter.

15vba2.xlsm (60.95 Ko)

Bonjour Optimix,

Votre programme fonctionne super bien.

Je l'ai adapté à mon fichier source qui contient les vraies données.

Je vous remercie infiniment.

Alors c'est tout bon. Tchüss !

Bonjour Optimix,

J'ai eu un retour de la personne qui fait l'extraction de mon fichier.

Ses explications sur les doublons.

Dans une année, les montants sont saisies par mois ou par trimestre, c'est pourquoi on a des lignes identiques avec des montants différents.

La personne qui fait l'extraction ne peut pas faire la somme au moment de l'extraction pour la même année.

Donc, je voudrai vous demander si c'est possible, pour les doublons de faire la somme quand c'est la même année pour avoir une seule ligne par année?

Je vous remercie infiniment !

En attendant, je cherche.

Excellente semaine !!

Attention, le besoin est nettement plus complexe. Il ne s'agit plus du tout d'ajouter les valeurs de la feuille 2 à celles de la feuille 1 lorsque les cellules A à D sont identiques. Si on prend les lignes 106 à 108, ça donne ceci :

screenshot

Ici, la ligne Feuil2! PIA-PFPE | TYPE2 | SUB | 2013 contient la valeur 1194298,70. Elle a été reportée sur toutes les lignes de la feuille 1 contenant ces 4 critères.

Avant d'appliquer cette macro, il faudra que vous demandiez à la personne qui fait l'extraction de vous fournir une feuille 1 où les totaux ont déjà été faits. Personnellement je ne m'y aventurerai pas.

Bonjour Optimix,

Je vous remercie pour votre retour !

J'avais observé la même remarque que vous venez de dire. Il y a plusieurs exemples de cet genre.

Je remonte l'information car je n'arrive pas à m'en sortir.

Excellente journée !

Rechercher des sujets similaires à "copier donnees colonne feui2 feuil1 criteres"