XL 2016 Lignes vba "Saut de page" qui empêchent l'ouverture des Userform sur toutes les feuilles

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Webperegrino

XLDnaute Accro
Supporter XLD
Bonjour Le Forum,

Des « Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean) » placés sur plusieurs feuilles de mon application me permettent sans problème d’ouvrir des Userform pour réaliser un choix à inscrire dans une cellule. Cela fonctionne.

Dans une feuille, reproduite ici en simulation simplifiée, cette action sur la cellule [B2] y entre un choix de date pour remplir la colonne B et la colonne C de valeurs correspondant à ce jour. Cela fonctionne.

Dans cette feuille j’ai créé, après une semaine de pérégrination sur le Web dans tous les sens, les lignes VBA permettant une détection de la frontière inférieure du pavé contenant du texte commençant par « CCCC … » afin d’y placer un saut de page. Cela fonctionne aussi.

Toutefois ça ne fonctionne pas parfaitement, en effet :

  • Tant que je n’active pas le bouton « 2 colonnes et SAUT », l’Userform sur la cellule [B2] - les autres Userform des autres feuilles, aussi d’ailleurs, sont actives ; je peux ainsi faire mes choix pour placement dans les cellules concernées, du mot, de la date ou du nombre proposés dans les listes de ces Userform.
  • Dès que la commande « 2 colonnes et SAUT » a été sollicitée pour placer le saut de page, les « Clics droits » sur toutes les cellules des feuilles de l’application appelant l’ouverture d’un Userform, sont inactives.
  • Je suis alors obligé d’enregistrer, de fermer et de rouvrir l’application, pour avoir accès à mes ouvertures d’Userform TANT QUE le bouton « colonnes & SAUT » ne sera pas sollicité. Après action pour placer le saut de page après « CCCC » inférieur de pavé en colonne B, j’ai à nouveau ce problème.
Pouvez-vous jeter un coup d’œil à mes lignes VBA, corriger ce qui est superflu, et m’indiquer ce que j’ai oublié d’ajouter pour que cette macro laisse l’application fonctionner pour les autres tâches ?

Merci,

Webperegrino
 

Pièces jointes

Solution
Bonsoir Webperegrino, TooFatBoy,

Oui il n'y a pas de Worksheet_BeforeRightClick, je me contente de mettre de l'ordre dans la macro du bouton :
VB:
Private Sub CommandButton1_Click() 'essai de pagination à 2 colonnes
Dim der&, x&
ActiveSheet.ResetAllPageBreaks 'on enlève les 'vieux sauts de page'
der = Range("B" & Rows.Count).End(xlUp).Row: If der < 4 Then der = 4
Range("A4:A" & der).Replace "-", "", xlWhole
Range("C4:C" & der).Borders(xlEdgeRight).Weight = xlThin '????
ActiveWindow.View = xlPageBreakPreview 'placer les nouveaux sauts de page
With ActiveSheet.PageSetup
    .PrintTitleRows = "$2:$3"
    .PrintArea = "$B$2:$C" & der
    .Zoom = False
    .FitToPagesWide = 1
End With
For x = 4 To der 'on place le saut de page
    If...
Heello,

Dans ton classeur il n'y a aucun UserForm, et aucune Worksheet_BeforeRightClick. Est-ce normal ?



Enrichi (BBcode):
If der < 4 Then derlg = 4
🤪



Comme tu peux le voir dans la pièce jointe, le clic-droit reste fonctionnel après le lancement de la macro par le bouton.
 

Pièces jointes

Dernière édition:
Bonsoir Webperegrino, TooFatBoy,

Oui il n'y a pas de Worksheet_BeforeRightClick, je me contente de mettre de l'ordre dans la macro du bouton :
VB:
Private Sub CommandButton1_Click() 'essai de pagination à 2 colonnes
Dim der&, x&
ActiveSheet.ResetAllPageBreaks 'on enlève les 'vieux sauts de page'
der = Range("B" & Rows.Count).End(xlUp).Row: If der < 4 Then der = 4
Range("A4:A" & der).Replace "-", "", xlWhole
Range("C4:C" & der).Borders(xlEdgeRight).Weight = xlThin '????
ActiveWindow.View = xlPageBreakPreview 'placer les nouveaux sauts de page
With ActiveSheet.PageSetup
    .PrintTitleRows = "$2:$3"
    .PrintArea = "$B$2:$C" & der
    .Zoom = False
    .FitToPagesWide = 1
End With
For x = 4 To der 'on place le saut de page
    If Left(Range("B" & x), 4) = "CCCC" And Left(Range("B" & x + 1), 4) <> "CCCC" Then
        Range("A" & x + 1) = "-"
        Set ActiveSheet.HPageBreaks(1).Location = Range("B" & x + 1)
        Exit For
    End If
Next x
Application.Goto [A1], Scroll:=True
End Sub
A+
 

Pièces jointes

Le Forum,
Bonsoir TooFatBoy,
Bonsoir Job75,
Merci à vous deux, vos propositions ont été appliquées et cela fonctionne parfaitement maintenant.
Tous mes "Worksheet_BeforeRightClick" ont retrouvé l'activité normale, sur toutes les feuilles où je dois ouvrir un Userform pour choix de valeur à intégrer dans une cellule.

Oui, je n'ai pas reporté d'UserForm attaché à la cellule [B2] pour ne pas alourdir le fichier.
L'userform en question agit avant que la macro de mise en place de saut entre en jeu dans la procédure, et n'agissait plus après la mise en place du saut de page.

