Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Fusionner, défusionner avec bouton dans formulaire

  • Initiateur de la discussion Initiateur de la discussion a26
  • Date de début Date de début

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 !

a26

XLDnaute Occasionnel
Bonjour,
Depuis quelques temps j'utilise l'excellent fichier de JB Form Choix Couleurs pour établir un planning. Pour mon utilisation j'aimerai qu'il soit complété par des boutons pouvant fusionner ou défusionner des cellules.
Merci à tous ceux qui pourront me guider ou me trouver une solution que je n'ai pas réussi à mettre en oeuvre car je pense qu'il faut dans ce cas connaître assez bien les modules de classe.
 

Pièces jointes

Re : Fusionner, défusionner avec bouton dans formulaire

Bonjour.

Je propose de ne gérer que les 7 1er boutons avec le module de classe. Dans celui ci :
VB:
Public WithEvents GrBoutons As Msforms.CommandButton
Private Sub GrBoutons_Click()
Dim Plage As Range
Set Plage = Selection
If Plage.Count > 1 Then Plage.Merge
Plage.Interior.Color = GrBoutons.BackColor
Plage.Font.Color = GrBoutons.ForeColor
Plage.Value = GrBoutons.Caption
Plage.Orientation = -90 * (Plage.Rows.Count > Plage.Columns.Count)
End Sub
Dans l'Userform :
VB:
Dim Btn(1 To 10) As New ClasseBoutons
Private Sub UserForm_Initialize()
  For i = 1 To 7
   Me("CommandButton" & i).BackColor = Sheets("couleurs").Cells(i, 1).Interior.Color
   Me("CommandButton" & i).ForeColor = Sheets("couleurs").Cells(i, 1).Font.Color
   Me("CommandButton" & i).Caption = Sheets("couleurs").Cells(i, 1)
   Set Btn(i).GrBoutons = Me("commandbutton" & i)
  Next i
End Sub
Private Sub CommandButton8_Click()
Dim Plage As Range, L&, C&
Set Plage = Selection
Application.ScreenUpdating = False
Plage.ClearContents: Plage.UnMerge
Plage.Interior.Color = &HCCFFCC
Set Plage = ActiveSheet.[B6:E13]
For L = 1 To 2
   For C = 1 To 5
      Plage.Borders.Weight = xlThick
      Plage.Borders(xlInsideHorizontal).Weight = xlThin
      Plage.Borders(xlInsideVertical).Weight = xlThin
      Set Plage = Plage.Offset(0, 4): Next C
   Set Plage = Plage.Offset(9, -20): Next L
End Sub
Notez que je choisirais vraissemblablement d'autres couleurs, ayant à peu près toutes la même luminosité mais différentes du fond, peut être plus sombre.
 
Dernière édition:
Re : Fusionner, défusionner avec bouton dans formulaire

Merci Dranreb, c'est tout à fait ce que je désirais.
Puis-je te poser encore une question ? Comment changer la couleur de fond que tu as délibérément mis en vert pâle si je veux différencier plusieurs plannings. Es-ce que l'on est limité à 7 couleurs, donc 7 boutons ou y a-t-il une possibilité d'avoir plus de choix dans les couleurs.
 
Re : Fusionner, défusionner avec bouton dans formulaire

Non, on n'est pas limité à 7 couleurs, simplement il fallait un bouton pour remettre la couleur du fond, qui était exactement de ce vert pâle à l'ouverture du classeur converti en .xls pour ma version d'Excel, alors j'ai pris le 8ième bouton pour ça. On pourrait d'ailleurs prendre la couleur du bouton au fond: Remplacer &HCCFFCC par CommandButton8.BackColor
Vous pouvez aussi remettre dans l'UserForm_Initialize For i = 1 To 8 au lieu de 7 mais alors il faut ajouter un test à la dernière instruction de la boucle : If i < 8 Then Set Btn(i).GrBoutons = Me("commandbutton" & i) parce que la procédure à exécuter pour ce bouton n'est pas celle du module de classe.
 
Re : Fusionner, défusionner avec bouton dans formulaire

Merci pour ces explications qui m'ont permis de mieux comprendre même si je bute encore sur l'ajout de boutons couleurs. Pour la couleur de fond j'ai compris la manip, le code pour l'ajout de boutons couleurs c'est encore un peu compliqué pour moi.
Bon week-end du 1er Mai
 
Re : Fusionner, défusionner avec bouton dans formulaire

