Croiser deux fichiers Excel avec un SI et une recherche

Bonjour à tous,

Je souhaiterai un peu d'aide; j'ai créé une macro enregistrée à partir de la formule si et "recherchev".

Malheureusement celle-ci ne s'adapte pas à tous les cas que je peux rencontrer. En effet, le contenu de la colonne que je souhaite comparer à ma matrice peut-être d'une fois à l'autre totalement différent. Je peux avoir une fois 5 cellules avec des informations et une autre fois 10 cellules, etc.

De même, la matrice qui est également sur une colonne peut avoir un contenu d'une fois à l'autre totalement différent.

le code je souhaiterai, est le suivant :

Exemple :

Ce code effectuerai un si et la "recherchev" , comparer les articles de deux feuilles (Patri et Principal) jusqu'à la dernière cellule non vide. C'est à dire j'effectue une recherche "des articles" (dans la colonne C du fichier Patri) dans les articles (du fichier Principal colonne C). si l'article cherché n'est pas ce dernier (la colonne B du fichier Principal ), il le rajoute dans la dernière ligne vide des "articles" dans la colonne B du fichier Principal.

En formule : Si ([C1: Cn (dernière colonne non vide)!Patri] < > RECHERCHEV ([C1: Cn (dernière colonne non vide)!Patri]; [B1: Bn (dernière colonne non vide)!Principal];2; Faux); [C1: Cn (dernière colonne non vide)!Patri; SINON ("IL FAIT RIEN"))

C'est pourquoi, je souhaiterai pouvoir remplacer le code générer par la macro enregistrée par un petit code VBA qui s’adapterait automatiquement au contenu de la colonne comparée et au contenu de la Matrice.

Je vous remercie par avance pour votre aide.

Cordialement.

18principal.xlsx (8.03 Ko)
17patri.xlsx (7.72 Ko)

Bonjour Driguez

Tes explications ne sont pas très claires, d'autant plus que dans le fichier Principal la colonne C n'est pas Article mais Stock !?!

Je n'arrive pas bien à comprendre le moyen d'effectuer la comparaison

Merci andrea73, désolé j'ai inversé l'ordre de colonne de deux fichier.

En gros je souhaiterai ajouter les articles du fichier Patri (colonne C) qui ne se sont pas dans les articles du fichier principal (colonne B) dans la dernière colonne vide.

Ex: j'ai "coca" dans les article du fichier Patri non le fichier principal. En suit de suite

Merci d'avance.

Bien Cdlt.

(re)

Ok je comprends mieux

Est-ce cela ?

18principal-v2.xlsm (21.63 Ko)
19patri-v2.xlsm (13.65 Ko)

Ré andrea73,

Merci beaucoup pour la réponse, mais le souci est qu'il me rajoute la colonne E à la place de la B. c'est à dire il rajoute à partir de B23 (la première colonne vide du fichier Principal).

comment adapte avec mon fichier original c'est à dire le fichier principal a une plage de B3:B5085 et le fichier Patri C3:C600

Merci d'avance et Bonne soirée.

Bien Cdlt.

(re)

Je t'envoie une simulation

dis-moi quelle version du fichier ppal te convient et je regarde cela demain

Bonjour andrea73,

A propos de ton dernier fichier joint, je n'arrive pas à ouvrir le code vba car il me demande un mot de passe. c'est plus le fichier principal qui me convient. Par exemple le premier qui tu m'avais envoyé.

Merci d'avancé et bonne journée.

Bonjour Driguez

Non, non ! pas de mot de passe pas de macro-cmdes non plus !?

par sécurité en voici une nouvelle version

Ré andrea73,

Ton dernier fiche est enregistré sous l'extension xlsx non xlsm donc je ne retrouve pas le code vba.

J'essaie d'adapter ton code à mon fiche original malheuresment dans cette ligne numMain = numMain + 1 me renvoie une erreur.

Dim numPart, numMain As Integer

Dim nouvelle As Integer

Workbooks(nomsource2).Activate 'nomsource2 fait référence à mon fichier précdent "Patri"

Workbooks(nomsource2).Sheets("Application").Select 'Je fais appeler à la feuille "Application" là ou se trouve mes données

Range("C" & lg).Select 'dans la colonne C, lg est déclaré comme un "long" pour balayer mon boucle

tabPart = Range(Selection, Selection.End(xlDown))

Workbooks(nomcible).Activate 'nomcible fait référence à mon fichier précdent "Principal"

Workbooks(nomcible).Sheets("CNPE").Select 'Je fais appeler à la feuille "CNPE" là ou je compte placer mes données

Range("B" & x).EntireColumn.Select ''dans la colonne B, x est déclaré comme un "long" pour balayer mon boucle

Selection.ClearContents 'là x=5085 la dernière ligne non vide

Range("B" & x).Select

tabMain = Range(Selection, Selection.End(xlDown))

x = x + 1

For lg = 3 To Ligne

For numPart = 1 To UBound(tabPart, 1)

trv = False

numMain = 1

While (numMain < UBound(tabMain, 1) + 1) And Not trv

If tabPart(numPart, 1) = tabMain(numMain, 1) Then

trv = True

Else

numMain = numMain + 1

End If

Wend

If Not trv Then

tabMain = tabPart(numPart, 1)

x = x + 1

End If

Next numPart

Next lg

Merci d'avancé!

Bonjour

Je sais bien qu'il est vide de VBA mon fichier !

Je voulais juste que "regarde" les maquettes du fichier PPAL pour savoir quelle version tu souhaite ?

Bonsoir andrea73,

Je reviens vers toi pour te dire mon souci si tu pourras m'aider une fois de plus.

Désolé pour le dérangement; J'essaie d'adapter ton code à mon fiche original malheuresment dans cette ligne numMain = numMain + 1 me renvoie une erreur.

Dim numPart, numMain As Integer

Dim nouvelle As Integer

Workbooks(nomsource2).Activate 'nomsource2 fait référence à mon fichier précdent "Patri"

Workbooks(nomsource2).Sheets("Application").Select 'Je fais appeler à la feuille "Application" là ou se trouve mes données

Range("C" & lg).Select 'dans la colonne C, lg est déclaré comme un "long" pour balayer mon boucle

tabPart = Range(Selection, Selection.End(xlDown))

Workbooks(nomcible).Activate 'nomcible fait référence à mon fichier précdent "Principal"

Workbooks(nomcible).Sheets("CNPE").Select 'Je fais appeler à la feuille "CNPE" là ou je compte placer mes données

Range("B" & x).EntireColumn.Select ''dans la colonne B, x est déclaré comme un "long" pour balayer mon boucle

Selection.ClearContents 'là x=5085 la dernière ligne non vide

Range("B" & x).Select

tabMain = Range(Selection, Selection.End(xlDown))

x = x + 1

For lg = 3 To Ligne

For numPart = 1 To UBound(tabPart, 1)

trv = False

numMain = 1

While (numMain < UBound(tabMain, 1) + 1) And Not trv

If tabPart(numPart, 1) = tabMain(numMain, 1) Then

trv = True

Else

numMain = numMain + 1

End If

Wend

If Not trv Then

tabMain = tabPart(numPart, 1)

x = x + 1

End If

Next numPart

Next lg

Merci d'avancé!

Bonjour Driguez

Pas de problème (que des solutions)

peux-tu envoyer "tes" fichiers modifiés que je regarde directement en VBA (par ce que le code non indenté j'ai bcp de mal !)

Bonjour andrea73,

Tu trouveras ci-joint mes deux fichiers Principal et Patri. pour le code tu pourras créer un nouveau module.

Bonne journée, merci avancé!

Mes fichiers étant trop gros, impossible de le joindre donc je les ai zippé. Voici les liens

pour patri : https://www.cjoint.com/c/ELijNJfRXAk et principal : https://www.cjoint.com/c/ELijPpj03Zk

Bien Cdlmt.

Rechercher des sujets similaires à "croiser deux fichiers recherche"