import lignes data sans doublons

  • Initiateur de la discussion Initiateur de la discussion KIM
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

KIM

XLDnaute Accro
Bonjour le forum, bonjour les ami(e)s,
Je fais appel à votre aide et vous en remercie d'avance.
J'ai un souci dans l'import de données externe dans ma base locale sous excel
Mes tableaux de bord sont créés à partir d'une Base locale (fichier "baselocale.xls", feuille "BASE") mise à jour régulièrement par les données du fichier "importmens".

Je ne peux malheureusement pas faire un copier-collé ou import global du fichier importmens dans baselocale:BASE car:
la feuille baselocale:BASE est modifiée en local. si je fais un import simple, toutes mes modifs seront ecrasées.
Je souhaite une macro dans le fichier "baselocale.xls" qui :
- ouvre le fichier importmens.xls
- compare les "No notification" de la colonne AG de la feuille BASE avec celle du fichier importmens.xls
- recopie dans la feuille BASE du fichier baselocale.xls toutes les lignes du fichier importmens.xls dont les "No notification" n'existent pas dans BASE.
Merci pour votre aide
Amitiés
KIM
 

Pièces jointes

Re : import lignes data sans doublons

Re le fil,
@Pierrejean
Merci impec, en attendant la mise en couleur de la col AG par lacorse33,
je vais continuer de délirer.

Supposant que dans la feuille BASE du fichier baselocale2.xls je n'utilise qu'une dizaine de colonnes seulement, est-il possible de ne recopier du fichier importmens que les colonnes ayant les memes intitulés des lignes à recopier dans le fichier baselocale2? J'ai l'impression que la logique devient plus compliquée car les 2 colonnes N° Imputation à comparer de la feuille DATA et celle de broker n'ont plus la meme reference et qu'il faut introduire dans le consolider la reference de la colonnes N° Imputation de la feuille BASE.
Qu'en pensez-vous? est-ce jouable?
Sinon y-a-t-il une autre solution?
Merci de votre aide
Amicalement
KIM
 

Pièces jointes

Re : import lignes data sans doublons

bonjour KIM

Salut Chti ,lacorse et le forum

voila une version qui permet d'avoir importmens et baselocale dans n'importe quel ordre pourvu que les tetes de colonne soient bien identiques

c'est le nom de la tete de colonne (Repere) qui sert guide et se trouve en B9

testé avec une baselocale raccourcie elle delivre une page broker a l'image de baselocale

je n'ais pas encore comme Chti pris l'habitude d'utiliser les tableaux et de ce fait, si le temps d'execution pose probleme on pourra revoir (Chti si tu passes par la;...)
 

Pièces jointes

Re : import lignes data sans doublons

Bonjour Lacorse33, Pierrejean, Jean Marie et le forum,
@Pierrejean, merci la derniere monture facilite beaucoup mon travail. Concernant la tete de colonne (Repere) qui sert de guide, est -il possible de supprimer les blancs en debut et fin de la cellule? Il arrive parfois lors de l'extraction d'une base de données nous avons des caracteres blancs au debut et à la fin des données dans la cellule.
@Jean Marie,
Est-ce possible de coder la macro misenordre2 de Pierrejean en utilisant les tableaux en memoire car mes donnees reelles font plus de 30 000 lignes et 81 colonnes.
Amitiés
KIM
 
Re : import lignes data sans doublons

re KIM

voila pour enlever les espaces en debut et fin du contenu de B9

j'ais ajouté 2 chronos qui montrent que ma macro demande environ 1,5 seconde alors que le transfert de ligne prend environ 1 s par ligne
(test effectué sur 65400 lignes environ et 81 colonnes; par contre 20 colonnes en baselocal)
 

Pièces jointes

Re : import lignes data sans doublons

Annuler le post precedent

le chrono etait mal placé pour le temps total
(me suis fait avoir : le bouton consolidaton ne lance pas la macro consolidation)

voila mieux
testé avec 3200 lignes transférées
misenordre 0,15 s
total 13 secondes
 

Pièces jointes

Re : import lignes data sans doublons

Re, le fil
@Pierrejean,
merci, effectivement s'il faut optimiser le temps d'execution, c'est donc dans la macro consolidation ou transfert.
@Jean Marie, y-t-il d'autres possibilité?
@lacorse33, Qu'en penses-tu?
Amitiés
KIM
 
Re : import lignes data sans doublons

bonsoir Kim,Pierre-Jean,Jean-Marie

le code suivant peut être


'J'ai plusieurs fichiers xls, construits selon la même architecture.
'Une première ligne de "titres", puis des données, sur chacune des lignes.
'Je souhaite qu'un autre fichier "synthétise" tous les
'fichiers "sources".

'Une solution de consolidation utilisant ADO :
'Les données sont lues sans ouvrir les fichiers source et copiées
'dans le fichier cible à la suite des données déjà présentes.
'Les données lues et recopiées sont les données entières de la feuille passée en
'paramètre Source.
'fs, mpfe

Sub TestConso()
Dim Fich1$, Fich2$, Source1$, Source2$, Cible$
Fich1 = "D:\Fichier1.xls"
Fich2 = "D:\Fichier2.xls"
Source1 = "Feuil1"
Source2 = "Feuil1"
Cible = "Feuil1"
ConsoDatas Fich1, Source1, Cible
ConsoDatas Fich2, Source1, Cible
End Sub

Public Sub ConsoDatas(NomFichier$, FeuilleSource$, FeuilleCible$)
'Va chercher dans le classeur NomFichier (sans l'ouvrir) les données
'de la feuille FeuilleSource et les copie dans la feuille FeuilleCible
'du classeur actif, à la suite des données (éventuellement) déjà présentes.
'(La ligne d'entêtes de FeuilleSource n'est pas importée)
'inspiré de Rob Bovey, mpep
'nécessite une référence à la librairie
'Microsoft ActiveX Data Object 2.x Library
Dim rsData As ADODB.Recordset
Dim szConnect As String
Dim szSQL As String
Dim Li&, FeuilleDest

