Probleme avec Range.find

Résolu
mod77 Messages postés 1284 Date d'inscription   Statut Membre Dernière intervention   -  
mod77 Messages postés 1284 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

Je viens ici parce que je n'arrive pas à trouver le problème d'incompatibilité de type sur cette ligne de mon code:

Sub LitCSV() 'Lit les votes dans le fichier CSV
Dim i As Integer, pos As Integer, finlg As Integer
Dim vote As String, numcarte As String
Dim adr As Range
Dim wsh As Worksheet

Set wsh = ThisWorkbook.Sheets("Votes")
finlg = wsh.Range("A4").Value

Application.ScreenUpdating = False
'Workbooks.Open ("D:\monCSV.txt")

Open "D:\monCSV.txt" For Input As #1 'ouvre en lecture seule

i = 0
Do While Not EOF(1) ' Effectue la boucle jusqu'à la fin du fichier
i = i + 1
Line Input #1, vote ' Met la ligne lue dans la variable "vote"
MsgBox vote
'sépare le numero de carte du vote
pos = InStr(1, vote, ",", 1)
numcarte = Left(vote, pos - 1) 'supprime le point virgule et prend ce qui est à gauche
MsgBox numcarte
vote = Mid(vote, pos + 1) 'renvoie les derniers caractères à "vote"
MsgBox vote
'cherche le NumeroCarte dans feuille "Votes"
Set adr = wsh.Range("B5:B" & finlg + 5).Find(numcarte, "B5", xlValues, xlWhole, xlByRows, xlNext)
If Not adr Is Nothing Then
MsgBox adr.Column
wsh.Range("Q" & adr.Rows) = vote
Set adr = Nothing
End If
Loop

i = i - 1
Close #1

Workbooks("monCSV.txt").Close
Application.ScreenUpdating = True
End Sub


Quelqu'un sera-t-il m'éclairer svp?


3 réponses

yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 584
 
bonjour, peut-être ainsi:
Set adr = wsh.Range("B5:B" & CStr(finlg + 5)).Find(numcarte, "B5", xlValues, xlWhole, xlByRows, xlNext)
1
mod77 Messages postés 1284 Date d'inscription   Statut Membre Dernière intervention   53
 
Bonsoir yg_be,
malheureusement ça ne change rien :-(
0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584 > mod77 Messages postés 1284 Date d'inscription   Statut Membre Dernière intervention  
 
et ainsi?
Set adr = wsh.Range("B5:B" & CStr(finlg + 5)).Find(numcarte, wsh.Range("B5") , xlValues, xlWhole, xlByRows, xlNext)
0
mod77 Messages postés 1284 Date d'inscription   Statut Membre Dernière intervention   53
 
idem
j'ai même essayé ça:

dim fin as string
fin = CStr("B" & finlg)

Set adr = wsh.Range("B6:" & fin).Find(numcarte, CStr("B5"), xlWhole, xlByColumns, xlNext)
0
mod77 Messages postés 1284 Date d'inscription   Statut Membre Dernière intervention   53
 
pour info: la réponse est toujours: adr = nothing
0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584 > mod77 Messages postés 1284 Date d'inscription   Statut Membre Dernière intervention  
 
je pensais que le problème était "incompatibilité de type"?
0
mod77 Messages postés 1284 Date d'inscription   Statut Membre Dernière intervention   53
 
J'ai encore un problème bizarre :

Set adr = wsh.Range("B5:B" & CStr(finlg + 5)).Find(numcarte, wsh.Range("B6"), xlValues, xlWhole, xlByColumns, xlNext)

Range.find me renvoie "adr" égale la valeur de "numcarte".
Mais lorsque j'écris :
MsgBox adr.Address
là, j'ai l'adresse où "numcarte" est trouvée.

Ce qui m'intéresse, c'est d'avoir uniquement son numéro de ligne.
mais en écrivant
adr.Rows
j'ai de nouveau la valeur de "numcarte".

Que faire alors? ...
0
mod77 Messages postés 1284 Date d'inscription   Statut Membre Dernière intervention   53
 
j'ai réussi à avoir ce que je veux avec ça, à la suite:
 If Not adr Is Nothing Then
localise = Range(adr.Address(0, 0)).Activate
localise = ActiveCell.Row

Mais ça m'a l'air un peu abracadabrantesque,non?!

Est-ce qu'il y a mieux?
0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584
 
je suggère
adr.Row
0
mod77 Messages postés 1284 Date d'inscription   Statut Membre Dernière intervention   53
 
super yg_be!
effectivement, c'est court et efficace!

merci de votre aide à vous 2.
0
michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 314
 
Bonnjour

tu peux avoir directement la ligne sans passer par une cellule
with Wsh
Ligne=.Range("B5:B" & CStr(finlg + 5)).Find(what:=numcarte, after:=.Range("B5"),lookat:=xlWhole).Row
end with

reste à voir la gestion d'une erreur (numcarte inconnu)
 Michel
0
mod77 Messages postés 1284 Date d'inscription   Statut Membre Dernière intervention   53
 
bonjour michel_m,

non ça, ça ne marche pas je l'ai indiqué plus haut
0