Private Sub Worksheet_SelectionChange sous conditions
Fermé
domimeca
Messages postés
35
Date d'inscription
lundi 22 juin 2009
Statut
Membre
Dernière intervention
16 décembre 2017
-
Modifié le 8 déc. 2017 à 18:53
domimeca Messages postés 35 Date d'inscription lundi 22 juin 2009 Statut Membre Dernière intervention 16 décembre 2017 - 16 déc. 2017 à 12:59
domimeca Messages postés 35 Date d'inscription lundi 22 juin 2009 Statut Membre Dernière intervention 16 décembre 2017 - 16 déc. 2017 à 12:59
A voir également:
- Private sub worksheet_selectionchange(byval target as range)
- Navigation in private - Guide
- Out of range ✓ - Forum Matériel & Système
- Tap provider v9 for private tunnel carte ✓ - Forum Windows 7
- Input signal out of range - Forum Ecran
- D sub out of range - Forum Matériel & Système
21 réponses
f894009
Messages postés
17181
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
21 mars 2024
1 701
8 déc. 2017 à 11:29
8 déc. 2017 à 11:29
Bonjour,
pourquoi avez vous mis ceci:
pourquoi avez vous mis ceci:
If ActiveCell.Value = 0 Then Application.EnableEvents = False Else Application.EnableEvents = True End If
domimeca
Messages postés
35
Date d'inscription
lundi 22 juin 2009
Statut
Membre
Dernière intervention
16 décembre 2017
1
9 déc. 2017 à 09:57
9 déc. 2017 à 09:57
Bonjour f894009
Au départ seule ma cellule A1 était concernée. Au fur et à mesure de l'utilisation de ma feuille avec les insertion vont changer A1 en A10,A11 etc et il faudra qu'elle marche ici. L'idée était d'affecter de A1 à A2000 et si la cellule est vide, lorsque on la sélectionne rien ne se passe. Si vous avez une idée pour faire "circuler" l'appli de A1 qui en devenant A21 marche encore je suis preneur.N.B. dans ce dernier cas l'appli se fera sur toutes les cellules entre A1 et A21.
J'espère être arrivé à me faire comprendre.
Au départ seule ma cellule A1 était concernée. Au fur et à mesure de l'utilisation de ma feuille avec les insertion vont changer A1 en A10,A11 etc et il faudra qu'elle marche ici. L'idée était d'affecter de A1 à A2000 et si la cellule est vide, lorsque on la sélectionne rien ne se passe. Si vous avez une idée pour faire "circuler" l'appli de A1 qui en devenant A21 marche encore je suis preneur.N.B. dans ce dernier cas l'appli se fera sur toutes les cellules entre A1 et A21.
J'espère être arrivé à me faire comprendre.
f894009
Messages postés
17181
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
21 mars 2024
1 701
9 déc. 2017 à 10:02
9 déc. 2017 à 10:02
Bonjour,
Vous ne repondez pas a la question car cette partie de code si vous cliquer sur une cellule vide bloque tout excel
Comprends pas ce que vous voulez.
Vous ne repondez pas a la question car cette partie de code si vous cliquer sur une cellule vide bloque tout excel
Comprends pas ce que vous voulez.
domimeca
Messages postés
35
Date d'inscription
lundi 22 juin 2009
Statut
Membre
Dernière intervention
16 décembre 2017
1
9 déc. 2017 à 11:50
9 déc. 2017 à 11:50
Je vais essayer d'être plus clair.
Mon classeur permet d'obtenir un planning annuel d'entretien de climatisation sur des autocars. Sur certains véhicules on change le déshydrateur chaque année donc à chaque fois et sur d'autres seulement une fois sur deux, donc tous les deux ans. Lorsque je rentre ma date de dernière intervention, msgbox. "avez vous changé le déshydrateur?"
Si "oui" l’échéance "prochain changement de deshy" passe automatiquement "date d'intervention + 2 ans ou plus 1 an" suivant le type de véhicule.
Si "non" l’échéance "prochain changement de deshy" ne change pas.
Le problème est qu'a chaque fois que je crée un nouveau véhicule je crée une insertion, donc ma cellule A1 va devenir A2 et je voudrais que l'appli marche aussi sur cette dernière.
Mon classeur permet d'obtenir un planning annuel d'entretien de climatisation sur des autocars. Sur certains véhicules on change le déshydrateur chaque année donc à chaque fois et sur d'autres seulement une fois sur deux, donc tous les deux ans. Lorsque je rentre ma date de dernière intervention, msgbox. "avez vous changé le déshydrateur?"
Si "oui" l’échéance "prochain changement de deshy" passe automatiquement "date d'intervention + 2 ans ou plus 1 an" suivant le type de véhicule.
Si "non" l’échéance "prochain changement de deshy" ne change pas.
Le problème est qu'a chaque fois que je crée un nouveau véhicule je crée une insertion, donc ma cellule A1 va devenir A2 et je voudrais que l'appli marche aussi sur cette dernière.
f894009
Messages postés
17181
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
21 mars 2024
1 701
9 déc. 2017 à 12:05
9 déc. 2017 à 12:05
Re,
Pouvez-vous mettre votre classeur a dispo ??
Pour transmettre un fichier,
Veillez a ce qu'il n'y ait PAS DE DONNEES CONFIDENTIELLES
il faut passer par un site de pièce jointe tel que cjoint.com
Allez sur ce site : https://www.cjoint.com/
Clic sur parcourir,
Cherche ton fichier,
clic sur ouvrir,
Clic sur "Créer le lien cjoint",
Copier le lien,
Revenir ici le coller dans une réponse...
ou
'mon partage
https://mon-partage.fr/
Pouvez-vous mettre votre classeur a dispo ??
Pour transmettre un fichier,
Veillez a ce qu'il n'y ait PAS DE DONNEES CONFIDENTIELLES
il faut passer par un site de pièce jointe tel que cjoint.com
Allez sur ce site : https://www.cjoint.com/
Clic sur parcourir,
Cherche ton fichier,
clic sur ouvrir,
Clic sur "Créer le lien cjoint",
Copier le lien,
Revenir ici le coller dans une réponse...
ou
'mon partage
https://mon-partage.fr/
yg_be
Messages postés
22624
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
28 mars 2024
1 461
Modifié le 9 déc. 2017 à 12:40
Modifié le 9 déc. 2017 à 12:40
bonjour, et ainsi?
pourquoi utilises-tu _SelectionChange? moi je suggère _Change
Range("A:A")au lieu de
Range("A1:A10")(modifié sur suggestion de f894009, merci et bonjour)
pourquoi utilises-tu _SelectionChange? moi je suggère _Change
f894009
Messages postés
17181
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
21 mars 2024
1 701
9 déc. 2017 à 12:27
9 déc. 2017 à 12:27
Bonjour yg_be
Ca roule??
Vois pas la difference!!
_Change serait le plus logique
Pour cela que je demane son fichier
Ca roule??
Range("A1:A10") au lieu de Range("A1:A10")
Vois pas la difference!!
_Change serait le plus logique
Pour cela que je demane son fichier
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
domimeca
Messages postés
35
Date d'inscription
lundi 22 juin 2009
Statut
Membre
Dernière intervention
16 décembre 2017
1
9 déc. 2017 à 14:52
9 déc. 2017 à 14:52
Voici le lien de mon fichier:https://www.cjoint.com/c/GLjnEq8xULL
c'est un fichier d'essais.
Pour l'instant il n'y a pas l'appli dont je vous parle, je faisais des essais sur un classeur lambda, et j'aurais essayé de l'adapter. Je pensait mettre cette sub() sur la feuil1 qui une fois dupliquée se retrouverais sur chaque feuilles client. Sur la feuille client seule la cellule "dernière inter" sera déprotégée. P.S. ne tenez pas compte des différentes échéance d'entretien, seule "1an" sera utilisée je vais supprimer les autres et suggérerez "chaque fois" ou "une fois sur deux" dans la cellule "échange deshy prévu" lors de l'enregistrement du nouveau véhicule.
J'espère avoir été presque clair, en tout cas merci beaucoup à tous ceux qui se penche sur mon problème.
c'est un fichier d'essais.
Pour l'instant il n'y a pas l'appli dont je vous parle, je faisais des essais sur un classeur lambda, et j'aurais essayé de l'adapter. Je pensait mettre cette sub() sur la feuil1 qui une fois dupliquée se retrouverais sur chaque feuilles client. Sur la feuille client seule la cellule "dernière inter" sera déprotégée. P.S. ne tenez pas compte des différentes échéance d'entretien, seule "1an" sera utilisée je vais supprimer les autres et suggérerez "chaque fois" ou "une fois sur deux" dans la cellule "échange deshy prévu" lors de l'enregistrement du nouveau véhicule.
J'espère avoir été presque clair, en tout cas merci beaucoup à tous ceux qui se penche sur mon problème.
f894009
Messages postés
17181
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
21 mars 2024
1 701
9 déc. 2017 à 17:54
9 déc. 2017 à 17:54
Re,
Quel est le rapport entre le code que vous avez mis dans votre demande au debut et ce code qui est dans chaque feuille client? Que doit faire ce code car correspond a rien ???????????????????????????
Quel est le rapport entre le code que vous avez mis dans votre demande au debut et ce code qui est dans chaque feuille client? Que doit faire ce code car correspond a rien ???????????????????????????
Private Sub Worksheet_Change(ByVal Target As Range) Dim Sh As Worksheet If Intersect(Range("J3"), Target) Is Nothing Then Exit Sub For Each Sh In Worksheets If Sh.Range("E1").Value = Target.Value Then Sh.Activate Sh.Range("A1").Activate End If Next Sh End Sub
domimeca
Messages postés
35
Date d'inscription
lundi 22 juin 2009
Statut
Membre
Dernière intervention
16 décembre 2017
1
9 déc. 2017 à 18:48
9 déc. 2017 à 18:48
Je vous prépare un fichier plus propre qui ressemblera plus au fichier final.
domimeca
Messages postés
35
Date d'inscription
lundi 22 juin 2009
Statut
Membre
Dernière intervention
16 décembre 2017
1
9 déc. 2017 à 18:23
9 déc. 2017 à 18:23
Oups! En effet il ne sert à rien, c'est à force de "copier coller" par rapport à un ancien fichier qui nommait mes nouvelles feuilles que j'avais fait il y a très longtemps. Je voulais mettre à sa place celle du début mais bien entendu en changeant Range (A1:A10) par (G9) et ma macro aller récupérer la valeur de (N9) qui aurait été =MOIS.DECALER(G9;24). Mes codes sont probablement assez brouillon, c'est le résultat de mon noviciat.Encore merci mille fois de vous pencher sur mon problème.
domimeca
Messages postés
35
Date d'inscription
lundi 22 juin 2009
Statut
Membre
Dernière intervention
16 décembre 2017
1
9 déc. 2017 à 22:23
9 déc. 2017 à 22:23
Voici donc mon fichier final:https://www.cjoint.com/c/GLjvjNuPctL
Le mot de passe pour déverrouiller feuille et structure est "juju"
Le mot de passe demandé pour supprimer un client est "dominique"
Comme vous pourrez le constater, sur ma feuille client lorsque je change la date d'intervention, pour les véhicules ou l'échange deshy est prévu tous les deux ans, la date d’échéance augmente de eux ans, ce qui est logique or il faudrait qu'elle ne change qu'une fois sur deux. Je pourrais peut être mettre une formule par rapport à aujourd'hui mais cela dépendra du jour ou on fait la saisie. C'est pour cela que je préfère la MsgBox comme sur mon essais de code au début de cette discussion.
Encore merci pour votre patience avec les débutants.
Le mot de passe pour déverrouiller feuille et structure est "juju"
Le mot de passe demandé pour supprimer un client est "dominique"
Comme vous pourrez le constater, sur ma feuille client lorsque je change la date d'intervention, pour les véhicules ou l'échange deshy est prévu tous les deux ans, la date d’échéance augmente de eux ans, ce qui est logique or il faudrait qu'elle ne change qu'une fois sur deux. Je pourrais peut être mettre une formule par rapport à aujourd'hui mais cela dépendra du jour ou on fait la saisie. C'est pour cela que je préfère la MsgBox comme sur mon essais de code au début de cette discussion.
Encore merci pour votre patience avec les débutants.
f894009
Messages postés
17181
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
21 mars 2024
1 701
10 déc. 2017 à 08:57
10 déc. 2017 à 08:57
Bonjour,
Je regarde la chose
Je regarde la chose
yg_be
Messages postés
22624
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
28 mars 2024
1 461
Modifié le 10 déc. 2017 à 09:37
Modifié le 10 déc. 2017 à 09:37
ne serait-ce pas plus logique d'enregistrer pour chaque véhicule la date du dernier échange deshy?
f894009
Messages postés
17181
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
21 mars 2024
1 701
10 déc. 2017 à 09:20
10 déc. 2017 à 09:20
Re,
Comment vous faites pour changer la date sur une feuille client vu que cette feuille est protegee??????
Vous ne recreez pas un nouveau vehicule?????????????
Comment vous faites pour changer la date sur une feuille client vu que cette feuille est protegee??????
Vous ne recreez pas un nouveau vehicule?????????????
domimeca
Messages postés
35
Date d'inscription
lundi 22 juin 2009
Statut
Membre
Dernière intervention
16 décembre 2017
1
10 déc. 2017 à 10:18
10 déc. 2017 à 10:18
Bonjour à vous deux,
Pour répondre à yg_be, c'est évident mais le petit luxe que je voulais apporter à ce planning était de rentrer seulement la date de la dernière intervention et tout se faisait automatiquement en répondant oui ou non à la question "avez-vous changé le deshy?"
f894009, sur la feuille client la cellule "dernière inter." est libre d’accès. Ma macro partant de vbYes ou vbNo déprotègera et reprotégera ma feuille comme je l'ai déjà fait sur d'autre dans mon classeur.
Pour répondre à yg_be, c'est évident mais le petit luxe que je voulais apporter à ce planning était de rentrer seulement la date de la dernière intervention et tout se faisait automatiquement en répondant oui ou non à la question "avez-vous changé le deshy?"
f894009, sur la feuille client la cellule "dernière inter." est libre d’accès. Ma macro partant de vbYes ou vbNo déprotègera et reprotégera ma feuille comme je l'ai déjà fait sur d'autre dans mon classeur.
f894009
Messages postés
17181
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
21 mars 2024
1 701
10 déc. 2017 à 10:35
10 déc. 2017 à 10:35
Re,
cellule "dernière inter."
Le changement de la date sur cette cellule conditionne la date de la cellule echeance (d'apres vos formules)
Cette date c'est quel type d'interv, portnawak ou que le deshy ???
cellule "dernière inter."
Le changement de la date sur cette cellule conditionne la date de la cellule echeance (d'apres vos formules)
Cette date c'est quel type d'interv, portnawak ou que le deshy ???
f894009
Messages postés
17181
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
21 mars 2024
1 701
10 déc. 2017 à 10:37
10 déc. 2017 à 10:37
Re,
Conditionne aussi ech deshy donc pas compatible
Conditionne aussi ech deshy donc pas compatible
domimeca
Messages postés
35
Date d'inscription
lundi 22 juin 2009
Statut
Membre
Dernière intervention
16 décembre 2017
1
10 déc. 2017 à 11:21
10 déc. 2017 à 11:21
Donc si je comprends bien, une même cellule ne peut pas en conditionner deux autres avec chacune une formule différente?
f894009
Messages postés
17181
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
21 mars 2024
1 701
10 déc. 2017 à 11:32
10 déc. 2017 à 11:32
Re,
je repete: le date dernier inter c'est quoi ??
La cellule echeance doit donner quelle date??
je repete: le date dernier inter c'est quoi ??
La cellule echeance doit donner quelle date??
domimeca
Messages postés
35
Date d'inscription
lundi 22 juin 2009
Statut
Membre
Dernière intervention
16 décembre 2017
1
10 déc. 2017 à 12:24
10 déc. 2017 à 12:24
La dernière inter c'est la dernière fois que l'on fait une révision de la climatisation (chaque année car obligatoire) donc la prochaine révision sera un an après. Pour certains véhicules lors de cette révision annuelle on change le deshydrateur une fois sur deux. Pour les autres on le change à chaque fois.
Exemple pour "une fois sur deux":
1:le 10/12/2017 j'ai fais la révision annuelle et j'ai changé le deshydrateur (vbYes) donc ma prochaine révision annuelle (échéance) devra avoir lieu le 10/12/2018 mais je devrais changer le désydrateur (ech. deshy)le 10/12/2019.
2: le 15/12/2018 je fais la révision annuelle prévue mais je ne change pas le deshydrateur car pas arrivé à échéance (vbNo). Ma date (éch déshydrateur) reste inchangée (10/12/2019), ma prochaine échéance révision (échéance) sera le 15/12/2019.
Ce jour il faudra que je fasse la révision obligatoire et que je change le deshy.
J'espère être arrivé à me faire comprendre.
Exemple pour "une fois sur deux":
1:le 10/12/2017 j'ai fais la révision annuelle et j'ai changé le deshydrateur (vbYes) donc ma prochaine révision annuelle (échéance) devra avoir lieu le 10/12/2018 mais je devrais changer le désydrateur (ech. deshy)le 10/12/2019.
2: le 15/12/2018 je fais la révision annuelle prévue mais je ne change pas le deshydrateur car pas arrivé à échéance (vbNo). Ma date (éch déshydrateur) reste inchangée (10/12/2019), ma prochaine échéance révision (échéance) sera le 15/12/2019.
Ce jour il faudra que je fasse la révision obligatoire et que je change le deshy.
J'espère être arrivé à me faire comprendre.
f894009
Messages postés
17181
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
21 mars 2024
1 701
10 déc. 2017 à 13:51
10 déc. 2017 à 13:51
Re,
J'espère être arrivé à me faire comprendre.
Oui, en expliquant ce que vous faites avec votre "appli"
je repete la question:
La cellule echeance doit donner quelle date??
J'ai ma facon de voir, mais quelle est la votre??
Votre "appli" sert uniquement aux interventions revisions annuelles avec ou pas changement de deshy
Si avec changement annuel
_ saisie date dernier inter qui donne date ech deshy=dernier inter+1 et echeance idem
Si avec changement deux ans:
a la premiere revision:
_ saisie date dernier inter
_ pas de changement date ech deshy
_ date echeance = date ech deshy
a la deuxieme revision
_comme changement annuel sauf date ech deshy =dernier inter+2
Mais si vous ne faites pas les visites a jour jour pile, faudra voir
Donc, pour moi les formules pas jouable
J'espère être arrivé à me faire comprendre.
Oui, en expliquant ce que vous faites avec votre "appli"
je repete la question:
La cellule echeance doit donner quelle date??
J'ai ma facon de voir, mais quelle est la votre??
Votre "appli" sert uniquement aux interventions revisions annuelles avec ou pas changement de deshy
Si avec changement annuel
_ saisie date dernier inter qui donne date ech deshy=dernier inter+1 et echeance idem
Si avec changement deux ans:
a la premiere revision:
_ saisie date dernier inter
_ pas de changement date ech deshy
_ date echeance = date ech deshy
a la deuxieme revision
_comme changement annuel sauf date ech deshy =dernier inter+2
Mais si vous ne faites pas les visites a jour jour pile, faudra voir
Donc, pour moi les formules pas jouable
f894009
Messages postés
17181
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
21 mars 2024
1 701
10 déc. 2017 à 14:11
10 déc. 2017 à 14:11
Re,
Il faut une info supplementaire colonne J: type de changement deshy a un an ou deux pour les calculs echeance deshy
Question: a la date changement dshy, c'est fait obligatoirement ou pas
Il faut une info supplementaire colonne J: type de changement deshy a un an ou deux pour les calculs echeance deshy
Question: a la date changement dshy, c'est fait obligatoirement ou pas
domimeca
Messages postés
35
Date d'inscription
lundi 22 juin 2009
Statut
Membre
Dernière intervention
16 décembre 2017
1
10 déc. 2017 à 15:06
10 déc. 2017 à 15:06
Le choix changement de deshy 1 fois sur deux ou chaque année se fait lors de l'enregistrement du véhicule après on ne peu plus le changer ou alors on supprime le véhicule et on le réenregistre. Il faut savoir que lorsqu'on change un deshy on fait obligatoirement une révision générale. Donc pas d’intérêt à connaître la date de ce dit changement. Si il y a une différence d'un ou deux mois entre les deux échéance pas de problème, lors de la prochaine révision tout se remettra dans l'ordre. Essayez d'enregistrer un nouveau véhicule bidon vous comprendrez plus facilement où je veux en venir. Sur la page client Querard il y a les deux sorte de véhicule.
domimeca
Messages postés
35
Date d'inscription
lundi 22 juin 2009
Statut
Membre
Dernière intervention
16 décembre 2017
1
10 déc. 2017 à 15:17
10 déc. 2017 à 15:17
Ce qui m’intéresse surtout, c'est d'avoir une MsgBox vbYesNoCancel lorque je sélectionne une des cellule non vide dans la colonne G (à partir de G9) si vbYes ma formule de la cellule H contiguë sera G + 2ans et si vbNo un copier collé valeur sur la cellule H contiguë afin de figer la date. Pour l'échange de formule ou effacement de formule j'ai déjà la macro, le tout c'est de pouvoir la lancer avec ma MsgBox
f894009
Messages postés
17181
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
21 mars 2024
1 701
10 déc. 2017 à 16:12
10 déc. 2017 à 16:12
Re,
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Count > 1 Then Exit Sub If Not Application.Intersect(Target, Range("G9:G" & Range("G" & Rows.Count).End(xlUp).Row)) Is Nothing Then Réponse = MsgBox("avez-vous changé le deshydrateur", vbYesNoCancel, "echeance deshy") If Réponse = vbYes Then 'ma macro qui finit par activecell.clearcontent pour pouvoir remplir ma cellule" ElseIf Réponse = vbNo Then 'ma deuxième macro qui finit par activecell.clearcontent pour pouvoir remplir ma cellule" End If End If End Sub
domimeca
Messages postés
35
Date d'inscription
lundi 22 juin 2009
Statut
Membre
Dernière intervention
16 décembre 2017
1
10 déc. 2017 à 17:26
10 déc. 2017 à 17:26
Génial, Je viens d'essayer rapidement sur un classeur vierge, c'est exactement ce que je cherchais. Maintenant à moi de l'adapter à mon classeur, rajouter un bloc if si la valeur de la cellule H (RC[+1]) contiguë est =MOIS.DECALER(RC[-1];12) pour l'arrêter. puis mettre mes macros.
Encore milles mercis pour votre patience.
Je ne ferais pas ça ce soir, mais je vous tiendrais au courant.
Encore milles mercis pour votre patience.
Je ne ferais pas ça ce soir, mais je vous tiendrais au courant.
f894009
Messages postés
17181
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
21 mars 2024
1 701
10 déc. 2017 à 18:37
10 déc. 2017 à 18:37
Content pour vous
domimeca
Messages postés
35
Date d'inscription
lundi 22 juin 2009
Statut
Membre
Dernière intervention
16 décembre 2017
1
11 déc. 2017 à 13:43
11 déc. 2017 à 13:43
Bonjour f894009
?? le code ne marche plus ce matin. Après des galères pour l'adapter à mon fichier par rapport à la cellule active et le bloc if pour Application.EnableEvents = False/True plus de réaction. Retour sur mon classeur vierge, rien non plus, aucune réaction. Voici la petite modif qui m'a permit de l'essayer hier soir:
Que se passe-t'il? Avez-vous une idée?
?? le code ne marche plus ce matin. Après des galères pour l'adapter à mon fichier par rapport à la cellule active et le bloc if pour Application.EnableEvents = False/True plus de réaction. Retour sur mon classeur vierge, rien non plus, aucune réaction. Voici la petite modif qui m'a permit de l'essayer hier soir:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
If Not Application.Intersect(Target, Range("G9:G" & Range("G" & Rows.Count).End(xlUp).Row)) Is Nothing Then
Réponse = MsgBox("avez-vous changé le deshydrateur", vbYesNoCancel, "echeance deshy")
If Réponse = vbYes Then
Range("A5").Select
'ma macro qui finit par activecell.clearcontent pour pouvoir remplir ma cellule"
ElseIf Réponse = vbNo Then
Range("B5").Select
'ma deuxième macro qui finit par activecell.clearcontent pour pouvoir remplir ma cellule"
End If
End If
End Sub
Que se passe-t'il? Avez-vous une idée?
f894009
Messages postés
17181
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
21 mars 2024
1 701
11 déc. 2017 à 14:16
11 déc. 2017 à 14:16
Bonjour,
Application.EnableEvents = False/True plus de réaction.
C'est ce que je vous ai explique, ce code bloque tout. Pourquoi vous l'utilisez????????????
Vu que vous ne vouliez que ce que je vous ai donne comme code, ben a vous de voir!!!
Application.EnableEvents = False/True plus de réaction.
C'est ce que je vous ai explique, ce code bloque tout. Pourquoi vous l'utilisez????????????
Vu que vous ne vouliez que ce que je vous ai donne comme code, ben a vous de voir!!!
domimeca
Messages postés
35
Date d'inscription
lundi 22 juin 2009
Statut
Membre
Dernière intervention
16 décembre 2017
1
14 déc. 2017 à 07:32
14 déc. 2017 à 07:32
Bonjour.
Désolé pour cette réaction tardive, mais les derniers événements météorologiques en Vendée m'ont privé d'internet pendant ces 4 jours.
Un problème que je n'avais pas anticipé. Pour pouvoir appliquer mes macros, il faudrait que je puisse trouver l'adresse de la dernière cellule modifiée, et sélectionner sa contiguë sur la colonne H donc sur la même ligne +1. Ceci en début d'application. Peut que quand je serais arrivé à corriger mon erreur de syntaxe, mon code marchera.
Ci dessous le code que je pensais pouvoir appliquer:
L'erreur de syntaxe est manifestement au niveau de la valeur de ma variante.
Désolé pour cette réaction tardive, mais les derniers événements météorologiques en Vendée m'ont privé d'internet pendant ces 4 jours.
Un problème que je n'avais pas anticipé. Pour pouvoir appliquer mes macros, il faudrait que je puisse trouver l'adresse de la dernière cellule modifiée, et sélectionner sa contiguë sur la colonne H donc sur la même ligne +1. Ceci en début d'application. Peut que quand je serais arrivé à corriger mon erreur de syntaxe, mon code marchera.
Ci dessous le code que je pensais pouvoir appliquer:
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Count > 1 Then Exit Sub Dim Saisie1 As Variant Saisie1=EDATE(RC[-1],12) If Not Application.Intersect(Target, Range("G9:G" & Range("G" & Rows.Count).End(xlUp).Row)) Is Nothing Then 'j'annule l'application si ma cellule a déjà la formule + 12 mois par rapport à ma cellule de saisie d'intervention If ActiveCell.FormulaR1C1 = Saisie1 Then Application.EnableEvents = False Else Application.EnableEvents = True End If Réponse = MsgBox("avez-vous changé le deshydrateur", vbYesNoCancel, "echeance deshy") If Réponse = vbYes Then ActiveSheet.Unprotect Password:="juju" ActiveCell.FormulaR1C1 = "=EDATE(RC[-1],24)" ActiveSheet.Protect Password:="juju", DrawingObjects:=True, Contents:=True, Scenarios:=True _ , AllowFormattingRows:=True, AllowSorting:=True ElseIf Réponse = vbNo Then ActiveSheet.Unprotect Password:="juju" ActiveCell.Select With Selection.Interior .Pattern = xlSolid .PatternColorIndex = xlAutomatic .ThemeColor = xlThemeColorAccent3 .TintAndShade = 0.399975585192419 .PatternTintAndShade = 0 End With ActiveSheet.Protect Password:="juju", DrawingObjects:=True, Contents:=True, Scenarios:=True _ , AllowFormattingRows:=True, AllowSorting:=True End If End If End Sub
L'erreur de syntaxe est manifestement au niveau de la valeur de ma variante.
yg_be
Messages postés
22624
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
28 mars 2024
1 461
14 déc. 2017 à 09:27
14 déc. 2017 à 09:27
Il serait préférable que tu expliques en français, sans code ni formule, ce que tu veux faire avec la cellule contiguë.
par ailleurs, quand tu as une erreur de syntaxe, sois factuel: informe-nous du message d'erreur et de la ligne affectée. quand tu écris "manifestement", je lis "probablement".
par ailleurs, quand tu as une erreur de syntaxe, sois factuel: informe-nous du message d'erreur et de la ligne affectée. quand tu écris "manifestement", je lis "probablement".
domimeca
Messages postés
35
Date d'inscription
lundi 22 juin 2009
Statut
Membre
Dernière intervention
16 décembre 2017
1
14 déc. 2017 à 16:14
14 déc. 2017 à 16:14
Bonjour yg_be
Ci-joint une capture d'écran qui je l’espère aidera a comprendre mon problème. (Ne tiens pas compte de la cellule liste H4, j'ai fait un montage pour faire apparaître la msgbox)
Pour le véhicule RT 253 LM lorsque je change la date "dernière inter" apparait (grâce à f894009 la MsgBox.
Si je clique oui, la date "échéance deshy H augmente de deux ans par rapport à ma dernière inter
(MOIS.DECALER G9;24).
Si je clique non, elle reste inchangée (copier,collé valeur G9).
Même chose pour le véhicule AF 258 DE.
Pour le véhicule AZ 853 GF "échéance deshy (H10) la formule est MOIS.DECALER(G10;12). Lorsque on change la "dernière inter" aucune MsgBox n'apparait car on ne modifie jamais cette formule c'est toujours + un an au même titre que toute les cellules de la colonne I. On fait une révision de la climatisation des véhicules chaque année, mais pour certains (cellule échéance en bleu) on change le deshy seulement une fois sur deux.
Mon problème:dès que j'ai changé la date je suis obligé de sortir de la cellule pour la valider et donc faire apparaître la MsgBox. Pour pouvoir changer ou supprimer la formule de ma cellule "H" attenante il faut qu'elle devienne "ActiveCell". L'autre problème est que au fil des enregistrements de nouveaux véhicules, par système d'insertion de ligne, le couple G9 H9 va devenir G10 H10, puis G11 H11 etc. Donc je pensais à chaque application déterminer la nouvelle adresse de la cellule H par rapport à la cellule G que l'on vient de modifier et la sélectionner (pour la mettre en ActiveCell) et insérer ou pas ma formule. Cependant, si la formule qui se trouve déjà dedans est (MOIS.DECALER(G"";12)) un bloc If pour que l'application ne se lance pas.
Tu trouvera mon fichier ici: N.B. le mot de passe unique pour déverrouiller la structure du Classeur et la protection de la feuille est:"juju"
https://www.cjoint.com/c/GLopgJforsL
Ci-joint une capture d'écran qui je l’espère aidera a comprendre mon problème. (Ne tiens pas compte de la cellule liste H4, j'ai fait un montage pour faire apparaître la msgbox)
Pour le véhicule RT 253 LM lorsque je change la date "dernière inter" apparait (grâce à f894009 la MsgBox.
Si je clique oui, la date "échéance deshy H augmente de deux ans par rapport à ma dernière inter
(MOIS.DECALER G9;24).
Si je clique non, elle reste inchangée (copier,collé valeur G9).
Même chose pour le véhicule AF 258 DE.
Pour le véhicule AZ 853 GF "échéance deshy (H10) la formule est MOIS.DECALER(G10;12). Lorsque on change la "dernière inter" aucune MsgBox n'apparait car on ne modifie jamais cette formule c'est toujours + un an au même titre que toute les cellules de la colonne I. On fait une révision de la climatisation des véhicules chaque année, mais pour certains (cellule échéance en bleu) on change le deshy seulement une fois sur deux.
Mon problème:dès que j'ai changé la date je suis obligé de sortir de la cellule pour la valider et donc faire apparaître la MsgBox. Pour pouvoir changer ou supprimer la formule de ma cellule "H" attenante il faut qu'elle devienne "ActiveCell". L'autre problème est que au fil des enregistrements de nouveaux véhicules, par système d'insertion de ligne, le couple G9 H9 va devenir G10 H10, puis G11 H11 etc. Donc je pensais à chaque application déterminer la nouvelle adresse de la cellule H par rapport à la cellule G que l'on vient de modifier et la sélectionner (pour la mettre en ActiveCell) et insérer ou pas ma formule. Cependant, si la formule qui se trouve déjà dedans est (MOIS.DECALER(G"";12)) un bloc If pour que l'application ne se lance pas.
Tu trouvera mon fichier ici: N.B. le mot de passe unique pour déverrouiller la structure du Classeur et la protection de la feuille est:"juju"
https://www.cjoint.com/c/GLopgJforsL
yg_be
Messages postés
22624
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
28 mars 2024
1 461
14 déc. 2017 à 21:15
14 déc. 2017 à 21:15
la phrase suivante n'est pas correcte:
"Pour pouvoir changer ou supprimer la formule de ma cellule "H" attenante il faut qu'elle devienne "ActiveCell"."
Il est même chaudement recommandé de ne jamais utiliser "active" ou "select" dans une macro.
par ailleurs, je ne comprends absolument pas pourquoi tu utilises des formules dans ton code.
je pense que ton problème, c'est que tu n'utilises pas correctement les outils de Excel, probablement parce que tu n'as pas commencé par des exercices plus simples qui te permettront de maîtriser les concepts de base.
Il serait préférable que tu expliques en français, sans code ni formule, ce que tu veux faire avec la cellule contiguë.
"Pour pouvoir changer ou supprimer la formule de ma cellule "H" attenante il faut qu'elle devienne "ActiveCell"."
Il est même chaudement recommandé de ne jamais utiliser "active" ou "select" dans une macro.
par ailleurs, je ne comprends absolument pas pourquoi tu utilises des formules dans ton code.
je pense que ton problème, c'est que tu n'utilises pas correctement les outils de Excel, probablement parce que tu n'as pas commencé par des exercices plus simples qui te permettront de maîtriser les concepts de base.
Il serait préférable que tu expliques en français, sans code ni formule, ce que tu veux faire avec la cellule contiguë.
domimeca
Messages postés
35
Date d'inscription
lundi 22 juin 2009
Statut
Membre
Dernière intervention
16 décembre 2017
1
15 déc. 2017 à 10:55
15 déc. 2017 à 10:55
Bonjour yg_be,
Je voudrais que ma cellule H attenante change de date une fois sur deux quand je saisis une date de "dernière inter". Lorsque je clique "oui" elle rajoute deux ans par rapport à la cellule G et lorsque je clique "non" elle reste à son ancienne valeur. Cependant si elle a déjà une formule ou sa valeur correspond à G + 1 an, l'application ne se lance pas, la MsgBox n'apparaît pas.
Je voudrais que ma cellule H attenante change de date une fois sur deux quand je saisis une date de "dernière inter". Lorsque je clique "oui" elle rajoute deux ans par rapport à la cellule G et lorsque je clique "non" elle reste à son ancienne valeur. Cependant si elle a déjà une formule ou sa valeur correspond à G + 1 an, l'application ne se lance pas, la MsgBox n'apparaît pas.
yg_be
Messages postés
22624
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
28 mars 2024
1 461
15 déc. 2017 à 20:21
15 déc. 2017 à 20:21
alors je propose ceci:
Option Explicit Private Sub Worksheet_Change(ByVal Target As Range) Dim valeurG As Date, valeurH As Date Dim cellH As Range Dim Réponse As Integer If Target.Count = 1 Then If Not Application.Intersect(Target, Range("G9:G" & Range("G" & Rows.Count).End(xlUp).Row)) Is Nothing Then 'j'annule l'application si ma cellule a déjà la formule + 12 mois par rapport à ma cellule de saisie d'intervention valeurG = Target.Value Set cellH = Target.Offset(0, 1) valeurH = cellH.Value If valeurH <> DateSerial(Year(valeurG) + 1, Month(valeurG), Day(valeurG)) Then Réponse = MsgBox("avez-vous changé le deshydrateur", vbYesNoCancel, "echeance deshy") If Réponse = vbYes Then ActiveSheet.Unprotect Password:="juju" cellH = DateSerial(Year(valeurG) + 2, Month(valeurG), Day(valeurG)) ActiveSheet.Protect Password:="juju", DrawingObjects:=True, Contents:=True, Scenarios:=True _ , AllowFormattingRows:=True, AllowSorting:=True ElseIf Réponse = vbNo Then ActiveSheet.Unprotect Password:="juju" ActiveCell.Select With Selection.Interior .Pattern = xlSolid .PatternColorIndex = xlAutomatic .ThemeColor = xlThemeColorAccent3 .TintAndShade = 0.399975585192419 .PatternTintAndShade = 0 End With ActiveSheet.Protect Password:="juju", DrawingObjects:=True, Contents:=True, Scenarios:=True _ , AllowFormattingRows:=True, AllowSorting:=True End If ' Réponse End If ' valeurH <> DateSerial(Year(valeurG) + 1, Month(valeurG), Day(valeurG)) End If 'Not Application.Intersect(Target, Range("G9:G" & Range("G" & Rows.Count).End(xlUp).Row)) Is Nothing End If 'Target.Count = 1 End Sub
domimeca
Messages postés
35
Date d'inscription
lundi 22 juin 2009
Statut
Membre
Dernière intervention
16 décembre 2017
1
16 déc. 2017 à 09:07
16 déc. 2017 à 09:07
Bonjour yg_be,
Je viens d'essayer ton code, mais à force de travailler la dessus je commence à me mélanger les pinceaux. Le code de la feuille que je t'ai donné était un code d'essais. Pour "VbNo" je ne dois pas changer la couleur mais faire un copié coller valeur de la cellule "H" attenante. J'ai donc transposé (voir mon code ci dessous) mais le problème est que la formule de la cellule "H" réagi (+ 24 mois) avant que je fasse mon copié coller valeur. J'ai mis l'apostrophe devant ma modif.
L'idée était de figer la date de la cellule "H" lorsqu'on clique NON
Merci encore pour cette patience.
Je viens d'essayer ton code, mais à force de travailler la dessus je commence à me mélanger les pinceaux. Le code de la feuille que je t'ai donné était un code d'essais. Pour "VbNo" je ne dois pas changer la couleur mais faire un copié coller valeur de la cellule "H" attenante. J'ai donc transposé (voir mon code ci dessous) mais le problème est que la formule de la cellule "H" réagi (+ 24 mois) avant que je fasse mon copié coller valeur. J'ai mis l'apostrophe devant ma modif.
Option Explicit Private Sub Worksheet_Change(ByVal Target As Range) Dim valeurG As Date, valeurH As Date Dim cellH As Range Dim Réponse As Integer If Target.Count = 1 Then If Not Application.Intersect(Target, Range("G9:G" & Range("G" & Rows.Count).End(xlUp).Row)) Is Nothing Then 'j'annule l'application si ma cellule a déjà la formule + 12 mois par rapport à ma cellule de saisie d'intervention valeurG = Target.Value Set cellH = Target.Offset(0, 1) valeurH = cellH.Value If valeurH <> DateSerial(Year(valeurG) + 1, Month(valeurG), Day(valeurG)) Then Réponse = MsgBox("avez-vous changé le deshydrateur", vbYesNoCancel, "echeance deshy") If Réponse = vbYes Then ActiveSheet.Unprotect Password:="juju" cellH = DateSerial(Year(valeurG) + 2, Month(valeurG), Day(valeurG)) ActiveSheet.Protect Password:="juju", DrawingObjects:=True, Contents:=True, Scenarios:=True _ , AllowFormattingRows:=True, AllowSorting:=True ElseIf Réponse = vbNo Then ActiveSheet.Unprotect Password:="juju" 'cellH.Select 'Selection.Copy 'Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False ActiveSheet.Protect Password:="juju", DrawingObjects:=True, Contents:=True, Scenarios:=True _ , AllowFormattingRows:=True, AllowSorting:=True End If ' Réponse End If ' valeurH <> DateSerial(Year(valeurG) + 1, Month(valeurG), Day(valeurG)) End If 'Not Application.Intersect(Target, Range("G9:G" & Range("G" & Rows.Count).End(xlUp).Row)) Is Nothing End If 'Target.Count = 1 End Sub
L'idée était de figer la date de la cellule "H" lorsqu'on clique NON
Merci encore pour cette patience.
yg_be
Messages postés
22624
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
28 mars 2024
1 461
16 déc. 2017 à 11:27
16 déc. 2017 à 11:27
je propose alors ceci:
d'abord, ne garder des formules dans la colonne H que quand la formule est " G + 1 an"
dans tous les autres cas, mettre la valeur de la date, pas de formule
et utiliser le code suivant
je me demande pourquoi tu poses la question "avez-vous changé le deshydrateur": n'est-ce pas préférable de tester si le changement devait se faire cette fois-ci?
d'abord, ne garder des formules dans la colonne H que quand la formule est " G + 1 an"
dans tous les autres cas, mettre la valeur de la date, pas de formule
et utiliser le code suivant
je me demande pourquoi tu poses la question "avez-vous changé le deshydrateur": n'est-ce pas préférable de tester si le changement devait se faire cette fois-ci?
Option Explicit Private Sub Worksheet_Change(ByVal Target As Range) Dim valeurG As Date Dim cellH As Range Dim Réponse As Integer If Target.Count = 1 Then If Not Application.Intersect(Target, Range("G9:G" & Range("G" & Rows.Count).End(xlUp).Row)) Is Nothing Then Set cellH = Target.Offset(0, 1) If Not cellH.HasFormula Then Réponse = MsgBox("avez-vous changé le deshydrateur", vbYesNoCancel, "echeance deshy") If Réponse = vbYes Then valeurG = Target.Value ActiveSheet.Unprotect Password:="juju" cellH = DateSerial(Year(valeurG) + 2, Month(valeurG), Day(valeurG)) ActiveSheet.Protect Password:="juju", DrawingObjects:=True, Contents:=True, Scenarios:=True _ , AllowFormattingRows:=True, AllowSorting:=True End If ' Réponse End If ' valeurH <> DateSerial(Year(valeurG) + 1, Month(valeurG), Day(valeurG)) End If 'Not Application.Intersect(Target, Range("G9:G" & Range("G" & Rows.Count).End(xlUp).Row)) Is Nothing End If 'Target.Count = 1 End Sub