Synchroniser de Base Excel

Byfranck

XLDnaute Occasionnel
Synchroniser 2 Bases Excel

Bonjour à tous,
j'ai (grâce a votre aide précieuse) dévelopé une base de données clients qui devient de + en + volumineuse.
Nous sommes 6 à utiliser cette base qui est scindée en 6 Excel (1 par région) + une base master qui est le fusion de ces 6 bases (copier coller bout à bout)

Le principe c'est une ligne (avec 252 cellules d'information) = 1 client
Chaque région à +/- 1500 clients et met à jour les informations au travers d'UserForms (fiche client)avec textebox, combo, champs de saisie et autres.
Tout est OK sauf quand il faut faire un fichier master regroupant les 6 "sous-fichier": le volume à tranmettre par e-mail devient trop volumineux.

mon idée est de générer une 253eme cellule et d'y enregistrer automatiquement la date du jour quand on enregistre des modifs dans la fiche du client: ça je vais savoir faire.
Pour la suite je suis trop novice pour y arriver :
Il faudrait dans un Usf que je puisse créer un bouton "Extraction" qui fasse l'extraction des lignes modifiées depuis la dernière extraction réalisée. ça pour la partie envoi ce qui permettra d'envoyer une feuille avec seulement 30 ou 40 ligne (celles qui auront été modifiées).

