cs_francis78
Messages postés5Date d'inscriptiondimanche 8 août 2004StatutMembreDernière intervention 8 août 2004
-
8 août 2004 à 18:20
yaglak
Messages postés6Date d'inscriptionmardi 5 avril 2005StatutMembreDerniè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 !
cs_liquide
Messages postés1016Date d'inscriptionsamedi 22 mars 2003StatutMembreDernière intervention24 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.
cs_francis78
Messages postés5Date d'inscriptiondimanche 8 août 2004StatutMembreDerniè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 ?
cs_CanisLupus
Messages postés3757Date d'inscriptionmardi 23 septembre 2003StatutMembreDernière intervention13 mars 200621 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
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_francis78
Messages postés5Date d'inscriptiondimanche 8 août 2004StatutMembreDerniè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
cs_liquide
Messages postés1016Date d'inscriptionsamedi 22 mars 2003StatutMembreDernière intervention24 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
cs_francis78
Messages postés5Date d'inscriptiondimanche 8 août 2004StatutMembreDerniè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
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
cs_liquide
Messages postés1016Date d'inscriptionsamedi 22 mars 2003StatutMembreDernière intervention24 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
michelxld
Messages postés402Date d'inscriptionvendredi 6 août 2004StatutMembreDernière intervention12 octobre 200832 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
cs_francis78
Messages postés5Date d'inscriptiondimanche 8 août 2004StatutMembreDerniè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 !!
;-)