Comment activer et désactiver une fonction attachée à une cellule

phmad

XLDnaute Nouveau
Bonjour,

Grâce à vous, j'ai des cellules qui désactive des boutons "oui" ou "non" dans un questionnaire que quelqu'un doit remplir.

En voici le code :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim Derli As Long, Li As Long, Col As Long

If Target.Count > 1 Or Target.Column > 6 Or Target.Row < 4 Then Exit Sub

Derli = Range("A65536").End(xlUp).Row
Li = Target.Row
Col = Target.Column

' clic en colonne A ou B pour initialiser
Select Case Col
Case 1, 2
If Target <> "" Then
Range("C" & Li) = "¡"
Range("E" & Li) = "¡"
Sheets("Echelles").Cells(Li, "D") = ""
End If

Case 3, 4
Cells(Li, 3) = "¤"
Cells(Li, 5) = "¡"
Sheets("Echelles").Cells(Li, "D") = "oui"

Case 5, 6
Cells(Li, 5) = "¤"
Cells(Li, 3) = "¡"
Sheets("Echelles").Cells(Li, "D") = "non"

End Select
End Sub


Je voudrais savoir s'il m'est possible de désactiver cette fonction, le temps que l'utilisateur remplisse le questionnaire, pour éviter qu'il fasse disparaître par erreurs ses propres choix (sur 600 questions, ce serait très ennuyeux) ; puis de la réactiver par la suite pour un nouveau questionnaire.

En m'expliquant la syntaxe du code, cela m'aidera aussi à comprendre votre démarche.


Merci de votre aide.
 

kllmoon

XLDnaute Occasionnel
Re : Comment activer et désactiver une fonction attachée à une cellule

Quelques choix :

Si tu veux mettre ta macro en pause, Application.enableevents=false

Pourquoi ne pas activer ta macro à la fermeture ou à l'ouverture au lieu de Private Sub Worksheet_Activate() Private Sub Worksheet_Open() peut-être?

Inclure ta macro dans un bouton que l'utilisateur clique à la fin du questionnaire

Créer une case à cocher qui à son tour crée une condition pour l'application du code. met ta macro dans un module Sub mamacro() par exemple

Private Sub Worksheet_Activate()
if Range("A1").value = FALSE
Call mamacro
Else
Exit Sub

Si ta case à cocher est liée a A1 et qu'elle n'est pas cochée, la macro s'active. Si elle est cochée, rien!

Voilà quelques idées, bonne chance.
 

phmad

XLDnaute Nouveau
Re : Comment activer et désactiver une fonction attachée à une cellule

Bonjour kllmoon, merci pour ta réponse, malheureusement tu as à faire à un vrai novice en VBE, et ce que tu me proposes est pour l'instant tout à fait mystérieux pour moi.

Exemple : "Application.enableevents=false"

Je ne sais pas du tout où l'insérer et quoi en faire ?

"au lieu de Private Sub Worksheet_Activate() Private Sub Worksheet_Open()"
Tout aussi difficile à comprendre.

Et enfin : "met ta macro dans un module Sub mamacro() :private Sub Worksheet_Activate()
if Range("A1").value = FALSE
Call mamacro
Else
Exit Sub"

Au secours !!!!

Pourrais-tu s'il te plaît m'aider plus concrètement, soit en m'expliquant (mais je pense que cela va être long et difficile), soit en essayant sur le brouillon de mon questionnaire que je t'envoie en pièce jointe. Merci bcp.
 

Pièces jointes

  • Mon questionnaire à modifier1.zip
    41.4 KB · Affichages: 63

James007

XLDnaute Barbatruc
Re : Comment activer et désactiver une fonction attachée à une cellule

Bonjour Philippe,

Ci-joint, ta modification ... au plus simple ...
Si tu incris quoi que ce soit dans la cellule E1 ... la macro ne fonctionne pas
et dès qu'elle est vide ... la macro refonctionne ...

A +
 

Pièces jointes

  • Testquestionnaire.zip
    41 KB · Affichages: 96

phmad

XLDnaute Nouveau
Re : Comment activer et désactiver une fonction attachée à une cellule

Je te remercie James007, c'était exactement ce dont j'avais besoin.

Cependant j'ai toujours un gros pb avec les solutions géniales que l'on me propose, c'est que je suis incapable de les intégrer dans mon vrai questionnaire (fichier trop lourd à envoyer).

