Code VBA : Croiser deux fichiers excel avec un SI et un recherch

Fermé
DriguezNL - 4 déc. 2015 à 13:45
 DriguezNL - 8 déc. 2015 à 16:00
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"))

Voici mon fichier "Principal" : http://www.cjoint.com/c/ELemSkKoY8k
et "Patri" : http://www.cjoint.com/c/ELemTi6JfFk
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.

A voir également:

3 réponses

Le Pingou Messages postés 12048 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 26 avril 2024 1 427
4 déc. 2015 à 18:28
Bonjour,
C’est presque incompréhensible ce que vous voulez réaliser en comparant avec vos 2 fichiers.
Dommage que le code enregistrer n’est pas présent dans les fichiers !

0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
Modifié par michel_m le 5/12/2015 à 09:39
Bonjour à tous,

Excuse l'incruste, Le Pingou

a l'attention de Driguez
pourquoi avoir ajouter des énigmes à ton énoncé comme dernière colonne= Cn? il aurait été aussi intéressant de savoir un ordre de grandeur des nombres de lignes...
tu ne connais ton tableau?
conclusion: ca complique inutilement la macro

voilà une proposition de "petit" code VBA
Option Explicit
'-----------------------------------------------
Sub actualiser()
Dim Chemin As String
Dim Derlig As Integer, Dercol As Byte, T_patri
Dim T_princ, Dico As Object, Article As String, Cptr As Integer, Col As Byte

Application.ScreenUpdating = False
'-----------mémorisation des données "patri"
Chemin = "D:\docus\" 'A ADAPTER AU CONTEXTE
Workbooks.Open Filename:=Chemin & "patri.xlsx"
With Sheets(1)
Derlig = .Columns("C").Find(what:="*", searchdirection:=xlPrevious).Row
Dercol = .Rows(1).Find(what:="*", searchdirection:=xlPrevious).Column '!!!
T_patri = .Range(.Cells(2, 1), .Cells(Derlig, Dercol))
End With
With ActiveWorkbook
.Saved = True
.Close
End With
'----------mémorisation des données "principal"
With Sheets(1)
Derlig = .Columns("C").Find(what:="*", searchdirection:=xlPrevious).Row
Dercol = .Rows(1).Find(what:="*", searchdirection:=xlPrevious).Column '!!!
T_princ = Application.Transpose(.Range("B2:B" & Derlig))
Set Dico = CreateObject("scripting.dictionary")
For Cptr = 1 To UBound(T_princ)
Article = T_princ(Cptr)
If Not Dico.exists(Article) Then Dico.Add Article, ""
Next
'------recherche article et inscription nouvel article
For Cptr = 1 To UBound(T_patri)
If Not Dico.exists(T_patri(Cptr, 3)) Then
Derlig = Derlig + 1
For Col = 1 To Dercol '!!!! danger si dercol princ>dercol patri
.Cells(Derlig, Col) = T_patri(Cptr, Col + 1)
Next
End If
Next
End With
End Sub



 Michel
0
Le Pingou Messages postés 12048 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 26 avril 2024 1 427
5 déc. 2015 à 18:33
Bonjour,
Petite question :
Pour trouver la dernière ligne j’utilise cette méthode :
deli = .Cells(Rows.Count, "C").End(xlUp).Row

Est-ce que la vôtre est plus efficace :
Derlig = .Columns("C").Find(what:="*", searchdirection:=xlPrevious).Row


Salutations.
Le Pingou
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303 > Le Pingou Messages postés 12048 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 26 avril 2024
6 déc. 2015 à 08:39
Bonjour
,C'est pareil, mais j'ai celle là en tête! ;o)

Bon Dimanche
0
Le Pingou Messages postés 12048 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 26 avril 2024 1 427
6 déc. 2015 à 17:17
Merci, de même
Salutations.
Le Pingou
0
Bonjour Michel_m

Merci, 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.

Ps: Cn: c'est qui vaut à la dernière ligne de ma colonne

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

Je veux un peu abusé avec de question : comment adapte avec mon fichier original c'est à dire le fichier principal a une plage de B3:B5085 et le fichier Patri C3:C600
Je souhaiterai rajouter la première article dans la colonne 5086

Merci d'avance et bonne journée.

Bien Cdlt.
0
Bonjour Michel,
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é!
Voici les liens
pour patri : http://www.cjoint.com/c/ELijNJfRXAk et principal : http://www.cjoint.com/c/ELijPpj03Zk
En adaptant, ton code à mes deux fichiers ci-dessus, j'ai une erreur au niveau de cette ligne : .Cells(Derlig, Col) = T_patri(Cptr, Col + 1)
Bien Cdlmt.
0
Le Pingou Messages postés 12048 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 26 avril 2024 1 427
5 déc. 2015 à 10:26
Merci michel_m,
Pas de problème.
Bon week-end

0