Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

macro pour émission simultanée de documents

2 réponses
Avatar
Chrystelle
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

i = 8
Do Until i = x
Sheets("flota").Select

reg = i - 7
Sheets("cert abordo esp").Select
Cells(1, 1) = reg
reg = ""
ActiveWindow.SelectedSheets.PrintOut Copies:=1
Cells(1, 1) = ""

i = i + 1
Loop
End Sub

2 réponses

Avatar
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
Avatar
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