Que j'essaie de recopier le code en passant par VBE ou que je fasse un copier coller de la cellule que tu m'as créé, je me retrouve avec quelque chose qui ne marche pas, ou pire, qui bouleverse tout le reste.

Pourrais-tu stp refaire cette géniale cellule dans le fichier que je t'envoie, dans lequel j'ai enlevé 270 questions pour pouvoir l'expédier.

Pourrais-tu aussi stp (je sais, je demande bcp) m'expliquer la manip pour faire cette cellule, pour la recopier ailleurs, dans un autre questionnaire, et enfin comment recopier toutes mes autres questions sans à nouveau tout bouleverser.

Grand merci à toi. Philippe.
 

Pièces jointes

  • Copie Mon Formulaire final.zip
    19.6 KB · Affichages: 52
  • Copie Mon Formulaire final.zip
    19.6 KB · Affichages: 59
  • Copie Mon Formulaire final.zip
    19.6 KB · Affichages: 58

James007

XLDnaute Barbatruc
Re : Comment activer et désactiver une fonction attachée à une cellule

Bonjour,


Panni problème ...
Dans le fameux gros fichier,
1. tu sélectionnes la feuille dans laquelle tu veux effectuer la modification
2. tu places ton curseur sur l'onglet et tu fais un click droit
3. tu choisis la dernière option du sous-menu pour voir le code
4. en dessous de la première ligne, dont le titre est
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
tu copies la ligne ci-dessous ...
Code:
If ActiveSheet.Range("E1").Value <> "" Then Exit Sub
5. C'est fini ... si tu désires intervenir sur une autre cellule que la cellule E1 pour empêcher le code de s'éxécuter, il te suffit de remplacer, dans cette nouvelle ligne E1 par l'adresse de ta nouvelle cellule ...

J'espère avoir été suffisament clair ...

A +
 

nolich

XLDnaute Occasionnel
Re : Comment activer et désactiver une fonction attachée à une cellule

Bonjour phmad, kllmoon et James007, bonjour à toutes et à tous :)

Je voudrais savoir s'il m'est possible de désactiver cette fonction, le temps que l'utilisateur remplisse le questionnaire, pour éviter qu'il fasse disparaître par erreurs ses propres choix (sur 600 questions, ce serait très ennuyeux) ; puis de la réactiver par la suite pour un nouveau questionnaire.

En m'expliquant la syntaxe du code, cela m'aidera aussi à comprendre votre démarche.

Si tu désactives la fonction, l'utilisateur ne pourra plus répondre aux questions. En y réfléchissant, je pense qu'il y a moyen d'utiliser une procédure événementielle plus appropriée :

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

car avec celle de ton code actuel, l'utilisateur peut effectivement déplacer le curseur avec le clavier et faire pas mal de dégât sur ses réponses antérieures. Ce souci peut être résolu avec l'événement BeforeDoubleClick, d'abord car on ne peut modifier qu'une seule cellule à la fois et que pour modifier les questions précédentes, il faut vraiment le vouloir ;)

Voici le code, documenté, que je te propose :

Code:
[COLOR="Blue"]Option Explicit[/COLOR]

[COLOR="blue"]Private Sub[/COLOR] Worksheet_BeforeDoubleClick([COLOR="blue"]ByVal[/COLOR] Target [COLOR="blue"]As[/COLOR] Range, Cancel [COLOR="blue"]As Boolean[/COLOR])

[COLOR="Green"]' Déclaration des variables Li (ligne) et Col (colonne) en Long, car les propriétés
' Row et Column (Target.Row et Target.Column) sont eux-mêmes de type Long ; cela
' évite les conversion, voire les erreurs suivant le numéro de ligne[/COLOR]
[COLOR="blue"]Dim[/COLOR] Li [COLOR="blue"]As Long[/COLOR], Col [COLOR="blue"]As Long[/COLOR]

[COLOR="green"]  ' Le souci de l'ancienne procédure utilisée Private Sub Worksheet_SelectionChange,
  ' c'est qu'en se déplaçant avec les flêches, on pouvait par exemple en remontant
  ' les cellules avec la flêche vers le haut, modifier complètement les résultats et
  ' tout positionner à OUI ou à NON ou encore supprimer l'ancienne sélection
  ' suivant la colonne dans laquelle on faisait remonter le curseur


  ' Avant tout on évite qu'un double click entraîne le mode édition de cellule[/COLOR]  Cancel = [COLOR="blue"]True[/COLOR]
  
