Recherche données absentes entre deux colonnes

Bonjour à tous,

Je me permets de vous solliciter de nouveau suite à mon premier post la semaine dernière (https://forum.excel-pratique.com/viewtopic.php?f=2&t=142924&p=878459#p878459) dont Toukoul m'avait grandement aidé.

J'ai bien avancé sur mon fichier et j'ai presque tout fini, il me faudrait votre aide de nouveau sur un point que je pensais arriver tout seul… mais non

Je vous remets les fichiers préparés pour le forum sachant que mes fichiers utilisés sont confidentielles, votre aide m'est précieuse car je reprends la logique du vba pour l'intégrer dans mon propre fichier

Sur le fichier 1 ci joint, je souhaite avant toute opération de déversement faire une vérification si les numéros de la colonne A sont bien présent sur la colonne A du fichier 2.

Je pensais initialement passer par une macro find et valider une boucle pour toute les valeurs de la colonne mais je n'y arrive pas…

Dans le cas où le numéro situé dans la colonne du fichier 1 n'est pas trouvé dans la colonne A du fichier 2, je souhaite mettre un message box du type "Le numéro (XXXX) n'est pas présente dans le fichier 2... "XXXX" étant donc le numéro de la colonne A fichier 1 non trouvé dans la colonne A du fichier 2.

Enfin, je souhaite donc créer une boucle pour interroger toute les valeurs renseigner de la colonne A du fichier 1, sans prendre en compte les cellules vides ou la valeur "0".

Cela m'embête car Toukoul m'avait averti et je pensais arriver seul, mais après une après-midi sur le sujet je n'y arrive pas..

Et sans vouloir abuser de votre aide, je me permets de vous poser quelques questions sur la macro "deverser" du fichier 1 :

Pour la ligne :

cheminfichier = Application.GetOpenFilename("Fichiers Excels (*.xlsx), *.xlsx")

==> La partie en gras permet-elle de proposer à l'ouverture de la boite de dialogue excel 'ouvrir' d'avoir en visu les fichiers en .xlsx, .xlsm, .xls… Je ne comprends pas l'intérêt de réécrire dans le code le .xlsx car sans cela, le code fonctionne.

Pour la boucle en fin de code, j'ai inclus une condition pour laquelle seule les cellules "pleines" sont copier. J'ai trouvé ca rébarbatif de l'écrire, auriez-vous fait autrement (une boucle dans une boucle?).

Et une dernière question ..

Si j'ouvre le fichier 1 et le fichier 2 et que je lance la macro "déverser", il arrive parfois que la macro me dise que le fichier 2 n'est pas ouvert alors que c'est bien le cas. Quand je fais le pas à pas sur la macro, la nomination du fichier "mon classeur" marche bien, pourtant dans le contrôle (ligne : If Workbooks(X).Name = MonClasseur Then Controle = True), le contrôle est négatif et m'invite donc à ouvrir le fichier dans la boite de dialogue excel alors que celui-ci est ouvert.

Je vous remercie pour votre aide, je commence vba et j'apprends avec un support de 300 pages à côté de moi et c'est pas évident

Je reste à votre disposition évidemment.

Amicalement,

Quentin

12fichier-1.xlsm (21.01 Ko)
11fichier-2.xlsx (11.43 Ko)

Bonjour Laichzeit le forum

bon alors le but de ton blabla de 100 lignes c'est quoi??

mettre à jour le fichier 2 en fonction du fichier 1 ???

1) si les lignes du fichier 1 ne sont pas présentes dans le fichier 2 on ajoute ??

2) et si les lignes existent? on met à jour ou on passe et on ne modifie pas le fichier 2??

(en cas de modification de ligne du fichier 1)

et enfin dernier point il n'y a que le fichier 2 à mettre à jour pas un autre??

dans l'attente de ton retour

a+

Papou

Bonjour,

Mon blabla de 100 lignes c'était pour essayer d'être clair au possible mais ca ne doit pas être le cas

L'essentiel de mon problème est le suivant :

Sur le fichier 1 ci joint, je souhaite faire une macro afin de vérifier si les numéros de la colonne A du fichier 1 sont présents dans la colonne A du fichier 2.

Dans le cas où le numéro situé dans la colonne du fichier 1 n'est pas trouvé dans la colonne A du fichier 2, je souhaite mettre un message box du type "Le numéro (XXXX) n'est pas présente dans le fichier 2...

"XXXX" étant donc le numéro de la colonne A fichier 1 non trouvé dans la colonne A du fichier 2.

J'aimerai que la vérification se fasse sur tous les numéros de la colonne A fichier 1.

A titre d'exemple dans les 2 fichiers communiqués : j'aurai le message d'alerte pour le numéro 12346, 12349, 12351, 12352.

Pour répondre à tes questions:

1/ mettre à jour le fichier 2 en fonction du fichier 1 ??? : la macro déverser permet de mettre à jour le fichier 2 a partir du fichier 1

