Problème Find, objet requis
Bonjour.
J'ai un gros souci avec la commande Find.
Dans le code ci-dessous, le premier Find, qui doit trouver un numéro de ligne, fonctionne correctement.
Les suivants, qui cherchent des numéros de colonne, par contre, plantent: erreur de run-time 91.
Pourquoi?
N.B.: je ne peux pas joindre de fichier, la gestion informatique de mon bureau l'empêche.
En tout cas, tous les élémeents appelés dans le code sont présent dans la même feuille, il s'agit d'un Workbook avec un seul Sheet. Les plages sont nommées.
Merci à quiconque peut me filer un coup de main, parce que je dois résoudre rapidement.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| Sub remplir()
Dim nom As String, note As String, dern As Date, prem As Date
Dim ligne As Long, colDer As Long, colPrem As Long, colDebut As Long, colFin As Long
NrRgLista = Range("lista").Rows.Count
For i = 2 To NrRgLista 'la 1ère ligne contient des noms de champs
With Range("lista").Rows(i)
nom = .Cells(1).Value
dern = .Cells(2).Value
prem = .Cells(3).Value
note = .Cells(4).Value
iniCong = dern + 1
finCong = prem - 1
End With
If nom <> "" Then
ligne = Range("caleNomi").Find(nome).Row 'ça marche !
With ActiveSheet.Range("caleDate")
Set colDer = .Find(dern, LookIn:=xlValues).Column ' ça bloque! Run-time 91
Set colPrem = .Find(prem, LookIn:=xlValues).Column
Set colDebut = .Find(iniCong, LookIn:=xlValues).Column
Set colFin = .Find(finCong, LookIn:=xlValues).Column
If colDer Is Nothing And colPrem Is Nothing Then
MsgBox "date dernier jour hors calendrier"
Exit Sub
Else
MsgBox "trouvé: " And colDer
Exit Sub
End If
' ensuite il faudra mettre ces données dans le tableau
End With
End If
Next
End Sub |
ça ne marche toujours pas
Voilà, donc j'ai modifié le code, que re-voici:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| Sub remplir()
Dim nom As String, note As String, dern As Date, prem As Date
Dim ligne As Long, colDer As Range, colPrem As Range, colDebut As Range, colFin As Range
NrRgLista = Range("lista").Rows.Count
For i = 2 To NrRgLista 'la 1ère ligne contient des noms de champs
With Range("lista").Rows(i)
nom = .Cells(1).Value
dern = .Cells(2).Value
prem = .Cells(3).Value
note = .Cells(4).Value
iniCong = dern + 1
finCong = prem - 1
End With
If nom <> "" Then
ligne = Range("caleNomi").Find(nom).Row 'ok, ça marche comme avant
With ActiveSheet.Range("caleDate")
Set colDer = .Find(dern, LookIn:=xlValues) '.Column ' ça ne marche plus
Set colPrem = .Find(prem, LookIn:=xlValues) '.Column
Set colDebut = .Find(iniCong, LookIn:=xlValues) '.Column
Set colFin = .Find(finCong, LookIn:=xlValues) '.Column
If colDer Is Nothing And colPrem Is Nothing Then
MsgBox "date dernier jour hors calendrier - " & nom & " " & ligne
Exit Sub
Else
MsgBox "trouvé: " And colDer.Column
Exit Sub
End If
' ensuite il faudra mettre ces données dans le tableau
End With
End If
Next
End Sub |
Maintenant les variables des colonnes sont des objets, donc Set. Mais - malgré que les dates sont BIEN comprises dans le calendrier - il ne les trouve pas.
J'ai aussi contrôlé le format des dates, en donnant le même (ggg gg/mm/aa) à TOUTES les cellules des deux plages (lista et caleDate).
Comme le "Nothing" est géré (merci Menhir), je n'ai plus d'erreur run-time, mais... les variables des colonnes que je cherche sont toujours Nothing (testé avec F8) et à la fin j'obtiens la MsgBox "hors calendrier" alors que je devrais obtenir l'autre.
Je dois tout fermer, désormais. Si vous avez d'autres suggestions, je suis preneur et je les lirai demain.
Merci à tous!