[COLOR="green"]  ' Par rapport à l'ancien code qui entraînait la fin de la procédure s'il y
  ' avait plusieurs cellules sélectionnées (Target.Count > 1) OU si la colonne
  ' était supérieure à 6 (c-à-d la colonne F) afin de ne pas réagir lorsque
  ' la cellule était à l'extérieur des colonnes utilisables du questionnaire,
  ' OU encore si la ligne était inférieure à 4 (les réponses au questionnaire
  ' commencent en ligne 4).
  ' Désormais, on peut oublier l'ancien code :
  '
  ' If Target.Count > 1 Or Target.Column > 6 Or Target.Row < 4 Then Exit Sub
  '
  ' et écrire à la place :
  '
  ' If Target.Column > 6 Or Target.Row < 4 Then Exit Sub
  '
  ' puisqu'il est impossible que plusieurs cellules soient "double-cliquées"
  ' (par la suite, je dirai simplement cliquée) en même temps.[/COLOR]  
  [COLOR="blue"]If[/COLOR] Target.Column > 6 [COLOR="blue"]Or[/COLOR] Target.Row < 4 [COLOR="blue"]Then Exit Sub[/COLOR]
  
[COLOR="green"]  ' On détermine la colonne et la ligne de la cellule cliquée[/COLOR]
  Li = Target.Row
  Col = Target.Column
  
[COLOR="green"]  ' Voici le traitement en fonction de la colonne de la cellule
  ' cliquée, d'où le Select Case.[/COLOR]
  [COLOR="blue"]Select Case[/COLOR] Col
[COLOR="green"]    '
    ' Si la colonne de la cellule cliquée est soit la colonne A
    ' soit la colonne B et que cette cellule ne soit pas vide
    ' (= fin du questionnaire), on réinitialise les "simili-Case
    ' d'option" à non cochées : colonnes C et E de la ligne dans
    ' laquelle le click a eu lieu, et on supprime la réponse
    ' éventuelle qui était stockée en colonne D de la feuille
    ' Echelles, sur la même ligne[/COLOR]
    [COLOR="blue"]Case[/COLOR] 1, 2
      [COLOR="blue"]If[/COLOR] Target <> "" [COLOR="blue"]Then[/COLOR]
        Range("C" & Li) = "¡"
        Range("E" & Li) = "¡"
        Sheets("Echelles").Cells(Li, "D") = ""
      [COLOR="blue"]End If[/COLOR]
[COLOR="green"]    '
    ' Si la colonne est soit C soit D, on marque le OUI de la
    ' colonne D ligne du click, comme coché, et on répercute
    ' l'info dans la feuille Echelles, colonne D, même ligne.[/COLOR]
    [COLOR="blue"]Case[/COLOR] 3, 4
      Cells(Li, 3) = "¤"
      Cells(Li, 5) = "¡"
      Sheets("Echelles").Cells(Li, "D") = "oui"
[COLOR="green"]    '
    ' Si la colonne est soit E soit F, on marque le NON de la
    ' colonne E ligne du click, comme coché, et on répercute
    ' l'info dans la feuille Echelles, colonne D, même ligne.[/COLOR]
    [COLOR="blue"]Case[/COLOR] 5, 6
      Cells(Li, 5) = "¤"
      Cells(Li, 3) = "¡"
      Sheets("Echelles").Cells(Li, "D") = "non"
      
    [COLOR="blue"]End Select[/COLOR]

[COLOR="blue"]End Sub[/COLOR]

A te lire,

@+

EDIT : Ajout du fichier
 

Pièces jointes

  • Copie Mon Formulaire final2.zip
    20.8 KB · Affichages: 56
  • Copie Mon Formulaire final2.zip
    20.8 KB · Affichages: 58
  • Copie Mon Formulaire final2.zip
    20.8 KB · Affichages: 55
Dernière édition:

phmad

XLDnaute Nouveau
Re : Comment activer et désactiver une fonction attachée à une cellule

Encore moi :confused:

La manip a fonctionné pour introduire une cellule H1 qui désactive la fonction, le pb est qu'elle désactive également le choix à faire dans les colonnes "oui" et "non" (colonnes CDEF).

