Microsoft 365 Décalage cases à cocher

cecenico

XLDnaute Nouveau
Bonjour tout le monde,
J'avance sur mon fichier et le problème de liens vers les onglets créés fonctionne correctement.
Sauf que j'ai un autre problème maintenant, c'est que lorsque je trie les machines, les cases à cocher ne suive pas malgré que j'ai bien coché l'option pour qu'elles suivent dans las paramètres.

Comme un exemple vaut mieux que 1000 mots, j'ai mit une partie de mon fichier en pièce jointe.

Son fonctionnement est le suivant:
Rentrez le nom d'une machine dans la case "Entrer ici le nom de la machine à ajouter et cliquer sur "ajouter une machine"" puis cliquez sur "Ajouter une machine"
En gros, le nom inscrit est copié et collé dans la cellule A69 (c'est un hasard promis) de la, je récupère son nom pour créer et lier l'onglet créé puis je trie mes machines par ordre alphabétique.
Le soucie est que les cases à cocher ne suivent pas sur le tableau de gauche alors qu'elles le font sur le tableau de droite alors que la même méthode de trie est utilisée.


J'ai pensé supprimer les cases à cocher qui alourdissent mon fichier mais je n'ai pas trouvé d'autre moyen pour afficher 2 infos dans une cellule (périodicité de la maintenance (une lettre qui donne une couleur) et réalisé ou non).

Comme vous allez le voir, je ne suis pas un grand programmeur VB, je pique des bouts de codes que j'adapte. Vous trouverez probablement que je me suis compliqué la vie mais mes maigres connaissances font que je fais ce que je peux
 

Pièces jointes

  • Plan de maintenance forum.xlsm
    733.7 KB · Affichages: 15
Dernière édition:
Solution
Bonjour Cecenico,
Tout d'abord chapeau pour cette patience infinie avec autant de cases à cocher.
je ne sais pas pourquoi vous avez ce phénomène, et encore moins comment le résoudre.

Je vous propose une autre approche. Supprimer toutes ces cases à cocher et les remplacer par ce petit module qui quand on clique sur une cellule dans les deux plages utiles, on l'efface si elle contient quelque chose, sinon on met "une sorte de case à cocher" faite avec un "T" en police "Wingdings 2" :
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
On Error GoTo Fin
    If Target.Count > 1 Then Exit Sub                               ' Si plusieurs cellules cliquées, on sort
    DL1 = [A65500].End(xlUp).Row: DL2 = [BX65500].End(xlUp).Row     '...

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Cecenico,
Tout d'abord chapeau pour cette patience infinie avec autant de cases à cocher.
je ne sais pas pourquoi vous avez ce phénomène, et encore moins comment le résoudre.

Je vous propose une autre approche. Supprimer toutes ces cases à cocher et les remplacer par ce petit module qui quand on clique sur une cellule dans les deux plages utiles, on l'efface si elle contient quelque chose, sinon on met "une sorte de case à cocher" faite avec un "T" en police "Wingdings 2" :
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
On Error GoTo Fin
    If Target.Count > 1 Then Exit Sub                               ' Si plusieurs cellules cliquées, on sort
    DL1 = [A65500].End(xlUp).Row: DL2 = [BX65500].End(xlUp).Row     ' Dernières lignes de Matériel (A et BX)
    If Not Intersect(Target, Range("B9:M" & DL1)) Is Nothing Or _
       Not Intersect(Target, Range("CA4:CA" & DL2)) Is Nothing Then ' Si clic dans une des deux plages
        If Target = "T" Then
            Target = ""                                             ' Si cellule non vide, on l'efface
        Else
            With Target                                             ' Sinon on met le petit symbole.
                .Value = "T"
                .HorizontalAlignment = xlCenter                     ' Centrage horizontal
                .VerticalAlignment = xlBottom                       ' et vertical
                .Font.Name = "Wingdings 2"                          ' Bonne police
                .Font.Size = 12                                     ' Bonne taille
                .Font.Bold = True                                   ' En gras
                .Font.Color = vbBlue                                ' Couleur bleu
            End With
        End If
        Cells(Target.Row, "A").Select
    End If
Fin:
End Sub
J'ai mis en PJ un fichier exemple. Je n'ai pas utilisé votre PJ car il aurait fallu que je supprime toutes les cases à cocher.:mad:
Mais vous pouvez mettre cette macro in extenso dans votre feuille, sans la modifier car elle ne prend en compte que la feuille où la macro est instanciée. :)
 

Pièces jointes

  • EssaiClicCellule.xlsm
    20.7 KB · Affichages: 7

sylvanu

