Comportement aléatoire de cases à cocher /option quand je masque / affiche des lignes

Floranchik

XLDnaute Nouveau
Bonjour à toutes et tous,

je bute depuis longtemps sur ce problème. Je vais être un peu long mais mieux vaut donner déjà un certain nombre de détails.
Je suis sous Excel 2010.

CE QUE JE VEUX FAIRE : au début de l'utilisation de la feuille, je dois effectuer un choix binaire (2 cases d'option). selon ce choix, soit les 20 lignes du dessous deviennent inutiles et dans ce cas je les masque (par macro affectée à la 1ère case d'option), soit ce sont les 20 lignes suivantes, et ce sont alors celles-ci que je masque (macro sur la 2ème case).

Je précise que mes 2 fois 20 lignes contiennent d'autres cases d'option et case à cocher (contrôle de formulaire) et que c'est sur celles-ci que se situe le problème : elles perdent leur cellule liée. Toutes sont en option "déplacer et dimensionner avec les cellules".
La macro affectée aux 2 cases fait même un peu plus, lorsqu'elle affiche une zone, au passage elle masque l'autre en la nettoyant, c'est à dire en supprimant dans les cellules liées (selection.clearcontents) les valeurs éventuellement générées par cochage : vrai, faux, 1, 2, 3, etc...

PROBLEME : parfois, et c'est totalement aléatoire (enfin jusque là il m'a toujours semblé), lorsque je réaffiche mes lignes, certaines cases ont PERDU leur cellule liée, ou sont liées à des cellules qui correspondent à des cases situées plusieurs lignes plus haut, etc. : comme si les cases s'étaient mêlées à une autre zone de groupage pendant qu'elles étaient masquées.

Je croyais solutionner le problème en ne faisant pas selection.clearcontents mais en écrivant dans la macro, pour chaque case un bout de code du type :
Activesheet.shapes.range(array("check box xxxx")).select with selection
value = xloff (pour le nettoyage, donc)
Linkedcell = "$P$20" (pour être sûr de RE-lier la case à la bonne cellule)
End with


et bien non ! même comme ça, le fait de finir la macro par worksheets("Feuil1").Rows("41:62").hidden=False (ou true) me "délie", de temps en temps (!) mes cases à cocher et cases d'option.

Quelqu'un aurait il une idée? il y a manifestement quelque chose dans la programmation objet qui m'échappe (modestement, je dirais tout). La preuve, je n'arrive pas non plus dans VBA à afficher les propriétés des cases à cocher ou d'option, au point que je ne sais pas non plus modifier la police ni la taille (d'ailleurs, cela aussi, j'aimerais le solutionner)

Quelque fois, c'est encore différent, lorsque je déploie les lignes, certaines zones de groupages se sont totalement écrasées...

Merci à tous pour votre aide.

Florent
 

Gorfael

XLDnaute Barbatruc
Re : Comportement aléatoire de cases à cocher /option quand je masque / affiche des l

Salut Floranchik et le forum
Au lieu de donner des extraits de ton code, donnes-le en entier !
Ton problème vient peut-être de l'utilisation des Select/Selection.
A+
 

Floranchik

XLDnaute Nouveau
Re : Comportement aléatoire de cases à cocher /option quand je masque / affiche des l

Bonjour Gorfael,
merci de t'intéresser à mon cas.

Le jour où j'ai reçu ta réponse, je n'avais que quelques minutes devant moi avant de partir quelques jours. Qu'ai je fait ? j'ai ré-ouvert mon fichier en essayant d'identifier un des nombreux bugs dont j'ai parlé. et sais tu ce qui s'est passé ? absolument RIEN ! comme guéri ! je me suis dit : "de quoi ai-je l'air : je n'ai plus rien à montrer?"

