Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Word > VBA Word
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 01/10/2007, 22h38   #1
Candidat au titre de Membre du Club
 
Inscription : avril 2007
Messages : 39
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 39
Points : 12
Points : 12
Par défaut Do While et nombre de pages pas mis à jour

Je voudrais faire une boucle qui ajoute des retours chariot jusqu'à la fin de la page. J'ai fait ceci :
Code :
1
2
3
4
5
6
7
 
Dim Plage As Range
Do While ActiveDocument.BuiltInDocumentProperties(wdPropertyPages) = 1
Set Plage = ActiveDocument.Range(Start:=ActiveDocument.Range.End - 1, End:=ActiveDocument.Range.End - 1)
Plage = Chr(10)
MsgBox ActiveDocument.BuiltInDocumentProperties(wdPropertyPages)
Loop
Mais ça ne marche pas, ça boucle à l'infini en mettant qu'il n'y a que 1 page, alors que si j'arrête la boucle, il y a déjà bcp plus de 2 pages

Pourtant, "ActiveDocument.BuiltInDocumentProperties(wdPropertyPages)", me donne bien le bon nombre de pages si je met les retour à la main par exemple ou dans d'autre partie du programme...
Une idée ?

EDIT : Il faut en fait repaginer le document pour mettre à jour les numeros de pages
Code :
ActiveDocument.Repaginate
Acivurt est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/10/2007, 06h43   #2
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 354
Détails du profil
Informations personnelles :
Nom : Homme Olivier Lebeau
Âge : 47
Localisation : Belgique

Informations professionnelles :
Activité : Contrôleur d'industrie
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : février 2006
Messages : 17 354
Points : 29 270
Points : 29 270
Ta boucle tourne sans arrêt, parce que tu n'as pas d'incrémentation.

Sans incrémentation, c'est avec une boucle For Next quand tu ne détermines pas de pas.
__________________
J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
Débutez en VBA

Mes articles


Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !
Heureux-oli est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/10/2007, 09h59   #3
Candidat au titre de Membre du Club
 
