Pré-régler hauteur de ligne et rendre lignes indissociables
Bonjour à tous,
J’ai une feuille de 64 lignes et 33 colonnes, tenant dans un A4 portrait, dans laquelle j’ai :
- une haut de page fixe de la ligne 1 à 16
- un milieu de page variable de la ligne 17 à 57. Ce que j’entend par variable, c’est aussi bien le nombre de lignes remplies que leur hauteur
- un bas de page fixe de la ligne 58 à 64
Première problème :
Mon milieu de page se compose de cellules fusionnées formant 3 colonnes (B à J / K à T/ U à AH).
Ces cellules se remplissent automatiquement selon le nombre de checkbox cochée dans un userform. Etant donné que les cellules sont fusionnées, je ne peux pas ajuster la hauteur de ligne automatiquement.
J’aurai donc besoin d’un code VBA me permettant de definir que si telle checkbox est cochée, la hauteur de ligne de destination doit être de tant.
Actuellement, mon code est :
Cpt = 17
If checkbox1.Value = True Then
Range("B" & Cpt) = "xxxxxxxxxxxxx"
Range("K" & Cpt) = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
Range("U" & Cpt) = "xxxxxxxxxxxxxxxxxxxxx"
Cpt = Cpt + 2
End If
If checkbox2.Value = True Then
Range("B" & Cpt) = "yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy"
Range("K" & Cpt) = "yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy "
Range("U" & Cpt) = "yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy"
Cpt = Cpt + 2
End If
Et ainsi de suite....
Deuxieme problème
Selon le nombre de checkbox cochées, mon bas de page (ligne 58 à 64) peut se retrouver sur une deuxième page, ce qui n’est pas dérangeant. Par contre, il est possible qu’il se retrouve en 2 parties, du genre les lignes 58/59/60 en bas de la premiere page et les lignes 61/62/63/64 en haut de la deuxieme page.
Je souhaiterais donc que les lignes 58 à 64 soient indissociables, en gros qu’à partir du moment ou la ligne 64 se retrouve sur la 2ème page, les lignes 58 à 63 aussi.
Merci beaucoup !
Bonjour,
Les cellules fusionnées sont à proscrire le plus possible.
Défusionne et utilise 'centrer sur plusieurs colonnes' dans le format de cellule 'alignement horizontal'.
eric
Bonjour, merci de ta réponse.
Je sais que c'est à proscrire, mais ce fichier doit pouvoir etre complété manuellement si besoin par des utilisateurs pas très doué informatiquement, donc le fusionnage limite les erreurs de mise en page.
Votre solution aurait pu me convenir, mais le texte doit être aligné à gauche et la fonction "gauche sur plusieurs colonnes" n'a pas l'air d’exister.
Re,
1) fixer la hauteur d'une ligne en points :
Rows(17).RowHeight = 25.5
2)
Dim pb As HPageBreak
With Worksheets("Feuil1")
For Each pb In .HPageBreaks
If pb.Location.Row >= 58 And pb.Location.Row <= 64 Then
.HPageBreaks.Add Before:=[A58]
Exit For
End If
Next
End Witheric
Merci Eric,
pour le premier problème, j'avais penser au code que tu m'as donné, mais le problème est que selon les checkbox cochées, le numéro de ligne correspondant à la hauteur à régler est aléatoire, donc il n'est pas possible pour chaque élément de donner un numéro de ligne préci.
pour le deuxieme probleme, le code ne résout rien, j'ai toujours mon ensemble de ligne scindé.
Re,
le problème est que selon les checkbox cochées, le numéro de ligne correspondant à la hauteur à régler est aléatoire
Dans
Range("B" & Cpt) = "xxxxxxxxxxxxx"il me semble que tu connais la ligne non ?
pour le deuxieme probleme, le code ne résout rien, j'ai toujours mon ensemble de ligne scindé.
Ca m'étonne, à moins que tu n'aies ajouté toi-même un saut de page manuel dans ces lignes...
Le code regarde si tu as un saut de page automatique dans ces lignes, si oui il en insère un au-dessus. Les suivants se trouvent décalés d'autant.
Ou bien les lignes 58:64 ne rentrent pas dans une page.
Dépose un fichier exemple pour voir.
eric
Bonjour Eric,
j'ai ré-essayer ton code pour le saut de page, et effectivement, il marche très bien, j'avais du faire une erreur à la première tentative.
Concernant le premier problème, je ne connais pas ma ligne de destination à l'avance vu que j'utilise un compteur (la colonne oui), il me faudrait donc le code de la ligne comme tu me l'as donné mais pour une ligne aléatoire, comme ça par exemple
Cpt = 17
If checkbox1.Value = True Then
Range("B" & Cpt) = "xxxxxxxxxxxxx"
Range("K" & Cpt) = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
Range("U" & Cpt) = "xxxxxxxxxxxxxxxxxxxxx"
Rows(???).RowHeight = 25.5
Cpt = Cpt + 2
End If
If checkbox2.Value = True Then
Range("B" & Cpt) = "yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy"
Range("K" & Cpt) = "yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy "
Range("U" & Cpt) = "yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy"
Rows(???).RowHeight = 50
Cpt = Cpt + 2
End If
Je préfère de pas envoyer le fichier pour des raisons de confidentialité, mais si c'est vraiment nécessaire, je m'arrangerais.
Merci.
Bonjour,
tu connais ta ligne puisque tu écris dedans :
Cpt = 17
If checkbox1.Value = True Then
Range("B" & Cpt) = "xxxxxxxxxxxxx"
Range("K" & Cpt) = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
Range("U" & Cpt) = "xxxxxxxxxxxxxxxxxxxxx"
Rows(???).RowHeight = 25.5Ta ligne est dansq cpt donc :
Rows(cpt).RowHeight = 25.5
eric
Merci Eric,
c'était évident mais je n'ai pas encore assez de logique VBA!