SI et RECHERCHEV dans VBA

Résolu/Fermé
farreneit Messages postés 282 Date d'inscription jeudi 5 juillet 2012 Statut Membre Dernière intervention 13 janvier 2023 - 3 janv. 2021 à 21:38
farreneit Messages postés 282 Date d'inscription jeudi 5 juillet 2012 Statut Membre Dernière intervention 13 janvier 2023 - 4 janv. 2021 à 13:04
Bonjour à tous,

Je suis désolé mais je refais appel à votre génie !

Je souhaiterais ajouter une partie à une de mes macros.

Le but est de verifier dans une colonne si le contenu (texte) d'une cellule d'une autre feuille est présente. Si ce n'est pas le cas, il faut que le contenu soit ajouter dans la colonne en dessous du dernier mot, sinon ne rien faire.

Bien entendu, la plage où est contenu les mots s'agrandit au fur et à mesure.

Je vous transmets un fichier simplifié qui illustre ma demande. : https://wetransfer.com/downloads/cf0885fe6494e61a3a3f59645df0355b20210103203814/167d37

S'il est possible de me donner une toute petite explication afin que je sois capable de le réaliser par moi même la prochaine fois sans avoir à vous embetter se serait génial !

Merci d'avance !

Bien à vous

1 réponse

yg_be Messages postés 23333 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 18 novembre 2024 Ambassadeur 1 551
3 janv. 2021 à 23:46
bonjour,
un exemple:
Sub frnt()
Dim source As Range, dest As Range, dico As Range, tmp As Range, val As Range
Set source = ThisWorkbook.Sheets("Sheet1").[d8]
Set dico = ThisWorkbook.Sheets("Sheet2").[e:e]
Set tmp = Intersect(ThisWorkbook.Sheets("Sheet2").UsedRange, dico)
Set dest = ThisWorkbook.Sheets("Sheet2").Cells(tmp.Row + tmp.Rows.Count, "e").End(xlUp).Offset(1)
For Each val In source
    If dico.Find(val) Is Nothing Then
        dest = val
        Set dest = dest.Offset(1)
    End If
Next val
End Sub
1
farreneit Messages postés 282 Date d'inscription jeudi 5 juillet 2012 Statut Membre Dernière intervention 13 janvier 2023 10
Modifié le 4 janv. 2021 à 09:53
Merci beaucoup pour ta réonse !

Je ne sais pas trop pourquoi mais cela fonctionne ahah.

Admettons que en dessous de la cellule D8 je possède un autre mot lié à celui en D8. Il y a t'il une méthode facile pour que cette valeur soit ajoutée à droite de la cellule où est ajoutée le nouveau mot (à droite de dest) ?

Voici le fichier modifié : https://wetransfer.com/downloads/fcc1dd2879686aaa7bfc8cc82da4ab9f20210104085319/b11310

Si c'est possible d'avoir une rapide explication du code se serait top !

Merci d'avance !
0
yg_be Messages postés 23333 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 18 novembre 2024 1 551 > farreneit Messages postés 282 Date d'inscription jeudi 5 juillet 2012 Statut Membre Dernière intervention 13 janvier 2023
4 janv. 2021 à 10:24
il suffit d'ajouter ceci, par exemple après la ligne 9:
dest.Offset(, 1) = val.Offset(1)

as-tu une question à propos du code?
comprends-tu le langage VBA?
0
farreneit Messages postés 282 Date d'inscription jeudi 5 juillet 2012 Statut Membre Dernière intervention 13 janvier 2023 10 > yg_be Messages postés 23333 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 18 novembre 2024
4 janv. 2021 à 12:00
C'est exactement cela !

Je ne suis pas un expert en VBA, j'esaye de m'en sortir avec ma logique, mes recherches et mes bases dans les autres languages de programmation.

Si je décortique ton exemple :

Dim source As Range, dest As Range, dico As Range, tmp As Range, val As Range 
--> Création de variables

Set source = ThisWorkbook.Sheets("Sheet1").[d8]
--> je donne à la variable "source" la valeur de D8

Set dico = ThisWorkbook.Sheets("Sheet2").[e:e]
--> je donne à dico la valeur de la colonne E (je ne savais pas qu'il était possible de faire rentrer une plage de donnée dans une variable)

Set tmp = Intersect(ThisWorkbook.Sheets("Sheet2").UsedRange, dico)
--> c'est la que je me perds.

Set dest = ThisWorkbook.Sheets("Sheet2").Cells(tmp.Row + tmp.Rows.Count, "e").End(xlUp).Offset(1)
--> faire que la variable dest soit affichée en dessous du tableau


En réalité c'est aussi cette ligne
If dico.Find(val) Is Nothing Then
qui me pose problème.

Merci
0
yg_be Messages postés 23333 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 18 novembre 2024 1 551 > farreneit Messages postés 282 Date d'inscription jeudi 5 juillet 2012 Statut Membre Dernière intervention 13 janvier 2023
Modifié le 4 janv. 2021 à 12:57
j'ai l'impression que tu essaies de deviner, sans avoir compris les bases du langage.
l'intuition ne remplace pas la connaissance.

tu devrais étudier:
- ce que fait
intersect

- ce qu'est une variable de type
range

- ce que fait
set

- ce que fait
find()
0
farreneit Messages postés 282 Date d'inscription jeudi 5 juillet 2012 Statut Membre Dernière intervention 13 janvier 2023 10 > yg_be Messages postés 23333 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 18 novembre 2024
4 janv. 2021 à 13:04
C'est bien ça en effet !

Dans une grande partie des cas j'arrive à m'en sortir, toutefois lorsqu'il y a trop de paramètres que je ne maitrise pas cela ne fonctionne plus ..

Encore merci pour ton aide, je vais me renseigner sur ces différents sujets lorsque j'aurais un moment.

Bien à toi !
0