Aujourd'hui je suis de retour, je refais la même manip que l'autre jour sur un fichier que je n'ai pas touché et voilà que tout redé...:mad:
Par exemple, une de mes cases à cocher de la zone rows 41:60 s'est "déliée" (n'a plus de valeur de sortie. Certains boutons ont étés écrasés (je rappelle que j'utilise beaucoup la fonction masquer, enfin, hidden, ou encore le groupage de données et le repli via le petit icône "+")
Quelques fois, c'est encore différent, la valeur de sortie de la case est celle d'un autre groupe de case à cocher....

Je t'envoie le code de 3 macros mais :
1/ ne devrais-je pas t'envoyer directement tout le fichier?
2/ il se peut, tu as 100 fois raison, que j'aie des lacunes sur l'emploi du select mais à mon avis, j'en ai encore plus sur le "Hidden". est ce que je l'utilise à bon escient ?

et puis surtout, pourquoi est ce tant aléatoire ? un jour ça marche, un jour non. comme si les propriétés d'excel variaient au fil du temps ....

voici le code affecté à 2 cases d'option (les valeurs de remplacement texte sont "point 100%" et "gamme") placées dans une zone de groupage, et dont la valeur des sortie est la cellule $P$4 :

Sub Clic_Point100p100()
'
' Clic_Point100p100 Macro
'

Worksheets("Feuil1").Rows("19:62").Hidden = False
Range("P13:p14,D46,D47,A45:A52,E45:F52,B55:C62,E55:F62,E42,F42").Select
Range("F42").Activate
Selection.ClearContents
Worksheets("Feuil1").Rows("41:62").Hidden = True
Range("A5").Select

'
End Sub
____
Sub Clic_Gamme()
'
' Clic_Gamme Macro
'

'
Worksheets("Feuil1").Rows("19:62").Hidden = False
Range("P9:p12,E22,G22,B23,B24,B25,D23,D24,F24,B28:G33,E35:G40").Select
Range("E35").Activate
Selection.ClearContents
Worksheets("Feuil1").Rows("19:40").Hidden = True
Range("A5").Select

End Sub


et maintenant, le code affecté à 3 zones de la feuille que je réinitialise séparément, au moyen de boutons auxquels j'affecte chacune des 3 macros. Je précise que j'ai placé en colonne P (P1 à P15) toutes les valeurs de sortie des cases à cocher de la feuille (disséminées un peu partout entre les lignes 16 et 44, c'est à dire qu'elles sont tantôt masquée, tantôt affichées) . J'ai choisi cette zone car elle, n'est jamais masquée. Je me disais que j'éviterais une partie des ennuis mais tu parles....

Sub Réinitialise_Généralités()
'
' Réinitialise_Généralités Macro
'

'
Worksheets("Feuil1").Rows("19:62").Hidden = False
Worksheets("Feuil1").Rows("65:135").Hidden = False
Range("P9:p12,E22,G22,B23,B24,B25,D23,D24,F24,B28:G33,E35:G40").Select
Range("E35").Activate
Selection.ClearContents
Range("P13:p14,D46,D47,A45:A52,E45:F52,B55:C62,E55:F62,E42,F42").Select
Range("F42").Activate
Selection.ClearContents
Range("P2:p8,C11,C12,C13,E9,E13,B16,C16,D16,E16,F16,C17,D17,E17,F17").Select
Range("F17").Activate
Selection.ClearContents
Worksheets("Feuil1").Rows("19:62").Hidden = True
Worksheets("Feuil1").Rows("65:135").Hidden = True
Range("A5").Select
End Sub

____
Sub Réinitialise_pt100p100()
'
' Réinitialise_pt100p100 Macro
'

'
Range("P9:p12,E22,G22,B23,B24,B25,D23,D24,F24,B28:G33,E35:G40").Select
Range("E35").Activate
Selection.ClearContents
Range("A20").Select
End Sub

_____
Sub Réinitialise_Gamme()
'
' Réinitialise_Gamme Macro
'

'
Range("P13:p14,D46,D47,A45:A52,E45:F52,B55:C62,E55:F62,E42,F42").Select
Range("F42").Activate
Selection.ClearContents
Range("A42").Select

End Sub


Voilà, merci de ton aide. Fais bonne chasse.
 

Gorfael

XLDnaute Barbatruc
Re : Comportement aléatoire de cases à cocher /option quand je masque / affiche des l

Salut Floranchik et le forum
1/ ne devrais-je pas t'envoyer directement tout le fichier ?
Je ne pense pas que ça soit très utile : je n'ai que la version 2003 d'excel, et la transformation pourrait soit faire disparaître tes anomalies, soit en créer d'autres, sans permettre de trouver ce qui ne va pas.
et puis surtout, pourquoi est ce tant aléatoire ? un jour ça marche, un jour non. comme si les propriétés d'excel variaient au fil du temps ....
Je ne crois pas : les notions de hasard vont très mal avec les notions d'informatique. C'est quelque chose de différent qui fait que la réponse est différente.

Pense à utiliser les balises de code (icone # en mode avancé)
Macro Clic_Point100p100
Comme je ne connais pas le fichier, je me sers juste du code que je ne comprends pas, ou plutôt, sa logique : si comme semble l'indiquer tes Select, c'est la Feuille "Feuil1" qui est la feuille active, pourquoi la mettre en préfixe sur certaines instructions et pas sur d'autres ? Soit tu la mets sur toutes, soit sur aucune.
Code:
Sub Clic_Point100p100()
With sheets("Feuil1")
    .Rows("19:62").Hidden = False
    .Range("P13:P14,D46,D47,A45:A52,E45:F52,B55:C62,E55:F62,E42,F42").ClearContents
    .Rows("41:62").Hidden = True
End with
Range("A5").Select
End Sub
J'affiche les lignes de 19 à 62 (masquées ou non) de Feuil1
j'efface le contenu des cellules P13:p14, etc.. de Feuil1
Je masque les lignes de 41 à 62 de Feuil1
J'active la cellule A5 de la feuille active (quelle qu'elle soit).
ce qui donne pour les autres :
Code:
Sub Clic_Gamme()
With sheets("Feuil1")
    .Rows("19:62").Hidden = False
    .Range("P9:P12,E22,G22,B23,B24,B25,D23,D24,F24,B28:G33,E35:G40").ClearContents
    .Rows("19:40").Hidden = True
end with
Range("A5").Select
End Sub
Code:
Sub Réinitialise_Généralités()
with sheets("Feuil1")
    .Rows("19:62").Hidden = False
    .Rows("65:135").Hidden = False
    .Range("P9:P12,E22,G22,B23,B24,B25,D23,D24,F24,B28:G33,E35:G40").ClearContents
         .Range("P13:P14,D46,D47,A45:A52,E45:F52,B55:C62,E55:F62,E42,F42").ClearContents
   .Range("P2:P8,C11,C12,C13,E9,E13,B16,C16,D16,E16,F16,C17,D17,E17,F17").ClearContents
        .Rows("19:62").Hidden = True
        .Rows("65:135").Hidden = True
    end with
Range("A5").Select
End Sub
Code:
Sub Réinitialise_pt100p100()
sheets("Feuil1").Range("P9:P12,E22,G22,B23,B24,B25,D23,D24,F24,B28:G33,E35:G40").ClearContents
    Range("A20").Select
End Sub
Code:
Sub Réinitialise_Gamme()
sheets("Feuil1").Range("P13:P14,D46,D47,A45:A52,E45:F52,B55:C62,E55:F62,E42,F42").ClearContents
    Range("A42").Select
    End Sub
Je n'ai pas fait grand chose, je n'ai fais que préciser la feuille concernée, et supprimer les select/selection. Sur 2003, le fait de faire un select sur une feuille différente de la feuille active génère une erreur. Mais sur les versions suivantes...
La permissivité des versions suivantes m'a déjà amenée des erreurs que l'utilisateur n'avait pas, mais avait un fonctionnement qui lui semblait aléatoire

Si tu avais la 2003, je te conseillerais d'utiliser des boutons de la barre d'outils Formulaire, et une seule macro avec un "select case right(application.caller,1)", mais sur 2010...
A+
 

Discussions similaires

Statistiques des forums

Discussions
312 097
Messages
2 085 256
Membres
102 839
dernier inscrit
Tougtoug