Bonjour.

Vous n'allez pas écrire un code pour ajoutez des boutons dans l'Userform ? À quoi ça servirait ? Prévoyez en un nombre suffisant dans la fenêtre de conception de l'UF.
 
Re : Fusionner, défusionner avec bouton dans formulaire

Bonjour Dranreb,
et bonjour à tous,
Après quelques manipulations de code, je n'ai pas réussi à comprendre comment fonctionnait le code au cas ou je voudrai modifier la grille sans perdre la qualité de l'effacement qui permet de retrouver la grille d'origine.
Exemple : je veux 4 semaines ou plus. Je veux changer l'organisation des jours et donc modifier la grille entre traits fins et traits plus gras. Merci de me donner la procédure à suivre si possible avec des commentaires au code.
Cordialement,
a26
 

Pièces jointes

Dernière édition:
Re : Fusionner, défusionner avec bouton dans formulaire

Bonjour

Je suis apparamment passé à coté de votre dernier poste, désolé.

Remplacez peut être les valeurs de constantes par des noms de constantes plus explicites :
VB:
Private Sub CommandButton8_Click()
Const NbrPaquetsVertic = 3, NbrLignesParPaquet = 8, Interligne = 1, _
   NbrJoursHorz = 5, NbrCellsParJour = 4
Dim Plage As Range, L&, C&
Set Plage = Selection
Application.ScreenUpdating = False
Plage.ClearContents: Plage.UnMerge
Plage.Interior.Color = CommandButton8.BackColor
Set Plage = ActiveSheet.[B6].Resize(NbrLignesParPaquet, NbrCellsParJour)
For L = 1 To NbrPaquetsVertic
   For C = 1 To NbrJoursHorz
      Plage.Borders.Weight = xlThick
      Plage.Borders(xlInsideHorizontal).Weight = xlThin
      Plage.Borders(xlInsideVertical).Weight = xlThin
      Set Plage = Plage.Offset(0, NbrCellsParJour): Next C
   Set Plage = Plage.Offset(NbrLignesParPaquet + Interligne, -NbrJoursHorz * NbrCellsParJour): Next L
End Sub

Edit: J'ai modifié en prenant comme NbrLignesParPaquet uniquement le nombre de lignes contenues dans le cadre et ajouté une constante Interligne = 1.
 
Dernière édition:
Re : Fusionner, défusionner avec bouton dans formulaire

Merci pour la réponse. Excuse-moi de ne pas tout comprendre au niveau du vocabulaire par ex : NbrPaquetsVertic ? Serait-il trop te demander de me mettre les commentaires pour cette ligne et comprendre aussi comment tu fais pour obtenir des traits gras ou fins.
Cordialement,
a26
 
Re : Fusionner, défusionner avec bouton dans formulaire

J'ai pourtant mis des noms aussi clairs que possible quitte à ce qu'ils soient long ! NbrPaquetVertic: Nombre de paquets à traiter dans le sens vertical, NbrLignesParPaquet: Nombre de lignes (intérieures) par paquet, Interligne: Nombre de lignes entre chaque paquet, NbrJoursHorz: Nombre de paquets dans le sens horizontal en fait, NbrCellsParJour: Nombre de cellules horizontal par paquet.
Peut être est-ce le mot Paquet qui vous gène ? je ne savais pas comment désigner autrement dans le sens vertical ce groupe de cellules muni de bordures internes fines et encadré d'une bordure épaisse.

L'ensemble des bordures est désignées par Plage.Borders, les internes seule par Plage.Borders(xlInsideHorizontal) et Plage.Borders(xlInsideVertical). On les met donc toutes en gras (xlThick) puis on corrige les internes en fin (xlThin). Ça ne retouche pas les cellules fusionnées.
 
Dernière édition:
Re : Fusionner, défusionner avec bouton dans formulaire

Tu m'as fait un excellent travail, je te remercie. Pour un futur ou je pourrai me rendre utile moi aussi sur le forum, je demande souvent des explications qui pour un initié sont peut-être évidentes. Après plusieurs manip j'ai compris son fonctionnement , mais j'ai toujours du mal encore avec les constantes ou les variables comme ici Dim Plage As Range, L&, C&
Set Plage = Selection. Je n'ai pas réussi encore à créer une macro de ce type.
Merci encore pour ce résultat et tes réponses claires.
Cordialement,
a26
 
- 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
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…