Codes VBA - Problèmes suite à protection

Bonjour,

Je travaille actuellement sur un projet encore passablement en chantier.

Après avoir essayé de placer une protection sur la feuille « Données », j’ai commencé à avoir des problèmes que je n’avais pas jusqu’ici.

Par exemple, quand j’essaie maintenant de cliquer sur les boutons « Ja » ou « Nein » de la cellule B13, le code des macros Sub Rente_transitoire_Ja() ou Sub Rente_transitoire_Nein() reste bloqué sur les lignes If Cel = "e" Then / Cel.Rows.Hidden = True ou False alors que ça ne bloquait pas avant et que j’ai placé l’instruction ActiveSheet.Unprotect au début du code.

Il en est de même pour les boutons de la cellule B16 : les macros Sub ARgar_ausgeschlossen_Ja() ou Sub ARgar_ausgeschlossen_Nein() bloquent sur les lignes If Cel = "a" Then / Cel.Rows.Hidden = True ou False.

Il en est de même pour les boutons de la cellule B27 : les macros Sub Kapital_Option__Ja() ou Sub Kapital_Option__Nein() bloquent sur les lignes If Cel = "b" Then / Cel.Rows.Hidden = True ou False.

PAR CONTRE, bizarrement, les macros Sub Rückenwind_Nein() et Sub Rückenwind_Ja(), reliées aux boutons de la cellule 24, fonctionnent parfaitement (les lignes If Cel = "d" Then / Cel.Rows.Hidden = True ou False passent sans problème).

Si vous pouviez m’aider à résoudre ce casse-tête.

Cordialement.

Bonjour,

Le premier souci que j'ai dans un code en cliquant sur Ja ou Nein se passe à cette ligne

ActiveSheet.Shapes("Kontrollkästchen 4").Select

L'objet ne semble pas exister. De quoi s'agit-il ??

Pour les boutons 27, je n'ai pas de souci. Les lignes sont bien cachées ou pas selon le choix

Amicalement

Bonjour,

Connais-tu la touche F8, afin de dérouler un code en mode pas-à-pas?

C'est très utile...

Pour ton problème, je mettrai cette instruction en début de code :

Sub ARgar_ausgeschlossen_Ja()
Application.Calculation = xlCalculationManual
......
.....

Et en fin de code :

....
.....
ActiveSheet.Protect
Application.Calculation = xlCalculationAutomatic
End Sub

Et ceci pour les 2 codes (Ja et Nein)

En utilisant la touche F8, tu trouveras toi-même le pourquoi du comment...

Bon courage

Bonjour à tous deux,

@CousinHub

Merci pour tes indications. J’ai placé les codes tel qu’indiqué et il semble que tous les problèmes de ce coté sont résolus.

@Dan

"Kontrollkästchen 4" est la "Case à cocher 4" en allemand. Je ne sais pas si ces références sont traduites par Excel comme le sont les formules par exemple ; en d’autres mots, je ne sais pas si un tel code peut-être utilisé indifféremment sur un PC francophone ou germanophone.

Dans tous les cas, j’ai placé des indications complémentaires dans le code afin d’essayer de rendre les choses plus claires.

@Tous

Après avoir continué de modifier mon code, j’ai un nouveau problème au niveau de la macro Private Sub Worksheet_Calculate() placé dans la feuille "Données". J’y contrôle si les hommes ont 65 ans ou si les femmes on 64 ans par le code If Range("B35") = 64 And Range("G5") = 1 Or Range("B35") = 65 And Range("G5") = 2 Then.

Dans un tel cas, je voudrais pouvoir appeler la macro Sub Rente_transitoire_Nein(). Mais lorsque j’essaie Call Rente_transitoire_Nein, ça ne passe pas, c’est comme si ça tournait en rond. Pour l’instant j’ai placé un autre code à cet endroit, mais il ne fait que la moitié de ce que je désirerais.

Pour faire un essai, il faudrait par exemple remplacer le 31.05.2017 par le 31.07.2017 dans la cellule B7.

Pouvez-vous encore m’aider ?

Re-,

Je n'ai pas cherché à trouver une quelconque erreur et/ou modification dans ton code, ne comprenant pas la formule en B35.....

Quoiqu'il en soit, cette formule te renvoie un texte, et non un nombre....

Donc, on ne peut comparer deux choses différentes...

Maintenant, il est vrai qu'on pourrait, via VBA, transformer ce texte en nombre, mais n'est-il pas plus simple de le faire à l'origine (dans la formule, par exemple......)

