Macro import avec comparaison

Bonjour

Je viens cherche un peu d'aide à nouveau pour mon fichier.

J'ai donc un classeur avec plusieurs feuilles. Dont une feuille DB PF et une feuille GLO SP.

La feuille DB PF est mise à jour par macro à partir d'un classeur externe. La feuille GLO SP est mise à jour à partir de la feuille DB PF.

DB PF comporte des colonnes de A à BH. Celles ci sont importées dans GLO SP sur les colonnes E à AG et DB à EH à partir de la ligne 8

donc la ligne 2 de DB PF s'insère en ligne 8 de GLO SP. Dans GLO SP j'ai donc les colonnes AH à DA qui sont non modifiées lors de l'import et qui servent à noter ce que j’appelle les prefclient

Ca donne donc DB PF colonne A à BH -> GLO SP import dans E - AG |--(AH / DA)--| DB - EH

Pour cet import j'utilise la macro suivante (pour la partie DB à EH je commence à la ligne 7 au lie u de 8 car j'importe aussi les en tête) :

Sub ExtractionGLOdepuisDB_PF()

On Error Resume Next
' verifier et supprimer pages non nécessaires pour le transfert
    Application.DisplayAlerts = False
    Sheets("TempGLO").Delete
    Sheets("TempGLO2").Delete
    Application.DisplayAlerts = True
    ' création onglets temporaires
    Sheets.Add.Name = "TempGLO"
    Sheets.Add.Name = "TempGLO2"
    ' Copie des données db_PF sur TempGLO
    Sheets("db_PF").Select
    Cells.Select
    Selection.Copy
    Sheets("TempGLO").Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
    ' Filtrage données GLO sur TempGLO
    Sheets("TempGLO").Select
    Selection.AutoFilter
    ActiveWindow.LargeScroll ToRight:=2
    ActiveSheet.Range("$A2:$BH2000").AutoFilter Field:=52, Criteria1:="GLO"
    'copie des données filtrées de db_PF vers TempGLO2
    Selection.Copy
    Sheets("TempGLO2").Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
    ' copie des données de la feuille TempGLO2 vers GLO SP part 1
    Sheets("TempGLO2").Select
    Range("A2:AC2000").Select
    Selection.Copy
    Sheets("GLO SP").Select
    Range("E8:AG2000").Select
    Application.DisplayAlerts = False
    ActiveSheet.Paste
    ' copie des données de la feuille db_PF vers GLO SP part 2 avec en tete
    Application.CutCopyMode = False
    Sheets("TempGLO2").Select
    Range("AD1:BH2000").Select
    Selection.Copy
    Sheets("GLO SP").Select
    Range("DB7:EH2000").Select
    ActiveSheet.Paste
    ' résactivation message d'alerte (remplacement de cellules)
    Application.DisplayAlerts = True

    'suppression des feuilles temporaires TempGLO
    Sheets("TempGLO").Select
    Application.DisplayAlerts = False
    ActiveWindow.SelectedSheets.Delete
    Application.DisplayAlerts = True
    Sheets("TempGLO2").Select
    Application.DisplayAlerts = False
    ActiveWindow.SelectedSheets.Delete
    Application.DisplayAlerts = True
    Sheets("Accueil").Select

End Sub

Mon soucis est que si j'ai de nouveaux clients, les colonnes centrales prefclient (AH à DA donc) ne sont plus synchro car elles ne bougent pas lors de l'import.

Sur DB PF la ref client unique est en colonne A, sur GLO SP la réf client unique se retrouve en colonne E.

Est il possible lors de l'import que la macro fasse les choses suivantes :

- vérif ref client, si identique (par exemple, DB PF en A10 = GLO SP en E10), appliquer la macro ci dessus (copier la ligne du client, la coller dans les deux groupes de colonne) ce qui permet de conserver les prefclient (donc les données de la ligne en colonne AH à DA) sur la bonne ligne

- si pas de ref client, insérer ligne à la fin de liste dans GLO SP

- faire un tri alphabétique dans GLO SP à partir de la ligne 8 sur toutes les colonnes (A à EH) pour remettre la liste dans l'ordre

A noter que dans les colonnes "prefclient", sur certaines, j'ai des formules que je dois conserver (colonnes AH à AK, AN à AQ, AT à AW, AZ à BC, BF à BI, BL à BO, BR à BU, BX à CA, CD à CG, CJ à CM, CP à CS, CV à CY, )

je ne sais pas si c'est clair. D'avance merci pour vos conseils.

Cordialement

J'ai trouvé comment faire pour le classement alphabétique et trouver la première ligne vide

' insertion des données selon existant en colonne E

' première ligne vide
Dim ligne As Long
ligne = Range("e8").End(xlDown).Row + 1

' tri alphabétique en fin de macro
'Dim X As Integer
'X = Cells(8, 1).End(xlDown).Row

Range("A8:EH209" & X).Select
Selection.Sort Key1:=Range("G8"), Order1:=xlAscending, Header:=xlNo, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom

Me reste à trouver comment tester la colonne E pour insérer les données ou si pas existant, les insérer en fin de liste avant de lancer un classement alphabétique.

Rechercher des sujets similaires à "macro import comparaison"