Office 365 RÉSOLU Cases à cocher (active x) qui ne tiennent pas en place

capoiri1

XLDnaute Nouveau
Bonjour à tous :)
Alors voilà...
J'ai monté un document Excel avec des codes qui masquent/affichent des lignes tout dépendamment de si une case à cocher est active ou non.
Quand les lignes à masquer/afficher contiennent des cases à cocher, j'ai mis des codes pour que si les lignes sont masquées, les cases à cocher deviennent invisibles.
Tout marche comme sur des roulettes quand les éléments sont en place, mais le problème est lors de la réouverture du document...
Si je met comme Format de contrôle de case à cocher « Déplacer sans dimensionner avec les cellules » ou « Déplacer et dimensionner avec les cellules », à la réouverture du document soit elles ont disparus, soit elles sont « en motton » (dans le même tas, à un endroit autre d'où elles devraient être).
Si je met comme Format de contrôle de case à cocher « Ne pas déplacer ou dimensionner avec les cellules », le problème est que si tout n'est pas cocher (ce qui n'arrivera jamais lors de l'entrée des données de mes collègues), les cellules restent aux mêmes endroits que si tous les cases seraient cochées...
Des heures et des heures de travail et maintenant je panique un peu!!!
J'ai joint un fichier test. En vrai le document comporte environ 250 lignes et 90 cases à cocher, j'ai donc réduit le tout.
J'ai mis les cases à cocher sous le Format de contrôle « Ne pas déplacer ou dimensionner avec les cellules » pour que vous puissiez voir le format réel de ce que ça devrait être....
Bon week-end ;-)
 

Fichiers joints

Dernière édition:

Staple1600

XLDnaute Barbatruc
Bonsoir le fil, capoiri1

Alors voilà, j'ai urgent besoin d'aide!
Mauvaise pioche
same player shoot again ;)

(voir la charte du forum)
[Pour tous] Point 3) et [Demandeur] point 2)

EDITION: Sinon pour ta question, il y a aussi la piste d'employer de fausses cases à cocher
(plus simple et plus léger)
Voir en bas de pas dans les Discussions similaires et/ou dans les archives du forum.
 
Dernière édition:

capoiri1

XLDnaute Nouveau
Bonsoir le fil, capoiri1


Mauvaise pioche
same player shoot again ;)

(voir la charte du forum)
[Pour tous] Point 3) et [Demandeur] point 2)

EDITION: Sinon pour ta question, il y a aussi la piste d'employer de fausses cases à cocher
(plus simple et plus léger)
Voir en bas de pas dans les Discussions similaires et/ou dans les archives du forum.
 

capoiri1

XLDnaute Nouveau
Oups! J'ai tellement paniqué que j'ai même pas pris le temps de lire la charte!!!!! Je vais essayer de voir si je peux modifier ma discussion!!! Merci de ta réponse... Pas très familière avec les forums ;)
 

Staple1600

XLDnaute Barbatruc
Re


Donc un exemple parmi beaucoup de fausses cases à cocher

En espérant que cela t'inspire.
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonjour @capoiri1 et bienvenue sur XLD :), bonjour @Staple1600.

Parce que c'est votre première intervention et que vous avez lu la charte :D (bien peu le font) un exemple de ce qu'on pourrait écrire en utilisant la suggestion de @Staple1600 . Le code est entièrement dans le module de la feuille "Fiche d'analyse". Quand on modifie l'état d'une case à cocher, les autres cases à cocher du groupe sont décochées. Un bouton a été ajouté pour décocher toutes les cases à cocher. Quelques commentaires ont été ajoutés au code.
 

Fichiers joints

Dernière édition:

capoiri1

XLDnaute Nouveau
C'est hot, wow @mapomme ! Étant donné mon amateurisme, j'ai bien des heures à mettre afin de comprendre les codes dans le doc hihi!!!
Mais une réponse à la question suivante m'aiderait énormément :
Comment on fait pour associer l'objet Wingdings coché/non coché à un non comme ton «casecoche» ou «casepascoche» ?
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Comment on fait pour associer l'objet Wingdings coché/non coché à un non comme ton «casecoche» ou «casepascoche» ?
Sans doute voulez-vous évoquez les constantes odeCoche et codePasCoche ?

En fait il n'y a pas d'objet de type "Windings".

On utilise un subterfuge, une astuce, une ruse (mais qui se révèle être assez pratique). On représente une case cochée par le caractère ASCII de code 254 et la case décochée par le caractère ASCII 111.
On utilise pour dessiner une case, une cellule de police Windings. Dans cette cellule, on y insère soit le caractère de code ASCII 254 (pour simuler une case cochée) soit le caractère de code ASCII 111 (pour simuler une case décochée)

Pour résumer, si je veux simuler une case cochée (décochée), il me faut :
  • une cellule avec Windings comme police
  • y insérer le caractère de code 254 si je veux une case cochée
  • ou y insérer le caractère de code 111 si je veux une case décochée
Plutôt que d'écrire tout au long du code les valeurs 111 ou 254 (qui sont peu parlantes), on définit au niveau du module deux constantes avec des noms arbitraires mais qui rappellent à quoi ils sont relatifs: case cochée ou case non cochée.