Voici le code VBE qui se trouve dans ma feuille :


Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If ActiveSheet.Range("H1").Value <> "" Then Exit Sub
Dim Derli As Long, Li As Long, Col As Long

If Target.Count > 1 Or Target.Column > 6 Or Target.Row < 4 Then Exit Sub

Derli = Range("A65536").End(xlUp).Row
Li = Target.Row
Col = Target.Column

' clic en colonne A ou B pour initialiser
Select Case Col
Case 1, 2
If Target <> "" Then
Range("C" & Li) = "¡"
Range("E" & Li) = "¡"
Sheets("Echelles").Cells(Li, "D") = ""
End If

Case 3, 4
Cells(Li, 3) = "¤"
Cells(Li, 5) = "¡"
Sheets("Echelles").Cells(Li, "D") = "oui"

Case 5, 6
Cells(Li, 5) = "¤"
Cells(Li, 3) = "¡"
Sheets("Echelles").Cells(Li, "D") = "non"

End Select
End Sub
 

Pièces jointes

  • Copie Mon Formulaire final.zip
    19.7 KB · Affichages: 57
  • Copie Mon Formulaire final.zip
    19.7 KB · Affichages: 55
  • Copie Mon Formulaire final.zip
    19.7 KB · Affichages: 59

phmad

XLDnaute Nouveau
Re : Comment activer et désactiver une fonction attachée à une cellule

Merci Nolich, encore toi :p ; le secoureur (ou la secoureuse ?) des excelliens en détresse !!!

Encore merci pour la pédagogie, j'apprécie plus que plus.

Je vais donc recopié ton code et m'y plonger avec voluptué, pour y retrouver quelques bribes de compréhension terrienne, et merci pour les commentaires dans le code. En plus j'ai vu que tu avais déjà fait la modif dans mon fichier !! rapide comme l'éclair.

Comment faites vous pour présenter ce cadre avec un curseur contenant le code ? Très beau. Par contre, pas moyen de faire CtrC ou de l'imprimer en totalité ????

A bientôt.
 
Dernière édition:

phmad

XLDnaute Nouveau
Re : Comment activer et désactiver une fonction attachée à une cellule

Nolich, J'ai essayé ton nouveau fichier (pas encore essayé de comprendre le code, cela fume trop ds ma pauv tête sinon), mais je ne vois plus la cellule qui serait à cocher et plus aucune sélection ne fonctionne ?????:D

J'ai encore essayé de tout comprendre, mais trop dur !!!!

Quand tu te seras bien pris la tête pour trouver la solution (que tu vas de toutes les façons trouver), ce serait génial qu'il y ait une petite ligne de code qui me permette (en ayant déverrouillé les cellules "questionnaire", colonne B) de sélectionner toute la colonne B pour remettre toutes les réponses des colonnes C et E à 0. Sinon je suis obligé de remonter les cellules une par une pour les désactiver !!! En multipliant par 500 questions sur 5 questionnaires différents, multiplié par plus de 100 personnes à interroger (cela doit faire plus de 250 000 coup de curseurs ou de claviers, ce ne sera plus mon cerveau qui va chauffer !!!)
 
Dernière édition:

nolich

XLDnaute Occasionnel
Re : Comment activer et désactiver une fonction attachée à une cellule

Re le fil et re phmad, bonjour à toutes et à tous :)

phmad, il est normal qu'avec le code que je t'ai proposé, plus rien ne fonctionne en faisant un simple click de souris, puisqu'il faut maintenant effectuer un double click dans une des cellules OUI (colonnes C ou D) ou NON (colonnes E ou F).

Si cela peut te convenir, je peux mettre un bouton pour la remise à zéro des cellules OUI / NON.

Dis-moi car c'est très facile à mettre en oeuvre.

Maintenant, si tu préfères une solution du type que celle que James007 t'a proposé, aucun problème non plus en conservant la procédure :
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

En effet, il suffit de placer une valeur dans la colonne H (par exemple) puis, si l'utilsateur souhaite revenir sur une question à laquelle il a déjà répondu, de lui demander s'il souhaite vraiment modifier sa réponse.

Pour ce qui est de la remise à zéro des "simili-cases d'option", toujours un bouton car ce serait trop long manuellement.

A toi de nous dire la solution que tu choisis.

à+
 

Fo_rum

XLDnaute Accro
Re : Comment activer et désactiver une fonction attachée à une cellule

