VBA - IF avec conditions multiples et plages de cellules

Bonsoir à toutes et à tous, je suis un nouveau venu sur le forum et sur vba aussi d'ailleurs

Après avoir passé des heures sur ce problème à chercher partout, je dois avouer ma défaite humblement. La question reste cependant très simple pour les habitués je pense.

Je veux créer une macro qui suit les instructions suivantes :

1) Identifier dans l'onglet 1 une ligne (à coordonnées fixes) de 7 cellules

2) Trouver ladite ligne dans un tableau de plusieurs centaines de lignes dans l'onglet 2 en vérifiant que chacune des 7 cellules corresponde (les lignes sont similaires entre elles et il est facile de les confondre)

3) Une fois la ligne identifiée, sélectionner la ligne complète (shift + espace) et la supprimer

Je bute dans la fonction If avec les 7 conditions. C'est sûrement à la fois un problème de syntaxe et de raisonnement, mais vous me le direz mieux que moi hahaha.

Voici la fonction :

If worksheet("2").range("plage1").value=worksheet("1").range("D32").value and (répétition de l'argument 6 fois avec les plages et cellules adaptées), Then (?)

Explications :

Plage 1 correspond à la colonne 1 du tableau dans laquelle la fonction doit trouver le type d'info 1, la plage 2 le type d'info 2 etc.

Je suis obligé de définir des plages puisque je ne sais pas où se trouve la ligne en question (et que cette fonction doit fonctionner pour toutes les recherches de ligne voulues). Mais vba m'indique une erreur : plage1 = empty. J'ai essayé avec des parenthèses, sans, avec guillemets, sans etc. Rien n'y fait. C'est parce que j'ai défini des plages de cellules ? Ou un simple problème de syntaxe ?

Enfin une fois les 7 conditions posées, je ne parviens pas à coder que la fonction doit sélectionner toute la ligne qu'elle vient d'identifier. Les tutos expliquent comment faire pour une ligne fixée en urilisant ses coordonnées mais ici la ligne peut se trouver n'importe où dans le tableau...

Bref c'est un petit défi intellectuel pour moi et une broutille pour les connaisseurs hahaha

Votre aide me sera très précieuse car je crois avoir épuisé mes neurones là dessus. Et je sens que je vais rager quand vous expliciterez mes erreurs

En tout cas merci beaucoup pour votre aide, je reste à dispo si je n'ai pas été clair.

Bien cordialement,

Terry

Bonsoir et bienvenu(e)

Méthode plus simple (si j'ai compris ce que tu veux faire)

Dans une colonne en dehors de tes données (onglet 2) une formule qui te concatène les cellules à comparer

Cette formule est répéter sur toutes les lignes du tableau (onglet 2)

Mettre dans une variable les données à comparer (onglet 1) style

Recherche =  Range("A1") & Range("B1")  & etc  ....

Reste juste à faire un find Recherche sur la colonne de l'onglet 2

Si besoin d'aide joins le fichier

Bonsoir,

Tout d'abord merci pour cet accueil et pour la rapidité de la réponse ! N'étant pas encore familier avec la syntaxe pour concaténer je vais prendre le temps de découvrir un peu cette approche et je te reviens prochainement. L'intérêt c'est aussi de découvrir par soi-même. Je pense à mremière vue que ton approche est beaucoup plus simple à faire, tout bénef donc haha.

Merci beaucoup, je creuse la question et si je me plante encore je t'envoie l'excel

A+

Salut !

J'ai suivi tes conseils et ta solution est prometteuse. Il reste cependant quelques erreurs dans ma formule, qui proviennent clairement de mon manque d'expérience en syntaxe VBA.

Voici désormais le code de la macro :

Identification.Cells.Find(What:="Sheets("Enregistrement").Range("Q32").Value", LookAt:=1).Select

Et là j'ai les messages d'erreurs suivants : What = vide et LookAt = vide.

Explications :

Identification est la plage (colonne) de cellules dans l'onglet 2 qui contient pour chaque cellule la ligne du tableau concaténée.

Enregistrement est le nom de l'onglet 1 dans lequel VBA doit chercher les informations sur la ligne à trouver dans l'onglet 2, qui se nomme Historiques.

Comme la plage Identification est dans l'onglet Historiques, il n'est pas nécessaire de préciser autre chose si ?

De plus j'ai bien vérifié, Q32 n'est pas vide. En revanche il y a des cellules vides dans la plage Identification (4 sur 30 au total).

Pourquoi le message d'erreur me dit que mes arguments sont vides ? Un problème de parenthèses ? De guillemets ?

En tout cas avec cette solution le code est réduit à trois fois moins de lignes donc merci !!

Bonsoir

La meilleure solution est de fournir un fichier dans lequel tu dis ce que as et ce que tu veux

Terry a écrit :

Et là j'ai les messages d'erreurs suivants : What = vide et LookAt = vide.

Comment arrivent ces messages d'erreurs ?

What: et LookAt: sont des paramètres de fonction Find

Tu as "Sheets("Enregistrement").Range("Q32").Value" entre guillemets !!!!!

Il n'est pas conseiller de faire un Select sur une recherche (à moins d'être sur que la recherche existe)

A toi de voir

Salut ! Désolé pour la réponse plus que tardive, mais mon stage me prend tout mon temps ou presque (je viens de finir mon taf haha).

Les messages d’erreurs s’affichent quand je place mon curseur sur la ligne de code, dans un commentaire jaune. Tu as dit dans ton dernier message que mettre un select après un find n’est pas recommandé. Au départ je n’ai pas compris pourquoi, mais ta remarque m’a fait tilter que la démarche au départ n’est pas correcte, et qu’une telle macro ne conduit pas au résultat voulu.

En effet, il y a huit critères simultanés. Mais mon idée ne fonctionne que pour une recherche avec les huit critères remplis. Si jamais je dois faire une recherche avec seulement un seul critère et les sept autres left blank, alors ma fonction ne marche pas. Alors merci pour m’avoir fait gagner du temps.

En théorie ton idée de concaténer les lignes devrait continuer à fonctionner : si on laisse des critères vides, alors, sous réserve de ne pas faire de recherche avec un « exact match », on devrait pouvoir identifier toutes les lignes qui correspondent au texte dans la cellule concaténée non ?

Je veux bien t’envoyer l’excel mais je dois d’abord changer les chiffres et les noms. En effet c’est un excel de gestion de comptes bancaires

Merci pour ta patience et bonne soirée !

Rechercher des sujets similaires à "vba conditions multiples plages"