voir au début du code:
VB:
'code des caractères "Wingdings" coché/pas coché
Const codeCoche = 254, codePasCoche = 111
Ainsi plutôt que d'écrire le caractère chr(111) ou chr(254), on écrit chr(codePasCoche) ou chr(codeCoche) mais on aurait pu s'en passer. Je trouve que le code est plus lisible.
 

capoiri1

XLDnaute Nouveau
Ok c'est vraiment super... Ça marche et c'est vraiment hot!
Ma dernière question... Si je met ça :
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Range("F30").Chr(codecoche) Then
[213:218].EntireRow.Hidden = True
Else: [213:218].EntireRow.Hidden = False
If Range("F31").Chr(codecoche) Then
[213:218].EntireRow.Hidden = True
Else: [213:218].EntireRow.Hidden = False
If Range("F32").Chr(codecoche) Then
[219:236].EntireRow.Hidden = True
Else: [219:236].EntireRow.Hidden = False
End If
End Sub
Qu'est-ce qui cloche? En fait on me dit que c'est : Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Mais je sais pas trop quoi faire... Est-ce que c'est en fait le reste du code qui cloche?

Si j'ai cette réponse, je serais en mesure de terminer mon document et serai la fille la plus reconnaissante et heureuse de monde :D

MÀJ : Finalement, j'ai trouvé toute seule comme une grande fille ET je suis vraiment CONTENTE! Merci de m'avoir aider!!!!!!! @mapomme @Staple1600
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Bonsoir.
Information. J'ai découvert assez récemment des codes qui n'obligent pas à utiliser la police Wingdings :
☑ Excel: =UNICAR(9745) VBA: = ChrW$(&H2611)
☐ Excel: =UNICAR(9744) VBA: = ChrW$(&H2610)
☒ Excel: =UNICAR(9746) VBA: = ChrW$(&H2612)
✔ Excel: =UNICAR(10004) VBA: = ChrW$(&H2714)
✕ Excel: =UNICAR(10005) VBA: = ChrW$(&H2715)

Par contre c'est une grosse surprise que le premier apparaisse ici en blanc sur fond bleu dans une image de bouton !
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Bien possible. S'écrire la fonction perso en utilisant ChrW$ ainsi que la fonction inverse UNICODE avec AscW
 

capoiri1

XLDnaute Nouveau
Finalement, ma joie n'aura pas durée longtemps, je viens de trouver un autre problème @mapomme ...

Dans mon document, à partir du moment ou je fais une insertion de ligne dans un de mes tableaux (par exemple dans mes tableaux surlignés en jaune), mes codes servant à afficher/maquer certaines lignes ne mettent pas à jour les lignes... Voici les codes utilisés entre-autres :

VB:
If Range("E30") = Chr(codecoche) Or Range("E31") = Chr(codecoche) Then [213:218].EntireRow.Hidden = True Else [213:218].EntireRow.Hidden = False
If Range("E32") = Chr(codecoche) Then [219:236].EntireRow.Hidden = True Else [219:236].EntireRow.Hidden = False
If Range("H38") = Chr(codepascoche) Then [237:261].EntireRow.Hidden = True Else [237:261].EntireRow.Hidden = False
If Range("I264") = Chr(codecoche) Then [267:268].EntireRow.Hidden = False Else [267:268].EntireRow.Hidden = True
If Range("C282") = Chr(codecoche) Then Range("H282").Value = Range("E18").Value Else Range("H282").Value = ""
If Range("C282") = Chr(codecoche) Then [285:286].EntireRow.Hidden = False Else [285:286].EntireRow.Hidden = True
If Range("I285") = Chr(codecoche) Then [287:288].EntireRow.Hidden = False Else [287:288].EntireRow.Hidden = True
Est-ce qu'il y a un moyen d'y insérer un autre code qui ferait la mise à jour automatique si jamais j'insert une ligne plus haut?
 

Fichiers joints

Dranreb

XLDnaute Barbatruc
Vous pourriez donner des noms à vos plages.
Et écrivez les chose plus simplement parce qu'une condition c'est déjà une expression Boolean, alors c'est inutile d'affecter True si elle est à True et sinon False. Affectez l'expression c'est tout. Par exemple pour votre 1ère ligne :
VB:
[213:218].EntireRow.Hidden = Range("E30") = Chr(codecoche) Or Range("E31") = Chr(codecoche)
Que vous pourrez réécrire ainsi après avoir donné "LignesCoche30" comme nom dans le classeur à la plage 213:218 :
VB:
[LignesCoche30].EntireRow.Hidden = Range("E30") = Chr(codecoche) Or Range("E31") = Chr(codecoche)
Les références des noms suivent leurs déplacements suite à insertion de lignes devant.
 

capoiri1

XLDnaute Nouveau
Wow ça fonctionne à la perfection! Mon document est fin prêt, Merci @Dranreb !!!!!!!!!!!!!!
 

Créez un compte ou connectez vous pour répondre

Vous devez être membre afin de pouvoir répondre ici

Créer un compte

Créez un compte Excel Downloads. C'est simple!

Connexion

Vous avez déjà un compte? Connectez vous ici.

Haut Bas