''' Crée la chaîne de connexion
szConnect = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & NomFichier & ";" & _
"Extended Properties=Excel 8.0;"

' La requête est basée sur le nom de la feuille. Ce nom
' doit se terminer par un $ et doit être entouré de crochets droits.
szSQL = "SELECT * FROM [" & FeuilleSource & "$];"

Set rsData = New ADODB.Recordset
rsData.Open szSQL, szConnect, adOpenForwardOnly, _
adLockReadOnly, adCmdText

'où envoyer les données :
Set FeuilleDest = ActiveWorkbook.Sheets(FeuilleCible)
Li = FeuilleDest.Range("A65536").End(xlUp).Row + 1
'envoi sur la première ligne vide
If Not rsData.EOF Then
FeuilleDest.Range("A" & Li).CopyFromRecordset rsData
Else
'si la source était vide...
MsgBox "Aucun enregistrement renvoyé.", vbCritical
End If

''' On nettoie pour finir...
rsData.Close
Set rsData = Nothing

End Sub

bonne route
 
Re : import lignes data sans doublons

Bonjour PierreJean, lacorse33, Jean Marie, Bebere et le forum,
@Bebere content de te revoir,
Selon ta proposition, comment les données sont comparées? Dans mon cas précis, mes données initiales sont dans baselocale.xls qui ont été modifiées en local manuellement. Je dois garder ces modifs car elles n'existent pas dans le systeme central. Je reçois regulièrement un fichier extrait du systeme local importmens.xls et je ne souhaite récupérer dans baselocale que les nouvelles lignes qui n'existent pas encore dans baselocale.xls. La comparaison se fait selon la colonne AG du titre : N° notification.
1er cas: les 2 fichiers ont une structure identique voir baselocale et importmens
2iem cas: Le fichier de travail baselocale2 est un sous ensemble du fichier importmens. sa structure se compose de quelques colonnes du fichier importmens.xls identifiées par leurs titres.
Est-ce possible d'appliquer ton exemple selon mes données (ci-joint)

S'il y a d'autres idees; merci le fil et le forum
Amitiés
KIM
 

Pièces jointes

Re : import lignes data sans doublons

Bonjour Bebere, PierreJean, Jean Marie, lacorse33 et le forum,
De retour ce matin, je vois le message de Bebere,
Je découvre ADO, merci Bebere.
@Bebere, je viens de tester ta version ADO:
1- J'ai declaré les plages de données manuellement: MaBase, MaBase2 et MonImport car j'avais un message d'erreur de non definition de ces plages de données. Est-il possible de les définir automatiquement dans le code et non d'ouvrir chaque fichier et de nommer la plage de données?
2- Quand il y a de nouvelles données à integrer dans baselocale et baselocale2 c-à-d qu'il existe des nouvelles lignes dans le fichier ImportMens le code s'execute rapidement.
Quand les données sont les memes, c-à-d aucune importation à faire, Excel tarde à me donner la main. Quand je re-excute une 2ieme fois, J'ai un message d'erreur "Depassement de capacité " sur la ligne For RS_n = 1 To myRS.RecordCount dans la macro GetExternalData . J'ai remarqué que myRS.RecordCount est positionné à 65536. J'ouvre les fichiers baselocale et baselocale2 et je vois que MaBase et MaBase2 sont à 65536.. Je pense s'il y a moyen de definir dans le code ces plages de données, le problème est réglé.
3- Dans la feuil2 du fichier consoliderAdo.xls, je souhaite garder ton idée de tracer l'execution parcontre ne garder que la différence c-à-d les nouvelles lignes à recopier.
4- Dans la feuil2 du fichier consoliderAdo.xls est-ce possible d'inscrire un message quand les fichiers sont identiques et aucune ligne à recopier ou bien quelque soit le resultat inscrire le nombre de lignes recopier. S'il n'y en a pas j'aurais le message "0 ligne(s) recopiées"
Merci d'avance
Amicalement
KIM
 
Re : import lignes data sans doublons

Bonjour les amis, et le forum,
@Bebere,
J'ai testé ton code après avoir nommés manuellement les plages dans les fichiers concernés.
1- MESSAGE D'ERREUR
Quelque soit la procedure lancée LitDatas1 et LitDatas2,
-écrit dans feuil2 du classeur consoliderAdov1.xls les lignes trouvées à recopier
- Message d'erreur à l'execution de la procedure WriteInClosedBook1 et WriteInClosedBook2 "Erreur d'execution: Le type ne correspond pas "
et se pointe sur la ligne: .Fields(C - 1).Value = Arr(L, C)
Ce qui n'etait pas le cas dans la version antérieure.
J'ai un message d'erreur "Erreur d'Execution : Le type ne correspond pas"
dans la macro: WriteInClosedBook
2- DECLARATION DES PLAGES
Est-il possible non pas nommer les plages dans les fichiers concernés, mais de les declarer en disant plage xxxx = de la cellule A8 jusqu'à la colonne dont la première cellule non-vide de la ligne 8 en partant de la fin de la ligne jusqu'à la dernière ligne non-vide de la colonne A en partant de la fin de la colA?
Merci d'avance
Amicalement
KIM
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
4
Affichages
761
K
Réponses
8
Affichages
1 K
kennynou
K
L
Réponses
10
Affichages
1 K
L
L
Réponses
4
Affichages
851
D
Réponses
4
Affichages
2 K
Retour