XL 2016 Passer à la page suivante automatiquement

bennp

XLDnaute Occasionnel
Bonjour,

j'ai un tableau créé en macro, et parfois il se retrouve à la jonction de 2 pages. Quelqu'un aurait une idée pour déplacer automatiquement le tableau à la page suivante ?

Merci
 

bennp

XLDnaute Occasionnel
très bien merci pour l'info
et du coup si j'ai plusieurs fonction à faire pour les mêmes cellules je fais comme ça :

Rng(3, 23).Resize(LTot, 3).HorizontalAlignment = xlCenter
Rng(3, 23).Resize(LTot - 2, 3).NumberFormat = "0.00"
ou on peut optimiser le code ?

Merci beaucoup
 

Dranreb

XLDnaute Barbatruc
S'il y a plusieurs propriétés d'une même sous-plage à changer vous pouvez faire :
VB:
With Rng(3, 23).Resize(LTot - 2, 3)
   .NumberFormat = "0.00"
   .HorizontalAlignment = xlRight
   End With
L'utilisation d'une variable Range est déjà une optimisation: plus besoin de chercher la feuille concernée: c'est une propriété de l'objet.
 

bennp

XLDnaute Occasionnel
Bonjour,

J'ai réussi à mettre les noms en majuscule mais pas en gras :
Do: Nom = TS(LS, 1): TR(1, 1) = UCase(Nom)
Range(TS(LS, 1): TR(1, 1)).Font.Bold = True

autre chose pour les bordures j'ai ce code :
End With
With Union(Range(Rng(4, 1), Rng(LTot - 1, 22)), Range(Rng(4, 23), Rng(LTot - 1, 23)), Range(Rng(4, 24), Rng(LTot - 1, 24)), Range(Rng(4, 25), Rng(LTot - 1, 25)), Range(Rng(LTot, 23), Rng(LTot, 25))).BorderAround(ColorIndex:=16)
End With
mais je pense que le Union selectionne tout ensemble alors que je souhaite que chaque plage de cellule ait une bordure

upload_2017-12-31_13-33-16.png


merci et bonne Année !!!
 

Dranreb

XLDnaute Barbatruc
Bonjour.
Le caractère gras ça ne fait plus partie de la valeur. C'est du format de cellule. Donc aussi à la fin :
VB:
   Rng(1, 1).Font.Bold = True
Pour les bordues essayez :
VB:
   Rng.Rows(4).Resize(LTot - 4).BorderAround ColorIndex:=16
   Rng(4, 22).Resize(LTot - 4, 4).Borders(xlInsideVertical).ColorIndex = 16
Bonne année
 

bennp

XLDnaute Occasionnel
autre chose aussi, jai voulu mettre tout ça ensemble mais ça fonctionne pas :

With Rng.Rows(3)
.RowHeight = 30
.Interior.Color = RGB(186, 255, 186)
.VerticalAlignment = xlCenter
'.BorderAround(ColorIndex:=3)
'.Borders.ThemeColor = 2
End With

les .Borders ne fonctionnent pas, j'ai dû refaire un With spécial pour eux
 

Dranreb

XLDnaute Barbatruc
Bonjour et bonne année.
Oui, je cherche aussi toujours pour mettre ces bordures de la façon la plus simple possible.
La méthode .BorderAround devrait marcher tout de même. Toutefois les parenthèses dont vous l'encadrez ne sont pas reconnues comme délimiteurs de la liste de paramètres. Cela est signalé par VBA en ajoutant un espace entre le nom de la méthode et la parenthèse ouvrante.
Pour les bordures intérieures, ben comme ce n'est qu'une ligne il ne reste que les verticales intérieures. Simplement .Borders(xlInsideVertical).ThemeColor = 2 ne marche pas ?
 

bennp

XLDnaute Occasionnel
Oui, sans les parenthèse ça fonctionne ! par contre je n'ai toujours pas réussi à régler la zone d'impression.
je pense qu'il faut modifier cette partie :
Set CelDéb = Cel: Set CelCou = Cel: LgnPgBk = Cel.Row

je n'arrive pas à dire qu'il faut que la zone d'impression commence en A1

merci
 

bennp

XLDnaute Occasionnel
j'ai modifié cette ligne en changeant par Cells(1, 1) :

Wsh.PageSetup.PrintArea = Range(Cells(1, 1), CelCou.Offset(0, NbColMax - 1)).Address

je retouve bien toute la zone d'impression mais du coup mes sauts de page ne sont plus bon ..
 

Dranreb

XLDnaute Barbatruc
Avez vous appliqué ce que j'ai dit au #39 ?
…: LgnPgBk = Cel.Row n'est alors plus bon non plus, c'est LgnPgBk = 1
Mais s'il y a beaucoup de choses avant, le 1er tableau sera systématiquement sur une nouvelle page même s'il reste assez de place sur la dernière. Je ne peux pas savoir quelle valeur il faudrait donner à LgnPgBk au début pour éviter cela.
 

bennp

XLDnaute Occasionnel
Effectivement si je mets 1, le 1er tableau commence à la page suivante, j'ai essayé plusieurs valeurs et en augmentant, on a bien le tableau a la suite mais les sauts de page ne fonctionnent pas.

Je ne vois pas comment trouver la bonne valeur et surtout s'il y en a une...

je joins mon fichier à jour

merci
 

Pièces jointes

  • MiseEnPageBennp (1).xlsm
    2.9 MB · Affichages: 26

Dranreb

XLDnaute Barbatruc
On voit que le dernier saut de page est à la ligne 130

Edit: Il ne faut pas changer la hauteur des lignes d'entête, sinon ça va être impossible à faire.
Parce que la solution se base sur un nombre de lignes qui tiennent sur une page, mais des lignes toutes de la même hauteur, bien évidemment !
 
Dernière édition:

bennp

XLDnaute Occasionnel
ok merci pour l'info, j'ai mis 129 et ça à l'air de fonctionner. C'est compliqué pour moi de réduire la hauteur des entêtes car le texte est trop grand et je dois faire un retour à la ligne. Pour l'instant, ça fonctionne, je vais voir en fonction du nombre de tableaux et de leur taille si ça fonction toujours.

merci
 

bennp

XLDnaute Occasionnel
je voudrais mettre "0" dans la colonne "épaisseur" si la colonne "fruit comporte le nom "pomme"
j'ai testé ça :
If TS(LS, 2) = "pomme" Then TS(LS, 3) = 0: End If
je suppose que c'est plus compliqué que ça ? je n'y arrive pas avec les formule dans excel, j'avais pensé à utiliser les fonctions recherche et decaler.. Une idée ?

merci
 

Discussions similaires

Statistiques des forums

Discussions
311 724
Messages
2 081 937
Membres
101 844
dernier inscrit
pktla