Pour ce qui est de la ligne ...
VB:
Range("C4:C" & der).Borders(xlEdgeRight).Weight = xlThin '????
... elle m'est nécessaire quand, en passant du jeu colonnes B-C en jeu colonnes B+C+D avec une autre commande vba, je veux modifier la bordure droite des cellules colonne B
...pour imprimer, non plus sur colonne A + colonne B, mais trois colonnes A+B+C, par exemple [B2:C19] en page 1 et [C2:C19] en page 3.
Alors la droite de la colonne B perd son trait ; ainsi mon épouse peut colle ces deux feuilles l'une à côté de l'autre dans un grand cahier pour avoir une longue place derrière chaque donnée des cellules de la colonne A.
Deux pages [B2:C19] et [B20:C...] alors bord fin en bordure droite de colonne B
Quatre pages [B2:C19] et [B20:C...] et [C2:C19] puis [C20:C...] alors bord droit de colonne B retiré
Après l'impression papier, mon épouse écrira ainsi dans C6 en page n° 1 gauche de son cahier et continuera d'écrire en D6 en page n° 3 droite de son cahier (idem pour page 2 collée près de page 4.
C'est parfait Jo75 et TooFatBoy,
Merci beaucoup,
Cordialement,
Webperegrino
 
Bonjour Webperegrino, le forum,

Vos explications sur les bordures ne sont pas claires, perso j'aurais simplement remplacé :
VB:
Range("C4:C" & der).Borders(xlEdgeRight).Weight = xlThin '????
par :
VB:
Range("B4:C" & der).Borders.Weight = xlThin
A+
 
Vos explications sur les bordures ne sont pas claires
Effectivement, l'explication est incompréhensible parce qu'il y a mélange au niveau des colonnes : un coup c'est B:C et B : D puis ça devient A:B et A:C, et pareil pour la bordure de droite qui est un coup sur C puis sur B.

Mais j'imagine que les colonnes sont en fait les mêmes mais ici nommées un coup par rapport à la feuille Excel, puis par rapport à la feuille papier. La feuille papier ne comprenant pas la colonne A de la feuille Excel, la colonne B de la feuille Excel devient la colonne A de la feuille papier...🤪 🤣

Enfin... pas tout à fait sûr que ce soit vraiment la bonne raison du manque de clarté de #4. 😁



pour imprimer, non plus sur colonne A + colonne B, mais trois colonnes A+B+C, par exemple [B2:C19] en page 1 et [C2:C19] en page 3.
Alors la droite de la colonne B perd son trait
Et c'est pour cela que la ligne de code VBA de ta macro met un trait fin sur le bord droit de la colonne C ???

Je crois que tu compliques grandement les choses dans tes explications. 😉
 
Dernière édition:
Le Forum,
Bonsoir TooFatBoy,
Bonsoir Job75,
Excusez-moi pour le manque de clarté dans mes explications trop longues...

Mon objectif était d'utiliser un bouton d'appel de macro pour afficher sur une page 1 la colonne B et la colonne C (avec un trait visible à droite de la colonne B. (c'est Aperçu page 1 si 2 colonnes B·C.pdf) où on voit que la frontière C a un trait vertical... dans son cahier n° 1. Page 1 collée à gauche, et page 2 collée en face à droite.

.... et pour son deuxième cahier, et d'utiliser un autre bouton qui afficherait B et C sur la page 1 et D sur la page 3 à l'impression des feuilles que mon épouse collerait dans son cahier, partie gauche pour la page 1, partie droite pour la page 3. ((c'est Aperçu page 1 si colonnes B·C·D.pdf et Aperçu page 3 si colonnes B·C·D.pdf) où on voit que la frontière C-D n'a pas de trait vertical.
Page 1 collée à gauche, et page 3 collée en face à droite et, page tournée dans le cahier collage de page imprimée n° 3 à gauche, page imprimée n° 4 collée en face à droite, et ainsi de suite pour les jours suivants.

Bonne soirée,
Webperegrino
 

Pièces jointes

Dernière édition:
Pardon, mais depuis le début tu parles de page 1 et page 3. Il n'y a pas de page 2 ?

[edit] Je crois que j'ai compris : la page 3 c'est en fait la page 2, mais en impression simple face ça devient évidemment la page 3 qui est sur la feuille 2. [/edit]



Toujours pas de TS dans tes classeurs. Tu as peur que ça te simplifie trop le travail ? 😅
 
Dernière édition:
Le Forum,
TooFatBoy,

Cas n ° 1 :
Dans l'impression à colonne B + C :
- la page 2 est la suite verticale des cellules de la colonne B et de la colonne C, car à chaque fois - chaque jour - verticalement il n'y a qu'un saut de page.
- il n'y a pas de saut de colonne vertical sur la feuille excel.
- trait à droite de colonne C (bordure fine)

Cas n° 2 :
Dans l'impression à colonnes B + C + D :
- la page 1 contient le haut des colonnes B + C
- la page 3 contient le haut de la colonne D
- puis toujours avec saut de page horizontal sur la feuille excel, page 3 donne le bas de colonnes B + C
- et page 4, le bas-suite de colonne D.
- Là aussi je me débrouille pour n'avoir que deux pages en vertical, et...
- nouveau : un saut vertical entre colonne C et colonne D, d'où 4 pages.
- pas de trait à droite de colonne C et pas de trait à gauche de colonne D (pas de bordure)

Webperegrino
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
1
Affichages
1 K
M
Réponses
3
Affichages
2 K
M
B
Réponses
17
Affichages
3 K
benoitoleron
B
F
Réponses
5
Affichages
2 K
Fariri
F
Retour