Probleme avec Range.find

Résolu
mod77 Messages postés 1320 Date d'inscription   Statut Membre Dernière intervention   -  
mod77 Messages postés 1320 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?



--
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. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     
    bonjour, peut-être ainsi:
    Set adr = wsh.Range("B5:B" & CStr(finlg + 5)).Find(numcarte, "B5", xlValues, xlWhole, xlByRows, xlNext)
    1
    1. mod77 Messages postés 1320 Date d'inscription   Statut Membre Dernière intervention   53
       
      Bonsoir yg_be,
      malheureusement ça ne change rien :-(
      0
    2. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > mod77 Messages postés 1320 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
    3. mod77 Messages postés 1320 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
    4. mod77 Messages postés 1320 Date d'inscription   Statut Membre Dernière intervention   53
       
      pour info: la réponse est toujours: adr = nothing
      0
    5. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > mod77 Messages postés 1320 Date d'inscription   Statut Membre Dernière intervention  
       
      je pensais que le problème était "incompatibilité de type"?
      0
  2. mod77 Messages postés 1320 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
    1. mod77 Messages postés 1320 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
    2. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      je suggère
      adr.Row
      0
    3. mod77 Messages postés 1320 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
  3. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    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
    1. mod77 Messages postés 1320 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