XLDnaute Barbatruc
Supporter XLD
Re, bonjour Phil,
Pour en rajouter une couche, si vous aviez l'idée farfelue par exemple de vouloir savoir combien de matériel est coché en janv-2022, avec vos cases à cocher vous allez galérer.
Alors qu'avec une macro qui agit sur clic, il vous suffit de faire :
VB:
=NB.SI(B9:B69;"T")
 

Deadpool_CC

XLDnaute Accro
Bonjour,
en effet ton fichier est lourd ( j'ai un sacré latence à l'affichage des cases à cochér, sans parler de tes macro qui parfois mette pas mal de temps pour des opération au final assez simple.
Et j'avoue que la gestion d'un déplacement de cases à cocher sera plus compliquer (codé la référence de chaque case et associer ce code à chaque machine/colonne et ensuite repositionner chaque case à cocher dans la bonne cellule ... un calvaire et j'ose pas imaginer le temps de traitement.

Une piste :
Au lieu de mettre juste la lettre de la périodicité, met un codage de 2 caractères ex: A:0 ou T:1 ou M:0
1ere lettre périodicité + séparateur ":" + "0" ou "1" si non fait / fait.

Tu aura juste à revoir un peu ton code VBA : une fonction pour lire la périodicité que tu appellera en + dans ton code et une pour lire le Fait/Non fait. Et le fait /non fait peut être associé un motif de remplissage pour le coté visuel.

sinon mettre 2 colonnes par mois pour séparés périodicité et Fait/nonFait ... mais cela va décaler toutes tes références celulles dans ton code VBA (un peu plus long à corriger donc)
 

cecenico

XLDnaute Nouveau
Bonjour Cecenico,
Tout d'abord chapeau pour cette patience infinie avec autant de cases à cocher.
je ne sais pas pourquoi vous avez ce phénomène, et encore moins comment le résoudre.

Je vous propose une autre approche. Supprimer toutes ces cases à cocher et les remplacer par ce petit module qui quand on clique sur une cellule dans les deux plages utiles, on l'efface si elle contient quelque chose, sinon on met "une sorte de case à cocher" faite avec un "T" en police "Wingdings 2" :
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
On Error GoTo Fin
    If Target.Count > 1 Then Exit Sub                               ' Si plusieurs cellules cliquées, on sort
    DL1 = [A65500].End(xlUp).Row: DL2 = [BX65500].End(xlUp).Row     ' Dernières lignes de Matériel (A et BX)
    If Not Intersect(Target, Range("B9:M" & DL1)) Is Nothing Or _
       Not Intersect(Target, Range("CA4:CA" & DL2)) Is Nothing Then ' Si clic dans une des deux plages
        If Target = "T" Then
            Target = ""                                             ' Si cellule non vide, on l'efface
        Else
            With Target                                             ' Sinon on met le petit symbole.
                .Value = "T"
                .HorizontalAlignment = xlCenter                     ' Centrage horizontal
                .VerticalAlignment = xlBottom                       ' et vertical
                .Font.Name = "Wingdings 2"                          ' Bonne police
                .Font.Size = 12                                     ' Bonne taille
                .Font.Bold = True                                   ' En gras
                .Font.Color = vbBlue                                ' Couleur bleu
            End With
        End If
        Cells(Target.Row, "A").Select
    End If
Fin:
End Sub
J'ai mis en PJ un fichier exemple. Je n'ai pas utilisé votre PJ car il aurait fallu que je supprime toutes les cases à cocher.:mad:
Mais vous pouvez mettre cette macro in extenso dans votre feuille, sans la modifier car elle ne prend en compte que la feuille où la macro est instanciée. :)
Inintéressante cette macro, je met de côté. :)
Le soucis est que ça remplace le contenu de la case par un "T" et supprime donc la périodicité.
Bonjour,
en effet ton fichier est lourd ( j'ai un sacré latence à l'affichage des cases à cochér, sans parler de tes macro qui parfois mette pas mal de temps pour des opération au final assez simple.
Et j'avoue que la gestion d'un déplacement de cases à cocher sera plus compliquer (codé la référence de chaque case et associer ce code à chaque machine/colonne et ensuite repositionner chaque case à cocher dans la bonne cellule ... un calvaire et j'ose pas imaginer le temps de traitement.

Une piste :
Au lieu de mettre juste la lettre de la périodicité, met un codage de 2 caractères ex: A:0 ou T:1 ou M:0
1ere lettre périodicité + séparateur ":" + "0" ou "1" si non fait / fait.

Tu aura juste à revoir un peu ton code VBA : une fonction pour lire la périodicité que tu appellera en + dans ton code et une pour lire le Fait/Non fait. Et le fait /non fait peut être associé un motif de remplissage pour le coté visuel.

sinon mettre 2 colonnes par mois pour séparés périodicité et Fait/nonFait ... mais cela va décaler toutes tes références celulles dans ton code VBA (un peu plus long à corriger donc)
Je crois que je vais simplement ajouter un bouton pour modifier la mise en forme de mes cases et créer une croix avec le système de bordures. ça sera beaucoup plus léger et ça ne demande quasiment aucune modification sur le fichier.

Oui j'avoue, les cases à cocher c'était une mauvaise idée!!! :D
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Re,
Le soucis est que ça remplace le contenu de la case par un "T" et supprime donc la périodicité.
Il vous suffit de faire dans vos macros, par exemple :
VB:
Remplacez:
ActiveCell.FormulaR1C1 = "s"
par
ActiveCell.Interior.Color = RGB(197, 90, 17)   ' Marron
ou encore
ActiveCell.FormulaR1C1 = "m"
par
ActiveCell.Interior.Color = RGB(147, 170, 220) ' Bleu
et ça vous supprime par la même occasion les MFC, et vous évite de "cacher" des caractères sous des cases à cocher.
 

cecenico

XLDnaute Nouveau
Re,

Il vous suffit de faire dans vos macros, par exemple :
VB:
Remplacez:
ActiveCell.FormulaR1C1 = "s"
par
ActiveCell.Interior.Color = RGB(197, 90, 17)   ' Marron
ou encore
ActiveCell.FormulaR1C1 = "m"
par
ActiveCell.Interior.Color = RGB(147, 170, 220) ' Bleu
et ça vous supprime par la même occasion les MFC, et vous évite de "cacher" des caractères sous des cases à cocher.
Je ne peux pas supprimer les lettres, c'est elles qui me permettre d'afficher la périodicité dans le recap du mois.

J'ai opté pour la solution de deadpool, à savoir l'ajout d'un 1 après la lettre pour les maintenances effectuées et 2 tons de couleur en fonction que la maintenance soit réalisée ou non.
Ça a l'avantage de supprimer aussi les cases à cocher du recap car h devenant h1 pour hebdomadaire effectué, ça le supprime des taches à effectuer.

En fait je m'étais compliqué la vie.

Mais merci à tous pour la réflexion que vous avez eu pour mon tableau
 

cecenico

XLDnaute Nouveau
Par contre vous n'auriez pas une solution pour supprimer un empilement de cases à cocher?
J'ai une ligne sur laquelle il y a plus de 50 cases à cocher par cellule. Je sais pas ce qui c'est passé mais c'est hyper galère à supprimer à la main ça fait environ 600 cases à supprimer sur 12 cellules...
Même si je supprime la ligne elles restent ces c...
En fait je crois que toutes les cases à cocher de mon tableau se sont empilées sur la même ligne quand j'ai supprimé les autres lignes
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
:) et en plus il y en a d'empiler ? Combien de temps avez vous passez pour faire ça ?
Par contre vous n'auriez pas une solution pour supprimer un empilement de cases à cocher?
Qu'entendez vous par "empilement" ? Toutes sauf celle du dessus ? ça je ne sais pas faire.
Toutes ? Ca je sais faire avec cette macro :
VB:
Sub SuppressionCheckbox()
    Dim CBox As CheckBox
    For Each CBox In ActiveSheet.CheckBoxes
        CBox.Select
        CBox.Delete
    Next CBox
End Sub
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Testez celle là pour le fun :
VB:
Sub SuppressionCheckbox()
    Dim CBox As CheckBox
    N = 0
    For Each CBox In ActiveSheet.CheckBoxes
        CBox.Select
        CBox.Delete
        N = N + 1
    Next CBox
    MsgBox N & " Checkbox ont été supprimées."
End Sub
1656534128644.png

Est ce bien raisonnable ? 🤣🤣🤣
 

cecenico

XLDnaute Nouveau
Testez celle là pour le fun :
VB:
Sub SuppressionCheckbox()
    Dim CBox As CheckBox
    N = 0
    For Each CBox In ActiveSheet.CheckBoxes
        CBox.Select
        CBox.Delete
        N = N + 1
    Next CBox
    MsgBox N & " Checkbox ont été supprimées."
End Sub
Regarde la pièce jointe 1143978
Est ce bien raisonnable ? 🤣🤣🤣
Bonjour,

Il ne m'en restait que 739!!!
Soit un régime 400Ko pour mon fichier (plus de la moitié 🤣

Promis je le ferait plus.

En tout cas merci pour le coup de main;)
 

Discussions similaires

Réponses
5
Affichages
173
Réponses
2
Affichages
281

Statistiques des forums

Discussions
312 206
Messages
2 086 219
Membres
103 158
dernier inscrit
laufin