2/ si les lignes du fichier 1 ne sont pas présentes dans le fichier 2 on ajoute ?? : non, je souhaite qu'il y ai un message box, l'ajout des lignes sur le fichier 2 doit se faire manuellement

3/ et si les lignes existent? on met à jour ou on passe et on ne modifie pas le fichier 2?? (en cas de modification de ligne du fichier 1) : J'ai mal compris ta question, mais si les numéro sont présents entre le fichier 1 et le fichier 2, il n'y a rien à faire car la macro "déverser" présente sur le fichier 1 ira importer les différents lignes voulues

4/ et enfin dernier point il n'y a que le fichier 2 à mettre à jour pas un autre?? : il n'y a que le fichier 2 à mettre à jour à partir du fichier 1

Désolé pour le premier post long, j'espère avoir été plus clair.

Merci par avance.

Quentin

Re Bonjour Laichzeit le forum

bon alors voilà ton message box avec les références manquantes et la recopie des lignes existantes de 1 dans le fichier 2

1) tu décompresses le dossier.zip sur ton bureau (tu ne l'ouvres pas en temporaire surtout)

2) tu ouvres le dossier Laichzeit V1

3) tu ouvres le fichier Fichier 1.xlsm

4) tu cliques sur le bouton et tu me redis

Ton histoire d'ajouter les lignes qui manquent en manuel, je ne comprend pas trop, mais bon c'est ton problème.

On pouvait tout aussi bien insérer les lignes Fichier 1 manquantes, dans le fichier 2 en respectant l'ajout d'une ligne vide entre les lignes, voir même les reclasser par ordre numérique

(seule différence pour plus de facilité, c'est que les deux fichiers Fichier 1 et Fichier 2 doivent se trouver dans le même dossier)

a+

Papou

6laichzeit-v1.zip (35.75 Ko)

Re bonjour,

Merci beaucoup pour ton aide je regarde cela et te tiens au courant.

Pour l'histoire d'ajouter des lignes en manuel, c'est que le fichier 2 est en réalité une grosse base de données et peut être utilisé par plusieurs personnes en même temps, je préfère que la saisie reste manuelle

Je te remercie beaucoup pour ton aide et te reviens au plus vite.

Re Bonjour Quentin le forum

oui mais dans ce cas là c'est valable pour les lignes existantes!!!

que tu modifies des lignes existantes ou que tu ajoutes c'est exactement pareil tu travailles sur la feuille pilotage

a ce moment là, il faut faire un contrôle de plus et si le fichier est déjà ouvert, message à refaire plus tard fichier indisponible

a+

Papou

Re bonjour quentin le forum

1) tu décompresses le dossier.zip sur ton bureau (tu ne l'ouvres pas en temporaire surtout)

2) tu ouvres le dossier Laichzeit V2

3) tu ouvres le fichier Fichier V2.xlsm

4) tu cliques sur le bouton et tu me redis

j'ai rajouté un contrôle si le fichier de destination est déjà ouvert ou non

si déjà ouvert on ne fait rien tu as un message t'en informant

a+

Papou

7laichzeit-v2.zip (37.12 Ko)

Bonjour Paritec

Merci beaucoup pour le fichier, je viens de finir à l'instant mon fichier du coup pour la lecture seule j'ai rajouté sur ta première partie de macro :

Set wbks = Workbooks.Open(adr & "\Pilotage des dossiers.xlsm") ' fichier de destination

If Workbooks("Pilotage des dossiers.xlsm").ReadOnly = True Then ' condition si le fichier pilotage est déjà ouvert par un autre utilisateur

MsgBox "Le Classeur: [" & MonClasseur & "] est déjà ouvert par un utilisateur, merci de le fermer et de relancer la procédure pour l'import..." ' si le fichier est déjà ouvert (lecture seule), fermeture de la procédure avec message box

Exit Sub

End If

Ca me permet de mettre une alerte si ouverture seule, mais si le fichier est déjà ouvert dans mon Excel l'import peut se faire.

J'ai gardé cependant ma première macro "déverser" car la condition d'import des cellules vides n'y étaient pas dans la tienne et je n'ai pas réussi à le rajouter.

J'aurai une dernière interrogation. Lors de l'ouverture du fichier 2, si celui ci a plusieurs onglets, comment puis-je faire en sorte que l'ouverture se fasse sur le bonne onglet (dans notre cas, l'onglet "Pilotage individuelle")?

Je tiens vraiment à te remercier c'est vraiment génial du temps accordé à m'aider !!

Re Quentin le forum

a+

Papou

Re Paritec

Aurais-tu une idée pour ma dernière question ?

Lors de l'ouverture du fichier 2, si celui ci a plusieurs onglets, comment puis-je faire en sorte que l'ouverture se fasse sur le bonne onglet (dans notre cas, l'onglet "Pilotage individuelle")?

Merci par avance

re Quentin le forum

non j'ai pas une idée mais la réponse

with sheets("Pilotage individuelle")

a+

Papou

Excellent

Merci encore Paritec

je clôture le topic.

Rechercher des sujets similaires à "recherche donnees absentes entre deux colonnes"