Probleme avec Range.find

Résolu/Fermé
mod77 Messages postés 1273 Date d'inscription vendredi 10 juillet 2009 Statut Membre Dernière intervention 14 janvier 2024 - 30 juin 2017 à 17:57
mod77 Messages postés 1273 Date d'inscription vendredi 10 juillet 2009 Statut Membre Dernière intervention 14 janvier 2024 - 1 juil. 2017 à 18:02
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 23294 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 octobre 2024 Ambassadeur 1 548
30 juin 2017 à 18:35
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 1273 Date d'inscription vendredi 10 juillet 2009 Statut Membre Dernière intervention 14 janvier 2024 53
30 juin 2017 à 22:01
Bonsoir yg_be,
malheureusement ça ne change rien :-(
0
yg_be Messages postés 23294 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 octobre 2024 1 548 > mod77 Messages postés 1273 Date d'inscription vendredi 10 juillet 2009 Statut Membre Dernière intervention 14 janvier 2024
1 juil. 2017 à 00:03
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 1273 Date d'inscription vendredi 10 juillet 2009 Statut Membre Dernière intervention 14 janvier 2024 53
1 juil. 2017 à 00:14
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 1273 Date d'inscription vendredi 10 juillet 2009 Statut Membre Dernière intervention 14 janvier 2024 53
1 juil. 2017 à 00:17
pour info: la réponse est toujours: adr = nothing
0
yg_be Messages postés 23294 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 octobre 2024 1 548 > mod77 Messages postés 1273 Date d'inscription vendredi 10 juillet 2009 Statut Membre Dernière intervention 14 janvier 2024
1 juil. 2017 à 00:20
je pensais que le problème était "incompatibilité de type"?
0
mod77 Messages postés 1273 Date d'inscription vendredi 10 juillet 2009 Statut Membre Dernière intervention 14 janvier 2024 53
1 juil. 2017 à 12:40
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 1273 Date d'inscription vendredi 10 juillet 2009 Statut Membre Dernière intervention 14 janvier 2024 53
1 juil. 2017 à 13:26
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 23294 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 octobre 2024 1 548
1 juil. 2017 à 13:27
je suggère
adr.Row
0
mod77 Messages postés 1273 Date d'inscription vendredi 10 juillet 2009 Statut Membre Dernière intervention 14 janvier 2024 53
1 juil. 2017 à 18:02
super yg_be!
effectivement, c'est court et efficace!

merci de votre aide à vous 2.
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310
Modifié le 1 juil. 2017 à 17:28
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 1273 Date d'inscription vendredi 10 juillet 2009 Statut Membre Dernière intervention 14 janvier 2024 53
1 juil. 2017 à 17:59
bonjour michel_m,

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