Ensuite dans le fichier master, il faudrait un USF avec bouton importation et là c'est plus tordu:
1erement que ça aille lire dans la sous base la cellule dans laquelle s'st enregistrée la date de modification.
lire la cellule colone A de cette ligne (c'est le nom du client) et Rechercher dans le Master la même valeur en colonne A (même client) et une fois trouvé remplacer la ligne existant dans le master par la ligne que l'on veut importer.
ça je ne sais pas faire:eek:

Pour arranger les choses: il n'est pas impossible que 2 client portent le même nom! la solution envisageable serait de rechercher 1erement un identique sur la colonne A, qui soit aussi identique sur 2 autres colonnes (B et D par exemple) qui pouraient être la ville et le num de téléphone (pour l'exemple j'ai mis une couleur).

Et comme ce serait trop simple:
Je peux recevoir une sous-base avec un/des client(s) ajouté que je n'ai pas encore dans le master.
Je peux recevoir une sous-base avec des clients qui ont été suprimés (hors cible).


je joints 2 fichiers excel pour que vous puissiez voir à quoi ressemble la structure de ma base.

Si un courageux pouvait se pencher sur mon problème ça m'arragerait bien pour l'instant chaque vendredi soir je passe un temps fou connecté à récupérer des dizaines de Mega alors que ça pourrait aller si vite!

Cordialement
 

Pièces jointes

  • MASTER BDD.xls
    14 KB · Affichages: 78
  • BDD 2.xls
    14 KB · Affichages: 84
Dernière édition:
C

Compte Supprimé 979

Guest
Re : Synchroniser de Base Excel

Salut ByFranck,

Pour la première partie, l'extraction, voici un code
Code:
Sub Extraction()
  Dim DerLig As Long, DerLigD As Long, Lig As Long
  Dim FlagCréée As Boolean
  Dim VDateEnvoi As Date, VDateLig As Date
  Dim VPathFic As String
  
  ' Initialisation des variables
  FlagCréée = False
  ' Avec ce classeur et la feuille 1
  With ThisWorkbook.Sheets("Feuil1")
    ' Récupérer la dernière date d'envoi
    VDateEnvoi = .Range("I3").Value
    ' Récupérer la dernière ligne du tableau
    DerLig = .Range("A" & Rows.Count).End(xlUp).Row
    ' Pour chaque ligne de la 8 à la dernière
    For Lig = 8 To DerLig
      'VDateLig = .Range("I" & Lig)
      On Error Resume Next
      VDateLig = .Range("I" & Lig)
      ' Si pas de date de modif, mettre une date bidon de début du siècle
      If Err.Number <> 0 Then
        VDateLig = "01/01/1900"
      End If
      On Error GoTo 0
      ' Si la date de la ligne est supérieur à la date du dernier envoi
      ' On procède à la copie de la ligne
      If VDateLig > VDateEnvoi Then
        ' La première fois, créer un feuille Extraction
        If FlagCréée = False Then
          FlagCréée = True
          Sheets.Add After:=Sheets(Sheets.Count)
          ActiveSheet.Name = "Extraction"
          ' Activer la première feuille
          .Activate
        End If
        ' Récupérer la ligne de destination
        DerLigD = Sheets("Extraction").Range("A" & Rows.Count).End(xlUp).Row
        ' Copier la ligne mise à jour
        .Rows(Lig).Copy Destination:=Sheets("Extraction").Range("A" & DerLigD + 1)
      End If
    Next Lig
    ' L'analyse des ligne est terminée
    ' On exporte la feuille Extraction et on la sauvegarde
    If FlagCréée = True Then
      Sheets("Extraction").Move
      VPathFic = ThisWorkbook.Path & "\Extraction du " & Format(Now(), "yyyymmdd") & ".xls"
      ActiveWorkbook.SaveAs VPathFic
      ActiveWorkbook.Close
    End If
    ' On mémorise la date d'extraction
    .Range("I3").Value = Now()
  End With
End Sub
Un simple bouton fait l'affaire pour lancer la macro ;)

A+
 

Byfranck

XLDnaute Occasionnel
Re : Synchroniser 2 Bases Excel

Bonjour Bruno et Bebere,

Merci de vous être penché sur mon cas, je me suis levé tôt ce matin pour tester tout ça, en pièces jointe j'ai utilisé la Sub indiquée par Bruno, l'exportation marche du feu de dieu ( ça transfert même le formules)...
il faut que je passe un peu de temps pour voir comment gérer les supressions de clients.
Par contre côté import ça plante au lancement de l'USF avec un message disant que le fichier "sousbase" est introuvable.

Alors j'ai bricolé à partir d'une autre macro pour ouvrir en automatique tous les .xls d'un sous répertoire et voir si le traitement fonctionne, mais je souis loin de maîtriser, l'Usf se lance sans alarme, mais ensuite ça plante.
D'ailleur à l'occas il faudra que je fasse expliquer les variable et autre (ex: Ubound j'ai aucune idée de ce que s'est!)


j'ai mis en pièce jointe les fichiers avec le point ou je suis planté.

Depuis le fichier "sousbase" en lançant l'USF1 l'extraction marche super.
Depuis le fichier MasterBDD2, on peut maintenant lancer l'usf mais je bute sur une erreur que je ne sdais pas résoudre dès que je rentre une date et que je lance l'Usf.
Cela dit l'idéal serai que le traitement se fasse en automatique sans rentrer de date et sans avoir à valider client par client, je ne sais pas si c'est possible, mais par ex :
En allant lire dans la colonne I de MasterBDD la dernière date de mise à jour du client et avec un test si la date mise à jour de ce client dans MasterBDD< date de modif de la ligne dans l'extraction) on remplace la ligne existante dans MasterBDD sinon on passe au suivant.
 

Pièces jointes

  • MAsterBDD_et_Sousbase.zip
    26.1 KB · Affichages: 44

Bebere

XLDnaute Barbatruc
Re : Synchroniser de Base Excel

bonjour byfranck,Bruno
essaye avec ce que je t'envoye dans le zip
il ya des noms à adapter(chemin,nom fichier,nom feuille)

entretemps,amélioration de la proposition d'hier

à bientôt
 

Pièces jointes

  • UsfMasterV1.zip
    22.7 KB · Affichages: 33

Byfranck

XLDnaute Occasionnel
Re : Synchroniser de Base Excel

Bonsoir à tous,

Bon j'essai de me débrouiller tout seul et ça ne marche pas terrible! alors .. si ça passe pas par la porte je tente ma chance par la fenêtre.

Pour m'en sortir je change de stratégie et je pense toucher presque au but... sauf qu'il va falloir me faire une dernière passe pour que je marque:eek:

La situation:
Grâce au coup de main, l'extraction des dernières lignes modifiées fonctionne (fichier sous base qui génère un fichier extraction avec les lignes dont la date de modif est postérieure à la dernière extraction (valeur en I3)

le fichier "extraction" doit être placé dans un sous répertoire du répertoire où se trouve MasterBDD.xls.
J'ouvre MasterBDD et le lance L'UsF.
Etape 1 je clicque sur FUSIONNER et ça fusionne les lignes du fichier "Extraction" avec celles du MasterBDD.

Plus qu'à supprimer les doublons en concervant le dernier double que je vient d'ajouté car c'est celui qui est à jour.
J'ai testé sur ma véritable base, cela supprime bien les doublons trouvés en lisant la colonneA.
Mais comme certains clients peuvent être différents mais avoir le même nom (dans ce cas ils ne sont jamais dans la même ville ou dans le même département) mon idée pour ne pas risquer de les supprimer est de doubler le test:
Si A existe déjà, il faudrait alors verifier avant de supprimer la ligne la + ancienne si par exemple en colonne B c'est la même ville et pourquoi pas vérifier si la colonne D à la même valeur.
J'ai fait quelques test mais je me perd dans les Next les AND .. !!:eek:


Alors pour lancer mon SOS j'ai collé les Usf et modules dans l'exemple ... et là surprise 2eme problème: le dédoublonage ne fonctionne plus !!! :(:confused:
Je ne comprend pas pourquoi.

Si quelqu'un pouvait se pencher sur mon double problème ce serait cool!

Cordialement
 

Pièces jointes

  • MASTERBDD_V6.zip
    36.6 KB · Affichages: 41

Bebere

XLDnaute Barbatruc
Re : Synchroniser de Base Excel

Franck
le code du bouton nettoyage
tu avais pris la colonne E (vide) pour fin
Qui Quoi fait le test sur A,B et D

Private Sub CommandButton5_Click()
Dim I As Integer, X As Integer
Dim Quoi As String, Qui As String
With Worksheets("Feuil1")

Fin = .Range("A65535").End(xlUp).Row

For I = Fin To 8 Step -1
Quoi = UCase(.Range("A" & I).Value & .Range("B" & I).Value & .Range("D" & I).Value)
For X = I - 1 To 8 Step -1
Qui = UCase(.Range("A" & X).Value & .Range("B" & X).Value & .Range("D" & X).Value)
If Quoi = Qui Then
Rows(X & ":" & X).Delete Shift:=xlUp
End If
Next
Next

End With

End Sub

à bientôt
 

Discussions similaires

Réponses
3
Affichages
288

Statistiques des forums

Discussions
312 084
Messages
2 085 194
Membres
102 810
dernier inscrit
mohammedaminelahbali