Bonjour,
J'essaie de me dépatouiller avec visual basic afin d'émettre une série de
document dont l'information source est dans l'onglet "flota", et qui concerne
un nombre de lignes variable (une ligne par aéronef, dont le nombre varie
dans l'année). Les informations se situent à partir de la célulle 8 (d'où le
x=x-7 ci-dessous). Je cherche donc à émettre un certificat pour chacun
d'entre eux en rafale. J'ai un autre onglet avec le texte du certificat et
une liste des immatriculations. Si je sélectionne une immatriculation, le
numéro de l'entrée apparaît dans la cellule A1, et je rapatrie l'information
correspondante qui se trouve dans l'onglet "flota" via des formules
(décaler). Les immatriculations se trouvent colonne E dans "flota". J'utilise
donc une boucle, et je voulais que le procesus s'arrête à la dernière ligne
contenant une immatriculation, donc j'incrémente i et prévoit l'arrêt de la
macro quand i = x. Et bien ça ne marche pas, au lieu de s'arrêter, des
centaines de pages s'impriment alors que j'avais placé un 0 ligne 11 pour
faire un essai avec les 3 1ers certificats. J'espère avoir été claire. Merci
de vos lumières. Macro :
Sub certif_RC()
'
'
Sheets("flota").Select
x = ""
x = Columns("e:e").Find(what:=0, lookat:=xlWhole).Row
x = x - 7
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
FFO
Salut çà toi
Si ta boucle ne s'arrète pas c'est que la condition attendue n'est jamais atteinte qui est :
Do Until i = x
i étant égal à 8 au départ de la boucle et à chaque tour augmentant de 1 (i = i + 1) le souci doit venir de x Soit il est supérieur à i et sa valeur n'est pas celle attendue et donc trés importante Soit il est inférieur à i et donc l'égalité indispensable ne sera jamais au rendez vous
Donc tout viens de sa valeur déterminée par la ligne :
x = Columns("e:e").Find(what:=0, lookat:=xlWhole).Row
Mets un point d'arrêt à
Do Until i = x
Exécutes le code et au moment de l'arrêt Portes la souris sur x et vérifies sa valeur
Si elle semble correct porte la souris sur i Vérifies sa valeur Appuies sur F5 pour réaliser un tour de boucle Revérifies la valeur de i répète cette opération jusqu'à l'égalité des 2 variables
Pour ces essais évites d'imprimer en inhibant la ligne :
ActiveWindow.SelectedSheets.PrintOut Copies:=1
Tu mets une cote juste avant ainsi :
'ActiveWindow.SelectedSheets.PrintOut Copies:=1
Tu l'enléveras aprés ces essais
Normalement tu devrais trouver l'origine du disfonctionnement
Tiens moi informé
Pour réaliser un point d'arrêt il faut dans l'éditeur VBA cliquer en regard de la ligne où l'on souhaite ce point (dans la marge grise) Pour l'enlever recliquer au même endroit
Salut çà toi
Si ta boucle ne s'arrète pas c'est que la condition attendue n'est jamais
atteinte qui est :
Do Until i = x
i étant égal à 8 au départ de la boucle et à chaque tour augmentant de 1 (i
= i + 1)
le souci doit venir de x
Soit il est supérieur à i et sa valeur n'est pas celle attendue et donc trés
importante
Soit il est inférieur à i et donc l'égalité indispensable ne sera jamais au
rendez vous
Donc tout viens de sa valeur déterminée par la ligne :
x = Columns("e:e").Find(what:=0, lookat:=xlWhole).Row
Mets un point d'arrêt à
Do Until i = x
Exécutes le code et au moment de l'arrêt
Portes la souris sur x et vérifies sa valeur
Si elle semble correct porte la souris sur i
Vérifies sa valeur
Appuies sur F5 pour réaliser un tour de boucle
Revérifies la valeur de i
répète cette opération jusqu'à l'égalité des 2 variables
Pour ces essais évites d'imprimer en inhibant la ligne :
ActiveWindow.SelectedSheets.PrintOut Copies:=1
Tu mets une cote juste avant ainsi :
'ActiveWindow.SelectedSheets.PrintOut Copies:=1
Tu l'enléveras aprés ces essais
Normalement tu devrais trouver l'origine du disfonctionnement
Tiens moi informé
Pour réaliser un point d'arrêt il faut dans l'éditeur VBA cliquer en regard
de la ligne où l'on souhaite ce point (dans la marge grise)
Pour l'enlever recliquer au même endroit
Si ta boucle ne s'arrète pas c'est que la condition attendue n'est jamais atteinte qui est :
Do Until i = x
i étant égal à 8 au départ de la boucle et à chaque tour augmentant de 1 (i = i + 1) le souci doit venir de x Soit il est supérieur à i et sa valeur n'est pas celle attendue et donc trés importante Soit il est inférieur à i et donc l'égalité indispensable ne sera jamais au rendez vous
Donc tout viens de sa valeur déterminée par la ligne :
x = Columns("e:e").Find(what:=0, lookat:=xlWhole).Row
Mets un point d'arrêt à
Do Until i = x
Exécutes le code et au moment de l'arrêt Portes la souris sur x et vérifies sa valeur
Si elle semble correct porte la souris sur i Vérifies sa valeur Appuies sur F5 pour réaliser un tour de boucle Revérifies la valeur de i répète cette opération jusqu'à l'égalité des 2 variables
Pour ces essais évites d'imprimer en inhibant la ligne :
ActiveWindow.SelectedSheets.PrintOut Copies:=1
Tu mets une cote juste avant ainsi :
'ActiveWindow.SelectedSheets.PrintOut Copies:=1
Tu l'enléveras aprés ces essais
Normalement tu devrais trouver l'origine du disfonctionnement
Tiens moi informé
Pour réaliser un point d'arrêt il faut dans l'éditeur VBA cliquer en regard de la ligne où l'on souhaite ce point (dans la marge grise) Pour l'enlever recliquer au même endroit
Chrystelle
Merci FFO, et très bien vu, c'était tout à fait ça ! En fait comme j'ai plus de 200 lignes ça n'aurait pas dû arriver, mais j'ai voulu faire un test avec les 3 premières lignes, ce qui fait que je me retrouvait au départ avec x=4. Pour plus de sûreté, j'ai remplacé Columns("e:e") par Range("e18:E400"), et je ne recherche non plus 0 mais "", et visiblement ça marche. Encore merci, tu m'as été d'une grande aide. Bon après-midi.
"FFO" a écrit :
Salut çà toi
Si ta boucle ne s'arrète pas c'est que la condition attendue n'est jamais atteinte qui est :
Do Until i = x
i étant égal à 8 au départ de la boucle et à chaque tour augmentant de 1 (i = i + 1) le souci doit venir de x Soit il est supérieur à i et sa valeur n'est pas celle attendue et donc trés importante Soit il est inférieur à i et donc l'égalité indispensable ne sera jamais au rendez vous
Donc tout viens de sa valeur déterminée par la ligne :
x = Columns("e:e").Find(what:=0, lookat:=xlWhole).Row
Mets un point d'arrêt à
Do Until i = x
Exécutes le code et au moment de l'arrêt Portes la souris sur x et vérifies sa valeur
Si elle semble correct porte la souris sur i Vérifies sa valeur Appuies sur F5 pour réaliser un tour de boucle Revérifies la valeur de i répète cette opération jusqu'à l'égalité des 2 variables
Pour ces essais évites d'imprimer en inhibant la ligne :
ActiveWindow.SelectedSheets.PrintOut Copies:=1
Tu mets une cote juste avant ainsi :
'ActiveWindow.SelectedSheets.PrintOut Copies:=1
Tu l'enléveras aprés ces essais
Normalement tu devrais trouver l'origine du disfonctionnement
Tiens moi informé
Pour réaliser un point d'arrêt il faut dans l'éditeur VBA cliquer en regard de la ligne où l'on souhaite ce point (dans la marge grise) Pour l'enlever recliquer au même endroit
Merci FFO, et très bien vu, c'était tout à fait ça ! En fait comme j'ai plus
de 200 lignes ça n'aurait pas dû arriver, mais j'ai voulu faire un test avec
les 3 premières lignes, ce qui fait que je me retrouvait au départ avec x=4.
Pour plus de sûreté, j'ai remplacé Columns("e:e") par Range("e18:E400"), et
je ne recherche non plus 0 mais "", et visiblement ça marche. Encore merci,
tu m'as été d'une grande aide.
Bon après-midi.
"FFO" a écrit :
Salut çà toi
Si ta boucle ne s'arrète pas c'est que la condition attendue n'est jamais
atteinte qui est :
Do Until i = x
i étant égal à 8 au départ de la boucle et à chaque tour augmentant de 1 (i
= i + 1)
le souci doit venir de x
Soit il est supérieur à i et sa valeur n'est pas celle attendue et donc trés
importante
Soit il est inférieur à i et donc l'égalité indispensable ne sera jamais au
rendez vous
Donc tout viens de sa valeur déterminée par la ligne :
x = Columns("e:e").Find(what:=0, lookat:=xlWhole).Row
Mets un point d'arrêt à
Do Until i = x
Exécutes le code et au moment de l'arrêt
Portes la souris sur x et vérifies sa valeur
Si elle semble correct porte la souris sur i
Vérifies sa valeur
Appuies sur F5 pour réaliser un tour de boucle
Revérifies la valeur de i
répète cette opération jusqu'à l'égalité des 2 variables
Pour ces essais évites d'imprimer en inhibant la ligne :
ActiveWindow.SelectedSheets.PrintOut Copies:=1
Tu mets une cote juste avant ainsi :
'ActiveWindow.SelectedSheets.PrintOut Copies:=1
Tu l'enléveras aprés ces essais
Normalement tu devrais trouver l'origine du disfonctionnement
Tiens moi informé
Pour réaliser un point d'arrêt il faut dans l'éditeur VBA cliquer en regard
de la ligne où l'on souhaite ce point (dans la marge grise)
Pour l'enlever recliquer au même endroit
Merci FFO, et très bien vu, c'était tout à fait ça ! En fait comme j'ai plus de 200 lignes ça n'aurait pas dû arriver, mais j'ai voulu faire un test avec les 3 premières lignes, ce qui fait que je me retrouvait au départ avec x=4. Pour plus de sûreté, j'ai remplacé Columns("e:e") par Range("e18:E400"), et je ne recherche non plus 0 mais "", et visiblement ça marche. Encore merci, tu m'as été d'une grande aide. Bon après-midi.
"FFO" a écrit :
Salut çà toi
Si ta boucle ne s'arrète pas c'est que la condition attendue n'est jamais atteinte qui est :
Do Until i = x
i étant égal à 8 au départ de la boucle et à chaque tour augmentant de 1 (i = i + 1) le souci doit venir de x Soit il est supérieur à i et sa valeur n'est pas celle attendue et donc trés importante Soit il est inférieur à i et donc l'égalité indispensable ne sera jamais au rendez vous
Donc tout viens de sa valeur déterminée par la ligne :
x = Columns("e:e").Find(what:=0, lookat:=xlWhole).Row
Mets un point d'arrêt à
Do Until i = x
Exécutes le code et au moment de l'arrêt Portes la souris sur x et vérifies sa valeur
Si elle semble correct porte la souris sur i Vérifies sa valeur Appuies sur F5 pour réaliser un tour de boucle Revérifies la valeur de i répète cette opération jusqu'à l'égalité des 2 variables
Pour ces essais évites d'imprimer en inhibant la ligne :
ActiveWindow.SelectedSheets.PrintOut Copies:=1
Tu mets une cote juste avant ainsi :
'ActiveWindow.SelectedSheets.PrintOut Copies:=1
Tu l'enléveras aprés ces essais
Normalement tu devrais trouver l'origine du disfonctionnement
Tiens moi informé
Pour réaliser un point d'arrêt il faut dans l'éditeur VBA cliquer en regard de la ligne où l'on souhaite ce point (dans la marge grise) Pour l'enlever recliquer au même endroit