[vba] macro s'exécute bien... ou pas
Fermé
refcemad
Messages postés
39
Date d'inscription
mercredi 12 janvier 2011
Statut
Membre
Dernière intervention
10 mai 2018
-
15 juil. 2012 à 10:25
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 - 17 juil. 2012 à 11:45
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 - 17 juil. 2012 à 11:45
A voir également:
- [vba] macro s'exécute bien... ou pas
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Macro word - Guide
- Jitbit macro recorder - Télécharger - Confidentialité
- Macro logiciel - Télécharger - Organisation
8 réponses
eriiic
Messages postés
24603
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
15 décembre 2024
7 249
15 juil. 2012 à 11:15
15 juil. 2012 à 11:15
Bonjour,
Pourtant il te dit clairement ce qui ne lui plait pas : cette opération requiert que les cellules fusionnées soient de taille identique
As-tu essayé sans cellules fusionnées ?
Et pourquoi avoir fait une fonction et non pas un sub ? Quel est l'interet ?
eric
Pourtant il te dit clairement ce qui ne lui plait pas : cette opération requiert que les cellules fusionnées soient de taille identique
As-tu essayé sans cellules fusionnées ?
Et pourquoi avoir fait une fonction et non pas un sub ? Quel est l'interet ?
eric
refcemad
Messages postés
39
Date d'inscription
mercredi 12 janvier 2011
Statut
Membre
Dernière intervention
10 mai 2018
1
15 juil. 2012 à 11:31
15 juil. 2012 à 11:31
En fait, j'ai essayé d'abord avec un sub et l'effet est strictement le même.
Ce que je ne comprends pas, c'est que la macro marche très bien quand je l'exécute directement...
On dirait qu'arrivé à la ligne fatidique, excel reprend au début du Private Sub Worksheet_calculate, recommence la procédure, et encore, et encore, et encore. Je pense que c'est du "encore, et encore, et encore" que vient le problème de cellules fusionnées.
J'ai raison, ou je comprends rien ?
Ce que je ne comprends pas, c'est que la macro marche très bien quand je l'exécute directement...
On dirait qu'arrivé à la ligne fatidique, excel reprend au début du Private Sub Worksheet_calculate, recommence la procédure, et encore, et encore, et encore. Je pense que c'est du "encore, et encore, et encore" que vient le problème de cellules fusionnées.
J'ai raison, ou je comprends rien ?
eriiic
Messages postés
24603
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
15 décembre 2024
7 249
15 juil. 2012 à 13:00
15 juil. 2012 à 13:00
As-tu essayé sans cellules fusionnées ?
refcemad
Messages postés
39
Date d'inscription
mercredi 12 janvier 2011
Statut
Membre
Dernière intervention
10 mai 2018
1
16 juil. 2012 à 06:54
16 juil. 2012 à 06:54
Oui, je viens de le faire... et c'est pire !
En fait, je commence à entrevoir l'origine du problème : il semblerait que, comme j'ai, dans certaines cellules du classeur des fonctions maintenant() qui sont recalculées dès qu'une valeur change quelque part, la macro revérifie la valeur de N31 à chaque fois...
Donc... ma question est désormais : comment faire pour que la macro ne s'exécute QUE quand je change une valeur directement liée à la cellule N31 ?
En fait, je commence à entrevoir l'origine du problème : il semblerait que, comme j'ai, dans certaines cellules du classeur des fonctions maintenant() qui sont recalculées dès qu'une valeur change quelque part, la macro revérifie la valeur de N31 à chaque fois...
Donc... ma question est désormais : comment faire pour que la macro ne s'exécute QUE quand je change une valeur directement liée à la cellule N31 ?
eriiic
Messages postés
24603
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
15 décembre 2024
7 249
16 juil. 2012 à 11:09
16 juil. 2012 à 11:09
Bonjour,
il faut utiliser l'évènement Change de la feuille.
Et change cette function en sub, ce n'est pas une fonction.
eric
il faut utiliser l'évènement Change de la feuille.
Private Sub Worksheet_Change(ByVal Target As Range) If Target = [N31] Then 'ton code End If End SubL'évènement change ne se déclenche pas si la cellule est modifiée par macro.
Et change cette function en sub, ce n'est pas une fonction.
eric
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
refcemad
Messages postés
39
Date d'inscription
mercredi 12 janvier 2011
Statut
Membre
Dernière intervention
10 mai 2018
1
17 juil. 2012 à 09:33
17 juil. 2012 à 09:33
Bonjour,
Ca, j'avais déjà essayé avant le worksheet_change, mais ça n'a jamais marché. J'ai bien repassé ma fonction en sub (comme elle était à la base).
Je reviens quand même sur ta proposition. Mais là, pour moi, le code que tu me donnes ne tiens pas compte de la valeur que va prendre (ou pas) N31. Et moi je veux que ma macro se lance seulement si j'ai "FAUX" en N31.
Alors j'ai essayé ceci :
J'ai essayé aussi en mettant "FAUX"...
Mais ça ne fonctionne pas ! (la macro ne s'exécute pas du tout)
A chaque fois que je teste quelque chose, j'ai l'impression d'être si près du but...
Ca, j'avais déjà essayé avant le worksheet_change, mais ça n'a jamais marché. J'ai bien repassé ma fonction en sub (comme elle était à la base).
Je reviens quand même sur ta proposition. Mais là, pour moi, le code que tu me donnes ne tiens pas compte de la valeur que va prendre (ou pas) N31. Et moi je veux que ma macro se lance seulement si j'ai "FAUX" en N31.
Alors j'ai essayé ceci :
If Target = [N31] Then If [N31].Value = FAUX Then 'Ma_Macro End If End If End Sub
J'ai essayé aussi en mettant "FAUX"...
Mais ça ne fonctionne pas ! (la macro ne s'exécute pas du tout)
A chaque fois que je teste quelque chose, j'ai l'impression d'être si près du but...
eriiic
Messages postés
24603
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
15 décembre 2024
7 249
17 juil. 2012 à 09:43
17 juil. 2012 à 09:43
Bonjour,
Il faut utiliser le mot clé en anglais : false
If Target = [N31] and target.value=false Then
....
endif
eric
Il faut utiliser le mot clé en anglais : false
If Target = [N31] and target.value=false Then
....
endif
eric
refcemad
Messages postés
39
Date d'inscription
mercredi 12 janvier 2011
Statut
Membre
Dernière intervention
10 mai 2018
1
17 juil. 2012 à 09:51
17 juil. 2012 à 09:51
Ok.
Mais là, dès que je modifie une cellule de la feuille, la macro s'exécute, et ce n'est pas mon souhait...
Mais là, dès que je modifie une cellule de la feuille, la macro s'exécute, et ce n'est pas mon souhait...
eriiic
Messages postés
24603
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
15 décembre 2024
7 249
17 juil. 2012 à 10:05
17 juil. 2012 à 10:05
Mais là, dès que je modifie une cellule de la feuille, la macro s'exécute
Non, lorsque N31 est modifié et est égal à FAUX
Ton problème de départ était : "erreur d'exécution 1004 ; cette opération requiert que les cellules fusionnées soient de taille identique"
Ensuite :
ma question est désormais : comment faire pour que la macro ne s'exécute QUE quand je change une valeur directement liée à la cellule N31 ?
Ensuite il faut qu'elle soit égale à faux...
Bon, on reverra ça (ou pas) quand tu auras posé ton problème clairement, ce que tu n'as jamais fait.
Les énigmes distillées au compte-goutte ne m'ont jamais passkionné.
eric
Non, lorsque N31 est modifié et est égal à FAUX
Ton problème de départ était : "erreur d'exécution 1004 ; cette opération requiert que les cellules fusionnées soient de taille identique"
Ensuite :
ma question est désormais : comment faire pour que la macro ne s'exécute QUE quand je change une valeur directement liée à la cellule N31 ?
Ensuite il faut qu'elle soit égale à faux...
Bon, on reverra ça (ou pas) quand tu auras posé ton problème clairement, ce que tu n'as jamais fait.
Les énigmes distillées au compte-goutte ne m'ont jamais passkionné.
eric
refcemad
Messages postés
39
Date d'inscription
mercredi 12 janvier 2011
Statut
Membre
Dernière intervention
10 mai 2018
1
17 juil. 2012 à 10:15
17 juil. 2012 à 10:15
Euh... C'est pire que ça : parfois ma macro s'exécute et d'autres fois non, sans rien changer au code, seulement en effaçant des valeurs dans mon tableau...
refcemad
Messages postés
39
Date d'inscription
mercredi 12 janvier 2011
Statut
Membre
Dernière intervention
10 mai 2018
1
17 juil. 2012 à 10:50
17 juil. 2012 à 10:50
Bon, je vais essayer de reprendre mon problème avec un exemple un peu plus simple (c'est un exemple avec lequel je travaille depuis le début et que j'avais essayé de transposer sur mon classeur sans succès).
Mettons que je veuille que la cellule A1 se colore en violet si B1 prend, avec une fonction, la valeur FAUX : si(C2<C1;"")
Je fais d'abord une Sub :
Ensuite je fais une worksheet_calculate :
En fait, je ne vois absoluement pas pourquoi, mais Excel à l'air de se comporter bizarrement (je commence à me demander si j'aurais pas un bug avec excel...) :
Tout à l'heure ça avait l'air de fonctionner correctement, mais maintenant... plus rien ne se passe.
Si je rajoute dans la worksheet :
(la macro2 que j'ai faite permet de mettre A1 en bleu)
Dans ce cas, seule la macro2 s'exécute dès que je change une valeur qui n'a rien à voir dans le classeur et même si B1 = FAUX.
J'espère être un peu plus claire. Par ailleurs, mon post précédant (la macro ne s'exécute que lorsque j'efface une valeur) n'est plus vrai...
Mettons que je veuille que la cellule A1 se colore en violet si B1 prend, avec une fonction, la valeur FAUX : si(C2<C1;"")
Je fais d'abord une Sub :
Sub Macro1() Sheets("feuil1").Select Range("A1").Select With Selection.Interior .Color = -6279056 End With End Sub
Ensuite je fais une worksheet_calculate :
Private Sub Worksheet_Change(ByVal Target As Range) If Target = ["B1"] And Target.Value = False Then Macro1 End If End Sub
En fait, je ne vois absoluement pas pourquoi, mais Excel à l'air de se comporter bizarrement (je commence à me demander si j'aurais pas un bug avec excel...) :
Tout à l'heure ça avait l'air de fonctionner correctement, mais maintenant... plus rien ne se passe.
Si je rajoute dans la worksheet :
Else Macro2
(la macro2 que j'ai faite permet de mettre A1 en bleu)
Dans ce cas, seule la macro2 s'exécute dès que je change une valeur qui n'a rien à voir dans le classeur et même si B1 = FAUX.
J'espère être un peu plus claire. Par ailleurs, mon post précédant (la macro ne s'exécute que lorsque j'efface une valeur) n'est plus vrai...
eriiic
Messages postés
24603
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
15 décembre 2024
7 249
17 juil. 2012 à 11:45
17 juil. 2012 à 11:45
Reprend en laissant tomber ce que tu as fait qui est faux et ne fait qu'embrouiller.
Dépose un, fichier exemple sur cjoint.com et colle ici le lien fourni.
Explique dedans, simplement mais complètement et en détail , ce que tu désires.
eric
Dépose un, fichier exemple sur cjoint.com et colle ici le lien fourni.
Explique dedans, simplement mais complètement et en détail , ce que tu désires.
eric