Salut,

...
J'ai encore essayé de tout comprendre, mais trop dur !!!!
...
Tiens t'en alors aux fondamentaux !
...
Sinon je suis obligé de remonter les cellules une par une pour les désactiver !!!
Sans VBA : Sélectionne 2 cellules "nettoyées" et tire les vers le bas, vers le haut. Deux coups de souris suffisent !!!

C'est bien de vouloir créer un programme mais il faut quand même un minimum de connaissances !
Maintenant si tu connais quelqu'un pour te faire tout le bouleau ... la moindre des choses est lui donner clairement tous les renseignements nécessaires !
Pour ma part, je me refuse à reprendre sans cesse une demande avec des modifications de dernière minute.
 

phmad

XLDnaute Nouveau
Re : Comment activer et désactiver une fonction attachée à une cellule

Bonjour Fo rum,

Je suis surpris de ta remarque acide et ironique au sujet de mes compétences en VBE.

Je n'ai jamais prétendu être un pro en la matière, raison pour laquelle je sollicite votre aide ! Je n'avais pas lu que le forum n'était réservé qu'aux experts.

D'autre part, les demandes de dernière minutes comme tu le dis, ne sont jamais prévisibles dans un projet de quelque chose que l'on a jamais réalisé soi-même, sinon, encore une fois, le forum serait inutile.

D'autre part rien ni personnene t'oblige à m'aider ou à me répondre.

Ceci mis à part, je te saurais toujours reconnaissant de ton aide fondamentale dans la réalisation de ce travail et je t'en remercie encore.

Cordialement. Philippe.
 

nolich

XLDnaute Occasionnel
Re : Comment activer et désactiver une fonction attachée à une cellule

Re le fil, bonjour Fo_rum, bonjour à toutes et à tous :)

Keep cool ;)

Chacun vient ici avec des questions et ce n'est pas toujours facile d'établir un cahier des charges avant de prendre connaissance des solutions qui sont proposées à chacun.

Fo_rum, phmad n'a jamais caché qu'il ne connaissait pas VBA mais qui a toujours sollicité des explications pour pouvoir se débrouiller seul.

phmad, si tu savais le nombre de questions identiques qui sont posées sur un même sujet parce que les nouveaux XLDnautes n'ont pas cherché dans la base de données des forums, tu comprendrais un peu mieux la réaction de Fo_rum qui est, et de loin, tout sauf élitiste.

Voilà. J'avais besoin de le dire.

J'ai déjà été un XLDnaute barbatruc mais j'ai oublié mon ancien pseudo et son mot de passe. Je me rends compte, après plusieurs mois sans pratiquer XL, que ça met un peu de temps à revenir mais c'est pas grave. Le nombre de posts ne fait pas l'XLDnaute Barbatruc ou autre :)

Je prends simplement comme exemple, bien éloigné de mes capacités, de _Ti qui a déjà créé des codes extraordinaires. La valeur n'attends ni le nombre d'années, ni le nombre de posts.

@+
 

phmad

XLDnaute Nouveau
Re : Comment activer et désactiver une fonction attachée à une cellule

Merci Nolich pour tes encouragements et tes explications, mais c'est peut-être cela un vrai forum : un lieu où on puisse s'engueuler tranquillement entre nous :).

En ce qui me concerne, j'ai plus qu'envie de comprendre la démarche et à chaque fois je cherche d'abord dans ce forum et ds d'autres si mon pb a déjà été abordé. Et si cela avait été le cas, n'auriez vous pas été les premiers à me le rappeler ?

Pour l'instant vous êtes vraiment les meilleurs (je le pense vraiment), cad à la fois doués en programmation et très concrets, et sans doute aussi victimes de votre succès (quand on voit tous les messages par jour : gigantesque !!).

Mais vous qui baignez dedans, cela vous semble évident, mais je vous assure que cela ne l'ai vraiment pas du tout.

Je suis persuadé que les informaticiens de métier ont autant de pbs concrets à résoudre au fur et à mesure de l'élaboration d'un projet, avec plein d'éléments auxquels on ne pense pas tjs.

En bref vous êtes géniaux !! Restez le jusqu'au bout. Et encore merci.
 

Discussions similaires

Statistiques des forums

Discussions
312 358
Messages
2 087 581
Membres
103 598
dernier inscrit
f-laurent