Problème suppression de valeur [Résolu]

free.rage 22 Messages postés lundi 4 juin 2007Date d'inscription 14 juin 2016 Dernière intervention - 13 juin 2016 à 17:58 - Dernière réponse : free.rage 22 Messages postés lundi 4 juin 2007Date d'inscription 14 juin 2016 Dernière intervention
- 14 juin 2016 à 00:08
VBA Office (Excel, Word ...) Posez votre question Signaler Répondre au sujet
Bonjour à tous,

Cela fait lontemps que je ne pratique plus le VBA mais là j'en ai besoin et je bloque sur ce problème : lorsque l'on supprime le contenu du taux dollar (case F29) sans éditer son contenu (soit avec la touche suppr sans 'rentrer' dans la case) cela provoque une erreur.

Je souhaite empêcher mes utilisateurs de supprimer le taux dollar (en F29) dans une feuille de calcul.
Ils doivent pouvoir le modifier mais pas le supprimer.

J'ai fait ce code qui fonctionne tant que l'utilisateur n'utilise pas la touche 'suppr' lorsqu'il sélectionne la case :
Dim Old_dollar

Private Sub Worksheet_Change(ByVal c As Range)

If c.Address = "$F$29" And Range(c.Address).Value = vbNullString Then
ret = MsgBox("Le taux dollar est obligatoire, veuillez saisir le dernier communiqué. Si vous ne le connaissez pas, rapprochez vous du SDM.", vbOKOnly, "Taux dollar obligatoire")
c.Value = Old_dollar
End If

End Sub

Private Sub Worksheet_SelectionChange(ByVal c As Range)

If c.Address = "$F$29" Then Old_dollar = c.Value

End Sub



Est-ce que vous sauriez m'aider ?

Merci d'avance.
Afficher la suite 
22Messages postés lundi 4 juin 2007Date d'inscription 14 juin 2016 Dernière intervention

5 réponses

Répondre au sujet
ucfoutu 18021 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 12 décembre 2017 Dernière intervention - 13 juin 2016 à 19:13
0
Utile
Bonjour,
1) je déplace cette discussion, ouverte dans le forum général de Visual Basic, ver(s le sous-forum (VBA) où elle aurait dû l'être.
Prends s'il te plait dorénavant ce soin toi-même.
2)l'ensemble de tes deux procédures provoque bien évidemment une boucle sans fin de msgbox si Old_dollar n'a pas encore été initialisé (et non lorsque tu utilises la touche SUPPR !). C'est tellement évident !
Commenter la réponse de ucfoutu
free.rage 22 Messages postés lundi 4 juin 2007Date d'inscription 14 juin 2016 Dernière intervention - 13 juin 2016 à 20:55
0
Utile
Bonsoir ucfoutu,

Merci pour tes commentaires.

En ce qui concerne la solution évidente, comme je l'indiquait, il y a une valeur par défaut dans la page au taux dollar. Je veux que celle-ci soit modifiable donc pour la modifier l'utilisateur sélectionne cette case et donc fixe la valeur de Old_dollar.
De plus, le deboggeur s'arrête sur : If c.Address = "$F$29" And Range(c.Address).Value = vbNullString Then et indique erreur 458 : Cette variable utilise un type Automation non géré par Visual Basic.

Sur tes conseils j'ai tenté tout de même de fixer la variable préalablement, mais cela ne change rien.

Merci donc à ceux qui peuvent m'aider.
Commenter la réponse de free.rage
ucfoutu 18021 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 12 décembre 2017 Dernière intervention - 13 juin 2016 à 21:59
0
Utile
1) tu n'as pas typé la variable Old_dollar
2)
il y a une valeur par défaut dans la page au taux dollar

je ne vois pas où ! Je vois au contraire (ton code) que la variable Old_dollar, déclarée par Dim Old_dollar, n'est pas initialisée et est donc vide
3)
De plus, le deboggeur s'arrête sur : If c.Address = "$F$29" And Range(c.Address).Value = vbNullString Then et indique erreur 458 : Cette variable utilise un type Automation non géré par Visual Basic
.
Pas chez moi !!!!! Et cela tend à montrer que tu as fait quelque_chose en tripotant une constante (ce qu'est vbNullString) !
A moins que le code montré ne soit pas celui que tu as écrit, ou encore que tu n'aies pas tout dit et que tu "pilotes" Excel depuis une autre appli.
Je répète donc :
ton code, TEL QUEL, ne provoque aucune erreur, mais tourne en boucle (de msgbox) si la cellule F29 est vide au départ et que, y entrant, tu appuies alors sur SUPPR. Et cela, pour une raison plus qu'évidente.
Commenter la réponse de ucfoutu
ucfoutu 18021 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 12 décembre 2017 Dernière intervention - Modifié par ucfoutu le 13/06/2016 à 22:24
0
Utile
Je te fais par ailleurs observer que cet évènement :
Private Sub Worksheet_SelectionChange(ByVal c As Range)

If c.Address = "$F$29" Then Old_dollar = c.Value

End Sub

n'intervient en aucune manière si tu es déjà, d'entrée de jeu, sur la cellule F29 ===>> et donc Old_dollar n'est alors pas initialisée (et donc vide) ===>> et donc en appuyant sur SUPPR, tu déclenches l'évènement Change ===>> msgbox===>> cela remplace par du vide ==>> msgbox ===>>> et ainsi à l'infini !

Tu ferais peut-être (c'est également évident) bien d'affecter sa valeur à Old_dollar dès l'ouverture de ton classeur ou, au plus tard, lors de l'activation de ta feuille, quitte à la modifier ensuite dans l'évènement selection_change !
Ou encore, d'activer n'importe quelle autre cellule (surtout pas la F29) à l'activation de ta feuille ....
________________________
Nul ne saurait valablement coder ce qu'il ne saurait exposer clairement.
Commenter la réponse de ucfoutu
free.rage 22 Messages postés lundi 4 juin 2007Date d'inscription 14 juin 2016 Dernière intervention - 14 juin 2016 à 00:08
0
Utile
Re ucfoutu,

Merci encore pour tes réponses.

Lorsque j'indiquais que : il y a une valeur par défaut dans la page au taux dollar, je voulais dire que la case F29 contient toujours une valeur. En fait c'est mon but d'empêcher quelqu'un de la supprimer.

Mais effectivement, si la personne sauvegarde son document en étant sur cette case, et qu'il la réouvre et appuie sur suppr. Le code en l'état pose problème. Et je résoudrais ce problème en fixant la valeur au worksheet_activate.

Finalement, tu m'as bien aidé puisque j'ai retesté mon code sur une feuille vierge et je me suis rendu compte que le problème était lié au fait que la case F29 était fusionnée avec la G29.
Le code fonctionne finalement comme attendu. A la remarque ci-dessus près.
Commenter la réponse de free.rage

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.