perte de variable dans une macro - VB/VBA/VBS - Programmation
Marsh Posté le 26-10-2007 à 19:30:35
Ton message d'erreur, généralement c'est quand t'as une variable objet qui n'est plus assignée, ce qui pourrait être utile, c'est de dire sur quelle ligne ça plante
A mon avis, ça ne serait pas impossible que ça plante dès la première fois, mais que tu ne le vois pas à cause du "on error goto..." (J'ai déjà eu des soucis avec ma gestion d'erreur et une boucle perso)
Marsh Posté le 26-10-2007 à 19:42:32
D'accord avec le diable.
si tu ne mets pas de "resume" dans ta gestion d'erreur, ca plante à la seconde fois.
Marsh Posté le 26-10-2007 à 19:48:00
par ailleurs je suppose que ca plante en 30 vu que ta cells n'est pas affectée à une feuille d'aucun classseur...
Marsh Posté le 29-10-2007 à 11:20:32
juste autre petit point, je suis pas sur qu'avoir une variable du nom de la procédure soit très pratique...
Marsh Posté le 29-10-2007 à 14:11:50
Plutôt d'accord, autant dans un autre langage, pourquoi pas, autant en VBA, je le tenterais pas
Marsh Posté le 29-10-2007 à 16:14:56
Merci pour vos réponses
J'ai donc changé le nom de la variable de recherche,
mais pour l'instant c'est toujours la même chose.
Je suppose qu'il faut utiliser un With / End With
sauf que que je ne vois pas très bien comment l'utiliser:
30. with cells.find(what:= ...
37. activeSheet.paste
38. end.With
c'est ça ?
hum! je ne sais pas.
--
d'avance merci ...
Marsh Posté le 29-10-2007 à 16:22:07
bon alors j'ai fait tourner ton code chez moi, j'ai quelques questions :
- ne confonds-tu pas
Code :
|
et
Code :
|
?
la gestion des boucles est une chose que tu n'as pas l'air de maîtriser bcp dans la mesure où je vois plusieurs goto dans tous les sens, c'est mauvais, car une fois sorti par l'exception, tu ne sais pas pkoi ton code a planté...
Tiens nous au courant
Marsh Posté le 29-10-2007 à 17:36:37
J'ai pas tout compris à ce que tu voulais faire
ça plante au deuxième coup quand tu n'a pas de valeur sur ton Cells.find
Et puis les goto partout, je suis d'accord, c'est un peu dégueu
Du coup, je te propose une façon plus propre de faire tes tests...
la méthode find te renvoie un Range, du coup, tu déclare un objet Range (parceque pareil, les codes sans déclaration de variable, c'est le mal !), par exemple ra
tu affectes ton Cells.fin(blablabla...) à ton Range
Puis tu testes si l'objet est "Nothing" ou non
Je pense que ton code ne plantera plus...
Mais j'ai pas exactement compris ce que tu voulais faire, et je ne comprends pas les tenants et aboutissants de chaque ligne de code
Marsh Posté le 30-10-2007 à 11:39:25
Bonjour,
et merci de vos réponses.
Pour mieux faire comprendre mon but,
Je renvoie le code que j'ai un peu nettoyé:
Code :
|
J'appelle le 1er feuillet 'Feuil1' pour ne pas être embarrassé dans les appels de feuillets.
Donc ma feuille Origine s'appelle toujours 'Feuil1'
de même ma feuille de sélection
s'appellera toujours 'Selection'
-
Non je ne connais pas les différences entre:
sheets(« feuill1 »).activate
et sheets(« feuil1 »).select
mais je suis venu ici pour apprendre, étant auto-didacte
-
je ne sais pas comment éviter un
« on error goto... »
car si j'ai épuisé ma recherche,
je tombe en erreur.
Donc, dans ce cas, je réinitialise
ma cellule active en début de feuillet,
prêt à reprendre une nouvelle recherche.
-
Pour la gestion du 'Range',
comment puis-je faire ?
Code :
|
ce qui m'éviterait le « on error.. »
mais je ne connais pas la propriété d'un objet 'Range'
les aides VBA sont vraiment très succinctes,
il faut avoir la science infuse!
Sans vous demander la réponse toute faite,
ce que je ne veux pas,
pourriez-vous cependant me mettre sur la voie ?
D'avance merci!
--
Adept, paumé!
Marsh Posté le 30-10-2007 à 11:52:28
adept a écrit : Bonjour,
|
voila de quoi commencer
Marsh Posté le 30-10-2007 à 12:20:09
Perso, je ne vois AUCUNE différence entre sheets("truc" ).select et sheets("truc" ).activate
D'ailleurs, il y a plusieurs façons d'appeller une feuille, soit pas son nom comme tu le fais, soit par son index, du coup, par défaut, sheets("Feuil1" ) = sheets(1)
En effet, ton code plante si on se met sur la feuille 2 pour la simple et bonne raison qu'il tente de la renommer en "Feuil1" et qu'elle est déjà existante dans le classeur
un Range, c'est un objet, tu coup, ton affectation, tu la fais en faisant un "set"
ex : set position = Cells.find(...)
T'es sur la bonne voie
Marsh Posté le 26-10-2007 à 18:16:18
Bonjour à tous,
Je débute en VBA, et Je souhaiterais avoir de l'aide sur la macro
ci-dessous:
Je me propose, à partir d'une liste Excel de noms
(récupérée depuis une requête brute depuis internet)
de sélectionner les lignes qui appartiennent à un critère donné.
Ces lignes seront stockées dans un onglet de sélection
On va réitérer cette recherche
jusqu'à temps qu'on ait tapé '*' pour tout arrêter.
Mais au deuxième critère rentré
la macro s'arrête:
« Erreur d'exécution '91':
Variable objet ou variable de bloc With non définie »
et je ne vois vraiment pas pourquoi.
Voici ma macro:
qui peut m'aider ?
D'avance merci