Inscription : avril 2007
Messages : 39
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 39
Points : 12
Points : 12
Heuuu ... Si ça marche justement (j'ai fait un edit et mis résolu ), c'était juste qu'il fallait mettre à jour le nombre de page dans la boucle comme ceci :
Code :
1
2
3
4
5
Do While ActiveDocument.BuiltInDocumentProperties(wdPropertyPages) = 1
    Set Plage = ActiveDocument.Range(Start:=ActiveDocument.Range.End - 1, End:=ActiveDocument.Range.End - 1)
    Plage = Chr(11)
    ActiveDocument.Repaginate
Loop
En effet, je n'ai pas d'incrémentation, mais la boucle s'arrete bien quand le nombre de passage à la ligne est assez important pour déborder sur la page 2.

P.S : Je ne comprends pas pourquoi une boucle for Next serait plus approprié vu que ce n'est pas un compteur que je veux : je ne sais sais pas combien de retours à la ligne il me faut pour déborder sur une autre page, je ne sais donc pas le nombre d'itération à effectuer, while me semble plus adapté, non ?
Acivurt est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/10/2007, 10h17   #4
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 354
Détails du profil
Informations personnelles :
Nom : Homme Olivier Lebeau
Âge : 47
Localisation : Belgique

Informations professionnelles :
Activité : Contrôleur d'industrie
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : février 2006
Messages : 17 354
Points : 29 270
Points : 29 270
Citation:
Envoyé par Acivurt Voir le message
Heuuu ... Si ça marche justement (j'ai fait un edit et mis résolu ), c'était juste qu'il fallait mettre à jour le nombre de page dans la boucle comme ceci :
Code :
1
2
3
4
5
Do While ActiveDocument.BuiltInDocumentProperties(wdPropertyPages) = 1
    Set Plage = ActiveDocument.Range(Start:=ActiveDocument.Range.End - 1, End:=ActiveDocument.Range.End - 1)
    Plage = Chr(11)
    ActiveDocument.Repaginate
Loop
En effet, je n'ai pas d'incrémentation, mais la boucle s'arrete bien quand le nombre de passage à la ligne est assez important pour déborder sur la page 2.

P.S : Je ne comprends pas pourquoi une boucle for Next serait plus approprié vu que ce n'est pas un compteur que je veux : je ne sais sais pas combien de retours à la ligne il me faut pour déborder sur une autre page, je ne sais donc pas le nombre d'itération à effectuer, while me semble plus adapté, non ?
Je n'ai pas dit qu'une boucle For Next serait mieux appropriée, juste que dans une boucle For Next, il n'est pas nécessaire d'avoir un incrément.

Désolé, je pensais que le résolu était accidentel !
__________________
J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
Débutez en VBA

Mes articles


Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !
Heureux-oli est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/10/2007, 10h26   #5
Candidat au titre de Membre du Club
 
Inscription : avril 2007
Messages : 39
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 39
Points : 12
Points : 12
Citation:
Envoyé par Heureux-oli Voir le message
Je n'ai pas dit qu'une boucle For Next serait mieux appropriée, juste que dans une boucle For Next, il n'est pas nécessaire d'avoir un incrément.

Désolé, je pensais que le résolu était accidentel !
Pas de souci
C'est un peu HS vu que mon problème est résolu, mais je ne comprends pas pourquoi une For Next n'a pas besoin d'increment ? Justement le Next est une incrémentation non ?
Et dans Do {While/Until} il faut un incrément obligatoirement ? La aussi je suis un peu dépassé ...
Tu pense que je dois mettre un For Next dans mon cas ? Comment l'adpater je vois pas trop comment remplacer mon While par un For
Acivurt est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/10/2007, 10h38   #6
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 354
Détails du profil
Informations personnelles :
Nom : Homme Olivier Lebeau
Âge : 47
Localisation : Belgique

Informations professionnelles :
Activité : Contrôleur d'industrie
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : février 2006
Messages : 17 354
Points : 29 270
Points : 29 270
Code :
1
2
3
4
5
6
7
8
9
 
Sub boucle()
Dim x, y As Integer
y = 10
For x = 1 To y
Debug.Print x
Next x
 
End Sub
Essaie ce code, tu verras qu'il ne faut pas d'incrémentation.

Si tu ajoutes
Code :
1
2
3
4
5
6
7
8
Sub boucle()
Dim x, y As Integer
y = 10
For x = 1 To y step 2
Debug.Print x
Next x
 
End Sub
Avec le pas de 2 tu auras une incrémentation de 2 par boucle.
__________________
J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
Débutez en VBA

Mes articles


Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !
Heureux-oli est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/10/2007, 10h45   #7
Candidat au titre de Membre du Club
 
Inscription : avril 2007
Messages : 39
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 39
Points : 12
Points : 12
Citation:
Envoyé par Heureux-oli Voir le message
Code :
1
2
3
4
5
6
7
8
9
 
Sub boucle()
Dim x, y As Integer
y = 10
For x = 1 To y
Debug.Print x
Next x
 
End Sub
Essaie ce code, tu verras qu'il ne faut pas d'incrémentation.

Si tu ajoutes
Code :
1
2
3
4
5
6
7
8
Sub boucle()
Dim x, y As Integer
y = 10
For x = 1 To y step 2
Debug.Print x
Next x
 
End Sub
Avec le pas de 2 tu auras une incrémentation de 2 par boucle.
J'ai bien saisi le notion de For Next, seulement comment l'utiliser quand on ne connais pas la valeur de y comme dans mon cas ? Il peut en avoir 3 comme 15 deq sautq de ligne avant de déborder sur la page.
Acivurt est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/10/2007, 14h10   #8
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 354
Détails du profil
Informations personnelles :
Nom : Homme Olivier Lebeau
Âge : 47
Localisation : Belgique

Informations professionnelles :
Activité : Contrôleur d'industrie
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : février 2006
Messages : 17 354
Points : 29 270
Points : 29 270
C'était un exemple, je n'ai jamais dit que tu devais l'utiliser.
__________________
J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
Débutez en VBA

Mes articles


Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !
Heureux-oli est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 21h25.


 
 
 
 
Partenaires

Hébergement Web