Methode Find

cs_francis78 Messages postés 5 Date d'inscription dimanche 8 août 2004 Statut Membre Dernière intervention 8 août 2004 - 8 août 2004 à 18:20
yaglak Messages postés 6 Date d'inscription mardi 5 avril 2005 Statut Membre Dernière intervention 1 juin 2005 - 1 juin 2005 à 17:37
Hello,
je viens d'écrire un petit programme qui me permet de chercher une ligne dans un fichier excel à partir d'une clé (idclient) qui se trouve dans un autre fichier, puis de copier une valeur qui se trouve sur cette ligne avant de la coller dans l'autre fichier.
pour trouver ma ligne, j'utilise la method find avec la commande suivante :

ligne = Sheets(1).Columns(1).Find(what:=idclient, LookIn:=xlFormulas, lookat:=xlWhole).Address

le pb, c'est que lorsqu'il ne trouve rien, il me fait une erreur blocante et ne passe pas à la suite.
ma question est donc la suivante : comment faire pour que la macro ne stoppe pas lorsqu'elle ne trouve rien !

merci pour votre aide
Francis

13 réponses

cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 21
8 août 2004 à 18:30
Salut, je ne sais pas si en excel ça marche (quoique y a pas de raison) mais essaie :

On Error Resume Next avant l'instruction qui bloque
et On Error Goto 0 après pour ne pas sauter les autres erreurs possibles.

Cordialement

CanisLupus
0
cs_liquide Messages postés 1016 Date d'inscription samedi 22 mars 2003 Statut Membre Dernière intervention 24 juin 2008
8 août 2004 à 18:32
il faut gerer l'erreur, mais peut être faut il savoir comment est déclarée la variables et quel message d'erreur renvoit il.
la méthode "barbare" est sans doute de mettre un "on error resume next" juste avant cette ligne, ou en début de code.

Bonne prog, poele_a_frire@hotmail.com
liquide
0
cs_francis78 Messages postés 5 Date d'inscription dimanche 8 août 2004 Statut Membre Dernière intervention 8 août 2004
8 août 2004 à 18:43
le "on error resume next" fonctionne bien, par contre, du coup, ça me fait un décalage dans mon copier/coller car il ne saute pas ligne à l'instruction suivante
est-ce que je peux comptabiliser d'une manière ou d'une autre ces erreurs ?

merci !
A+
Francis
0
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 21
8 août 2004 à 18:45
Ben vi, liquide c une méthode "barbare" mais bon, sans autres précisions que "comment faire pour que la macro ne stoppe pas lorsqu'elle ne trouve rien !"..........

Suis pas un expert en VBA Excel

:-)

Cordialement

CanisLupus
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_liquide Messages postés 1016 Date d'inscription samedi 22 mars 2003 Statut Membre Dernière intervention 24 juin 2008
8 août 2004 à 18:51
Arff dsl canilupus, quand j'ai posté, j'avais pas vu que tu l'avais mis auparavant.

Bonne prog, poele_a_frire@hotmail.com
liquide
0
cs_francis78 Messages postés 5 Date d'inscription dimanche 8 août 2004 Statut Membre Dernière intervention 8 août 2004
8 août 2004 à 18:52
faisons simple !!
;-)
voici le programme !
en fait, j'aimerai pouvoir écrire 0 dans la variable ligne si la fonction find ne trouve rien, et que cela ne bloque pas tout le bouzin bien sur !! :-))

merci !!

Sub FLETEST3()

Dim idclient As Variant
Dim ligne As Variant
Dim conteur As Variant

Windows("infoscore.xls").Activate
Range("A2").Select

While ActiveCell.Value <> ""

idclient = ActiveCell.Value

Windows("Desabo20040804.xls").Activate
Range("A1").Select

ligne = Sheets(1).Range("A1:A2294").Find(what:=idclient, LookIn:=xlFormulas, lookat:=xlWhole).Address
ligne = Range(ligne).Row
ligne = CInt(ligne)

If ligne <> 0 Then

ligne = Range(ligne).Row
ligne = CInt(ligne) - 1
Range("A1").Select
ActiveCell.Offset(ligne, 15).Range("A1").Select
Selection.Copy
Windows("infoscore.xls").Activate
ActiveCell.Offset(0, 15).Range("A1").Select
ActiveSheet.Paste
Windows("Desabo20040804.xls").Activate
ActiveCell.Offset(1, -15).Range("A1").Select
conteur = 15

While idclient = ActiveCell.Value
ActiveCell.Offset(0, 15).Range("A1").Select
Selection.Copy
Windows("infoscore.xls").Activate
ActiveCell.Offset(0, 1).Range("A1").Select
ActiveSheet.Paste
Windows("Desabo20040804.xls").Activate
ActiveCell.Offset(1, -15).Range("A1").Select
conteur = conteur + 1
Wend

End If
If ligne 0 Then conteur ligne
Windows("infoscore.xls").Activate
ActiveCell.Offset(1, -conteur).Range("A1").Select
Wend


End Sub
0
cs_liquide Messages postés 1016 Date d'inscription samedi 22 mars 2003 Statut Membre Dernière intervention 24 juin 2008
8 août 2004 à 19:03
tu peux essayé quelque chose comme ca :

On Error Goto SautLigne
ligne = Sheets(1).Range("A1:A2294").Find(what:=idclient, LookIn:=xlFormulas, lookat:=xlWhole).Address
ligne = Range(ligne).Row
ligne = CInt(ligne)

