Actualiser un tableau avec de nouvelles données

Bonjour,

Difficile de trouver son bonheur dans les sujets précédents malgré toute la richesse du forum. J'ai bien essayé de combiner différentes macros .... mais sans succès !

Voici ce que j'aimerai faire : j'ai un fichier qui comporte deux tableaux, et je dois actualiser ces tableaux à partir d'un autre tableau en provenance d'une extraction d'un logiciel.

Tableau de nouvelles données = onglet 1

Tableaux à actualiser = onglet 2 et 3

Et je peux résumer ainsi les actions que la macro doit effectuer :

si colonne L de onglet 1 est vide ;

alors si dans colonne B de onglet 1, il y a une correspondance avec colonne B de onglet 2, copier la ligne et la coller à cet endroit ;

si dans colonne B de onglet 1, il n'y a pas de correspondance avec colonne B de onglet 2, copier la ligne à la fin du tableau de l'onglet 2 ;

si colonne L de onglet 1 est pleine ; alors copier la ligne dans l'onglet 3 ;

et si la colonne B de l'onglet 1 correspond à la colonne B de l'onglet 2, supprimer la ligne dans l'onglet 2.

Si quelqu'un pouvait m'aider ce serait formidable.

Merci d'avance.

PS: ci-joint un fichier exemple.

Pour essayer d'être plus clair, voici comment je pourrais décrire ce que j'attends de ma macro :

Si cellule L2 de l'onglet 1 est vide,

Si cellule B2 de l'onglet 1 = cellule B2 de l'onglet 2 (puis B3, puis B4, etc ...)

alors copier la ligne de l'onglet 1 à la place de la ligne de l'onglet 2,

autrement copier la ligne de l'onglet 1 à la fin du tableau de l'onglet 2,

Puis, Répétition du paragraphe précédent en changeant L2 par Ln et B2 par Bn (je veux dire par là qu'il faut comparer toutes les cellules de la colonne B de l'onglet 1)

Si cellule L2 de l'onglet 1 est pleine,

si la cellule B2 de l'onglet 1 = cellule B2 de l'onglet 3 (puis B3, puis B4, etc ...)

alors copier la ligne de l'onglet 1 à la place de la ligne de l'onglet 3,

autrement copier la ligne de l'onglet 1 à la fin du tableau de l'onglet 3,

Puis, Répétition du paragraphe précédent en changeant L2 par Ln et B2 par Bn (je veux dire par là qu'il faut comparer toutes les cellules de la colonne B de l'onglet 1)

En définitive, que la cellule L2 de l'onglet soit vide ou pleine, cela ne change que la destination (onglet 2 ou 3) mais le traitement est le même (comparaison des cellules de la colonne B et ajout de la ligne soit à la place d'un ligne existante, soit à la fin du tableau).

Espérant que ça aide ...

Re,

Voila, j'ai commencé mon code, mais il y a des choses que je ne sais pas dire : j'ai sauté une ligne dans le code ou bien j'ai mis trois petit points .

Merci d'avance pour ceux qui pourraient compléter ...

Sub Test()
FinTab1 = Feuil1.Range("C1000").End(xlUp).Row         ' nomme la fin de mon tableau en Feuil 1
FinTab2 = Feuil2.Range("C1000").End(xlUp).Row         ' nomme la fin de mon tableau en Feuil 2
FinTab3 = Feuil3.Range("C1000").End(xlUp).Row         ' nomme la fin de mon tableau en Feuil 3
For i = 2 To FinTab1
If Feuil1.Range("L" & i) = "" Then                    'si cellule Li Feuil1 est vide, alors
For j = 2 To FinTab2
If Feuil1.Range("C" & i) = Feuil2.Range("C" & j) Then 'si cellule Ci Feuil1 = Cj Feuil2, alors
Feuil1.Range("A:AD" & i).Copy                         'copie la ligne i de A à AD
                                                      'et colle la à la place de la ligne en Feuil2
