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
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 '...
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.
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.
Je crois que je vais attendre noël pour ré-ouvrir ton fichier il fera très chouette à coté du sapin
Et puis gérer plusieurs centaines de cases à cocher c'est ..... justement ingérable.
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 :
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)
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.
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.
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!!!
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
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
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
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