Mais comme je ne comprends pas (ou ne fais pas d'effort pour comprendre...), ce que tu veux faire par le biais de cette formule......

Bonne soirée

Salut CousinHub,

Dans la cellule B35, je calcule simplement un âge –- d’une manière un peu spéciale –- en mois et en années, sur la base des cellules B6 et B34.

Si cet âge est exactement 64 ans pour les femmes ou 65 ans pour les hommes (c’est un âge limite, contrôlé d’une autre manière) je voudrais déclencher une mutation spéciale.

J’ai donc placé dans mon code VBA le passage If Range("B35") = 64 And Range("G5") = 1 Or Range("B35") = 65 And Range("G5") = 2 Then. Ceci fonctionne déjà et la partie du code suivant cette ligne est bien déclenchée si les conditions sont réunies.

Afin de déclencher cette mutation spéciale, j’avais indiqué qu’il suffisait d’inscrire - dans mon fichier tel que présenter - le 31.07.2017 dans la cellule B7 afin que l’âge de cet homme soit de 65 ans.

Par contre, j’indiquais dans mon précédent message que j’aurais voulu déclencher une autre mutation que celle qui est déclenchée actuellement. En d’autres termes, mon code ne réalise actuellement, si c’est un homme de 65 ans ou une femme de 64 ans, qu’une partie de ce que je désirerais.

A la place du code :

  If Range("B35") = 64 And Range("G5") = 1 Or Range("B35") = 65 And Range("G5") = 2 Then
        ' Contrôle si l'âge de retraite correspond à la retraite AVS

            ActiveSheet.Shapes("Optionsfeld 30").Select
            With Selection
                .Value = xlOff
            End With

            ActiveSheet.Shapes("Optionsfeld 31").Select
            With Selection
                .Value = xlYes
            End With

                ActiveSheet.Shapes("Kontrollkästchen 4").Select ' Cellule B14 - Case à cocher V1
                With Selection
                    .Value = xlOff
                End With

                ActiveSheet.Shapes("Kontrollkästchen 6").Select ' Cellule B15 - Case à cocher V2
                With Selection
                    .Value = xlOff
                End With
     End If

j’ai essayé :

 If Range("B35") = 64 And Range("G5") = 1 Or Range("B35") = 65 And Range("G5") = 2 Then
        ' Contrôle si l'âge de retraite correspond à la retraite AVS

           Application.Calculation = xlCalculationManual
           Call Rente_transitoire_Nein
           Application.Calculation = xlCalculationAutomatic
        End If

mais ça ne passe pas, ça a alors l’air de mouliner à l’infini.

Est-ce un peu plus clair ?

Cordialement.

Bonjour

Je rejoins CousinHub lors de la comparaison entre texte et nombre (modification de la macro)

Ensuite utilisation d'un flag pour empêcher de tourner Ad vitam æternam

A voir si l'emploi de cette procédure événementielle est la meilleure dans ce cas (voir avec Worksheet_Change)

Pas trop étudié ton programme, alors ce ne sont que des hypothèses (gratuites )

A tester

Salut Banzai,

Tout d’abord merci beaucoup pour ton aide.

Banzai64 a écrit :

Ensuite utilisation d'un flag pour empêcher de tourner Ad vitam æternam

Ca fonctionne parfaitement
Banzai64 a écrit :

A voir si l'emploi de cette procédure événementielle est la meilleure dans ce cas (voir avec Worksheet_Change)

J’avoue ne pas être suffisamment expert afin de dire si l’un ou l’autre possibilité est meilleure. Mais ça fonctionne actuellement comme ça, donc que faire ??
Banzai64 a écrit :

Je rejoins CousinHub lors de la comparaison entre texte et nombre (modification de la macro)

Pourtant les deux possibilités fonctionnent indifféremment, même après les corrections indiquées ci-dessus.

Merci encore pour les autres indications complémentaires (variantes de langues et simplification des codes pour les différents boutons).

Je vais indiquer ce fil comme résolu. Mais j’ai bien peur que je vais revenir sur le Forum avec ce fichier.

Merci à tous les autres qui sont intervenus sur ce fil et bonnes salutations à tous.

Bonjour

Supposition (qui n'engage que moi)

Banzai64 a écrit :

je rejoins CousinHub lors de la comparaison entre texte et nombre (modification de la macro)

Yvouille a écrit :

Pourtant les deux possibilités fonctionnent indifféremment, même après les corrections indiquées ci-dessus.

je pense (sans en être sur à 100%) , dans ta version, tu utilises comme séparateur décimal le . (point) il n'y a pas de différence entre un nombre à 2 décimales et le texte que tu construits dans ta cellule

Mais bon sang, mais c'est bien sûr

En Suisse, nous utilisons logiquement le point comme séparateur décimal, alors que dans le reste de la francophonie, ils se trompent ! Il paraît qu'ils y en a même qui disent soixante-dix à la place de septante, c'est vous dire

Il y a cependant une chose qui me chicane : comme vous prétendiez que c'était du texte, j'ai essayé de multiplier la cellule concernée par deux afin de voir et ça passait et ça joue. Ca voudrait donc dire qu'Excel considère chez vous une cellule comme du texte et qu'il la considère chez moi comme un nombre !?!?

Encore merci pour ta grande aide !

Rechercher des sujets similaires à "codes vba problemes suite protection"