Recherche de valeurs dans plages nommées

Résolu/Fermé
Clem - 28 oct. 2017 à 16:58
 Clem - 29 oct. 2017 à 10:22
Bonjour,

Je suis débutante en VBA et doit effectuer la macro suivante:

"Ecrivez une macro VerifValeur qui recherche une valeur dans une plage nommée.

La macro prendra deux arguments en paramètre :
valeur, représentant la valeur cherchée
zone, représentant le nom de la zone nommée dans laquelle se fera la recherche

La macro aura donc pour entête : Sub VerifValeur(valeur,zone)

Vous utiliserez la macro TestVerif pour tester votre macro"

Voilà ce que j'ai réussi à faire jusque là... évidemment ça ne fonctionne pas encore mais je bloque depuis un certain temps déjà! à l'aide!
Il y a trois plages nommées en tout (UE, ESA et CE)

---------------------
Sub VerifValeur(valeur, zone)

Trouvé = False
Dim zone As Range

For Each cellule In zone
If cellule.Value = valeur Then
Debug.Print "la valeur" + valeur + "existe"
Trouvé = True
End If

Next
If Trouvé = False Then
Debug.Print "la valeur n'existe pas"
End If

End Sub
------------------------
Sub TestVerif()
VerifValeur "France", "UE"
VerifValeur "France", "ESA"
VerifValeur "France", "CE"
VerifValeur "Allemagne", "UE"
VerifValeur "Allemagne", "ESA"
VerifValeur "Allemagne", "CE"
VerifValeur "Pologne", "UE"
VerifValeur "Pologne", "ESA"
VerifValeur "Pologne", "CE"
VerifValeur "Monaco", "UE"
VerifValeur "Monaco", "ESA"
VerifValeur "Monaco", "CE"
End Sub
---------------------------

Merci d'avance!

Clémentine

3 réponses

ccm81
Messages postés
10357
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
5 juillet 2022
2 299
Modifié le 28 oct. 2017 à 17:21
Bonjour

la variable zone ne doit pas être déclarée dans la procedure, sinon elle sera ré-initialisée à nothing en attendant d'être affectée et celle passée à la procedure n'est plus visible dans la procedure
Essaies ceci

Sub VerifValeur(valeur, zone As Range)
Dim cellule As Range, trouve As Boolean
For Each cellule In zone
  If cellule.Value = valeur Then
    MsgBox "la valeur " & valeur & " existe dans la plage " & zone.Address & " en " & cellule.Address
    trouve = True
    Exit For
  End If
Next
If trouve = False Then
  MsgBox "la valeur n'existe pas"
End If
End Sub


De plus lors de l'appel le second paramètre est une plage

Sub TestVerif()
VerifValeur "France", Range("UE")
...
End Sub


Cdlmnt
0
Bonjour ccm81,

merci beaucoup pour cette réponse rapide et les modifications apportées !
Hélas, ça ne fonctionne toujours pas (message d'erreur 1004 la méthode Range de l'objet _Global a échoué)


Cordialement,
0
ccm81
Messages postés
10357
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
5 juillet 2022
2 299
28 oct. 2017 à 17:25
Eh oui, tu as peut être un autre problème dans la deuxième procedure
J'ai pris comme option que zone est de type Range
j'ai modifié et complété le code, vois ce que ça donne
http://www.cjoint.com/c/GJCpysZQPpB

Cdlmnt
0
Super, ça a l'air de fonctionner ! Merci encore !!
0
jordane45
Messages postés
35833
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
7 juillet 2022
4 208
29 oct. 2017 à 08:04
Bonjour

Juste au cas où tu voudrais un truc mieux que des boucles....

https://forums.commentcamarche.net/forum/affich-37621992-methode-find-dans-vba-recherche-de-donnees-sous-excel

.
0
Merci beaucoup ! Notre professeur veut qu'on utilise des boucles.. mais je suis d'accord que la méthode find a l'air bien plus pratique !
0