Probleme avec Range.find

Résolu
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?



--
Savoir dire NON est un devoir et une force! N'ayez pas peur! L'union fait la force!

Passez en résolu si ça l'est!

3 réponses

  1. Contributeur
    bonjour, peut-être ainsi:
    Set adr = wsh.Range("B5:B" & CStr(finlg + 5)).Find(numcarte, "B5", xlValues, xlWhole, xlByRows, xlNext)
    1. Bonsoir yg_be,
      malheureusement ça ne change rien :-(
    2. Contributeur
      @mod77et ainsi?
      Set adr = wsh.Range("B5:B" & CStr(finlg + 5)).Find(numcarte, wsh.Range("B5") , xlValues, xlWhole, xlByRows, xlNext)
    3. 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)
    4. pour info: la réponse est toujours: adr = nothing
    5. Contributeur
      @mod77je pensais que le problème était "incompatibilité de type"?
  2. 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? ...
    1. 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?
    2. Contributeur
      je suggère
      adr.Row
    3. super yg_be!
      effectivement, c'est court et efficace!

      merci de votre aide à vous 2.
  3. Contributeur
    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
    1. bonjour michel_m,

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