Next
End If
Feuil1.Range("A:AD" & i).Copy [...]                   'Autrement (si cellule C2 Feuil1 ne trouve pas d'équivalent dans la Feuil2), copier la ligne et la mettre à la fin du tableau Feuil2
End If
Next
For i = 2 To FinTab1
If Feuil1.Range("L" & i) = "*" Then                   'si cellule Li Feuil1 est pleine, alors
For j = 2 To FinTab3
If Feuil1.Range("C" & i) = Feuil3.Range("C" & j) Then 'si cellule Ci Feuil1 = Cj Feuil3, alors
Feuil1.Range("A:AD" & i).Copy                         'copie la ligne i de A à AD
                                                      'et colle la à la place de la ligne en Feuil3
Next
End If
Feuil1.Range("A:AD" & i).Copy [...]                   'Autrement (si cellule Ci Feuil1 ne trouve pas d'équivalent dans la Feuil3), copier la ligne et la mettre à la fin du tableau Feuil3
End If
Next
End Sub

Voilà forum,

J'ai fini mon code. Je présume qu'il peut etre optimisé, mais il fonctionne, c'est déjà pas mal.

Espérant qu'il sera utile à quelqu'un ...

Sub Test()
Dim FinTab1%, FinTab2%, FinTab3%, i%, j%
Dim VF As Boolean

FinTab1 = Feuil1.Range("C1000").End(xlUp).Row         ' nomme la fin de mon tableau en Feuil 1
FinTab2 = Feuil2.Range("C1000").End(xlUp).Row         ' nomme la fin de mon tableau en Feuil 2
FinTab3 = Feuil3.Range("C1000").End(xlUp).Row         ' nomme la fin de mon tableau en Feuil 3

For i = 2 To FinTab1
VF = False
    If Feuil1.Range("L" & i) = "" Then                  'si cellule Li Feuil1 est vide, alors
       j = 1
        Do While j <= FinTab2                            'Tant que j<Fintab2, fais j+1
            j = j + 1
                If VF = True Then
                    Exit Do
                End If

                If Feuil1.Range("C" & i) = Feuil2.Range("C" & j) Then 'si cellule Ci Feuil1 = Cj Feuil2, alors
                    Feuil1.Range("A" & i, "AB" & i).Copy Feuil2.Range("A" & j) 'copie colle
                    VF = True                                                   'VF égale true
                End If
        Loop
        If VF = False Then
        Feuil1.Range("A" & i, "AB" & i).Copy Feuil2.Range("A" & FinTab2 + 1)
                FinTab2 = FinTab2 + 1
        End If
     Else
     j = 1
        Do While j <= FinTab3                            'Tant que j<Fintab3, fais j+1
            j = j + 1
                If VF = True Then
                    Exit Do
                End If

                If Feuil1.Range("C" & i) = Feuil3.Range("C" & j) Then 'si cellule Ci Feuil1 = Cj Feuil3, alors
                    Feuil1.Range("A" & i, "AB" & i).Copy Feuil3.Range("A" & j) 'copie colle
                    VF = True                                                   'VF égale true
                End If
        Loop
        If VF = False Then
        Feuil1.Range("A" & i, "AB" & i).Copy Feuil3.Range("A" & FinTab3 + 1)
                FinTab3 = FinTab3 + 1
        End If
     End If
Next

For i = 2 To FinTab3
FinTab3 = Feuil3.Range("C1000").End(xlUp).Row
VF = False
j = 1
    Do While j <= FinTab2                            'Tant que j<Fintab3, fais j+1
    j = j + 1
        If VF = True Then
            Exit Do
        End If

        If Feuil3.Range("C" & i) = Feuil2.Range("C" & j) Then 'si cellule Ci Feuil1 = Cj Feuil2, alors
            Feuil2.Rows(j).EntireRow.Delete Shift:=xlUp 'supprimer la ligne correspondante
            VF = True                                                   'VF égale true
        End If
    Loop
Next

End Sub
Rechercher des sujets similaires à "actualiser tableau nouvelles donnees"