[VBA] Pb code recherche de valeur

Fermé
Jipi's - 18 oct. 2009 à 12:03
 Jipi's - 18 oct. 2009 à 17:27
Bonjour,

Je ne m'y connait pas enormement en VBA mais je cherche a effectuer une recherche en VBA car sur une feuille, j'ai une feuille d'entrée de materiel, sur laquelle on selection un NOM dans une liste, et je souhaite que de ce choix découle une liste de prénom possible (car j'ai au maximum trois personnes avec le meme NOM). J'ai donc ecris ce code (sachant qu'il bloque à la ligne Cells.Find(what:=Recherche_nom).Select, mais que celle ci fonctionne trés bien sur un autre code que j'ai ecris, c'est pour ça que je ne comprends pas...)

Sub RecherchePrenom()

' Definition des variables
Dim Rnom As String
Dim LignePr As Integer
Dim LignePr1 As Integer
Dim LignePr2 As Integer

' Attribution de valeur à Rnom
Rnom = Worksheets("Entrée Materiel").Range("E13").Value

' Selection de la feuille pour lancer la recherche
Worksheets("Base tel").Select

' Lancement de la recherche
Cells.Find(what:=Rnom).Select

' Récupération du numéro de ligne dans une variable
LignePr = ActiveCell.Row

' Défini des variables LignePr1 et lignePr2
LignePr1 = LignePr + 1
LignePr2 = LignPr + 2

' Premiere condition, on teste si en dessous de notre premiere ligne il y a le meme nom
If Range("A" & LignePr1).Value = Rnom Then
' Deuxieme condition, si notre premiere condition est vrai alors on teste la ligne encore en dessous
If Range("A" & LignePr2).Value = Rnom Then
' On nomme la plage en fonction des conditions
ActiveWorkbook.Names("Liste_prenom").Delete
Range("$B$" & LignePr & ":$B$" & LignePr2).Name = "Liste_prenom"
Else
ActiveWorkbook.Names("Liste_prenom").Delete
Range("$B$" & LignePr & ":$B$" & LignePr1).Name = "Liste_prenom"
End If
' On crée une liste deroulante en utilisant la plage que nous venons de créer.
Range("I1").Select
With Selection.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:="=Liste_prenom"
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
Else
' Si le nom n'est présent que sur une ligne on ne crée pas de liste
Range("I1").Value = Range("B" & LignePr).Value
End If
'On selectionne la cellule I1 et on la copie sur la l'autre feuille en H13
Range("I1").Select
Selection.Copy
Sheets("Entrée Materiel").Select
Range("H13").Select
ActiveSheet.Paste
End Sub

Pour expliquer un peu mon code et ma demarche, en fait je defini une variable contenant le nom, ensuite je selectionne la feuille pour la recherche et recherche cette valeur en selectionnant la cellule la contenant. Une fois cette cellule selectionner je recupere le numéro de la ligne, et je teste si sur la ligne en dessous il y a le meme nom, ainsi que sur la suivante, afin de pouvoir creer une plage de données avec une liste de prenom.

Si le nom apparait sur une ligne, pas de liste, directement la valeur dans la cellule, si le nom apparait sur 2 ligne, je definis une plage nommé de deux cellules, et de 3 s'il y a 3 fois le nom.

Mais ce code ne fonctionne pas, il bloque à Cells.Find(what:=Recherche_nom).Select en me disant : "la methode Select de la classe Range a echoué".

J'espère sincerement que vous allez pouvoir m'aider.

Bon dimanche.

Jipi's
A voir également:

2 réponses

Bon en fait j'ai résolu mon probleme, il ne faut pas utiliser Select dans un private Sub...
0
En fait j'ai toujours un probleme avec ce code... Je n'arrive jamais à avoir une liste de 3 noms, meme si j'ai 3 fois le meme nom...
0