SautLigne:if err ..... then ligne 0
If ligne <> 0 Then


puis je mettrais Dim Conteur as integer

Bonne prog, poele_a_frire@hotmail.com
liquide
0
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 21
8 août 2004 à 19:07
AIe Aie !

Je crois que je vais vous laisser entre spécialistes du VBA Excel.

;-)

Cordialement

CanisLupus
0
cs_francis78 Messages postés 5 Date d'inscription dimanche 8 août 2004 Statut Membre Dernière intervention 8 août 2004
8 août 2004 à 19:26
ça ne fonctionne pas !!!
;-(
il n'a pas l'aire de comprendre "on error goto sautligne" car contrairement au "on error resume next", l'erreur se produit toujours (erreur 91)

Sub FLETEST3()

Dim idclient As Variant
Dim ligne As Variant
Dim conteur As Integer

Windows("infoscore.xls").Activate
Range("A2").Select

While ActiveCell.Value <> ""

idclient = ActiveCell.Value

Windows("Desabo20040804.xls").Activate
Range("A1").Select

On Error GoTo SautLigne
ligne = Sheets(1).Range("A1:A2294").Find(what:=idclient, LookIn:=xlFormulas, lookat:=xlWhole).Address
ligne = Range(ligne).Row
ligne = CInt(ligne)

SautLigne:If Err 91 Then ligne 0

If ligne <> 0 Then

ligne = ligne - 1
Range("A1").Select
ActiveCell.Offset(ligne, 15).Range("A1").Select
Selection.Copy
Windows("infoscore.xls").Activate
ActiveCell.Offset(0, 15).Range("A1").Select
ActiveSheet.Paste
Windows("Desabo20040804.xls").Activate
ActiveCell.Offset(1, -15).Range("A1").Select
conteur = 15

While idclient = ActiveCell.Value
ActiveCell.Offset(0, 15).Range("A1").Select
Selection.Copy
Windows("infoscore.xls").Activate
ActiveCell.Offset(0, 1).Range("A1").Select
ActiveSheet.Paste
Windows("Desabo20040804.xls").Activate
ActiveCell.Offset(1, -15).Range("A1").Select
conteur = conteur + 1
Wend

End If
If ligne 0 Then conteur ligne
Windows("infoscore.xls").Activate
ActiveCell.Offset(1, -conteur).Range("A1").Select
Wend


End Sub
0
cs_liquide Messages postés 1016 Date d'inscription samedi 22 mars 2003 Statut Membre Dernière intervention 24 juin 2008
8 août 2004 à 19:57
le "on error goto ..." fonctionne , je viens de regarder l'aide, avec l'erreur , que marque t il de plus pour essayer de mieux cibler le pb et eventuellement pouvoir le gerer autrement, le 1er "ligne" doit renvoyer quel genre de donner ... string, integer, ...etc

Bonne prog, poele_a_frire@hotmail.com
liquide
0
michelxld Messages postés 402 Date d'inscription vendredi 6 août 2004 Statut Membre Dernière intervention 12 octobre 2008 32
8 août 2004 à 22:03
bonsoir à tous

Je ne suis pas sur d'avoir bien compris l'objectif de la macro . J'ai interprété que tu souhaitais boucler sur toutes les valeurs de la colonne A (IdClient )du classeur "infoscore.xls" ,et ensuite effectuer une recherche dans le classeur "Desabo20040804.xls".
Pour chaque résultat positif , la donnée de la colonne P est copiée dans la ligne de l'IdClient .
Si plusieurs valeurs sont trouvées , elles sont collées à la suite sur la meme ligne
?mais j'ai peut etre mal compris?.

Sub TestBoucle()
'testé avec Excel2002
Dim IdClient As Range, Cell As Range
Dim i As Integer, j As Integer
Dim FirstAddress As String

i = Workbooks("infoscore.xls").Sheets(1).Range("A65536").End(xlUp).Row 'adapter sheets(1) si necessaire
For Each IdClient In Workbooks("infoscore.xls").Sheets(1).Range("A2:A" & i)
j = 15

With Workbooks("Desabo20040804.xls").Sheets(1).Range("A1:2294")
Set Cell = .Find(IdClient, LookIn:=xlFormulas, lookat:=xlWhole)
If Not Cell Is Nothing Then
FirstAddress = Cell.Address

Do
Cell.Select
IdClient.Offset(0, j) = Workbooks("Desabo20040804.xls").Sheets(1).Cells(Cell.Row, 16)
j = j + 1

Set Cell = .FindNext(After:=ActiveCell)
Loop While Not Cell Is Nothing And Cell.Address <> FirstAddress

End If
End With

Next
End Sub

bonne soiree
michel
0
cs_francis78 Messages postés 5 Date d'inscription dimanche 8 août 2004 Statut Membre Dernière intervention 8 août 2004
8 août 2004 à 22:24
ça y est, j'ai trouvé !
en fait le programme marche, il fallait juste ajouter un ligne=0 avant le "on error resume next" !
merci à tous pour votre aide ! vous êtes des pros !!
;-)

A+
Francis
0
yaglak Messages postés 6 Date d'inscription mardi 5 avril 2005 Statut Membre Dernière intervention 1 juin 2005
1 juin 2005 à 17:37
0
Rejoignez-nous