Revenir dans une cellule après une macro
Résolu/Fermé
pitive35
Messages postés
75
Date d'inscription
mardi 21 août 2012
Statut
Membre
Dernière intervention
14 juillet 2022
-
31 mars 2013 à 18:21
Pitive35 - 3 avril 2013 à 21:40
Pitive35 - 3 avril 2013 à 21:40
A voir également:
- Revenir dans une cellule après une macro
- Revenir à la ligne dans une cellule excel mac - Guide
- Macro word - Guide
- Bloquer une cellule excel - Guide
- Macro logiciel - Télécharger - Organisation
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
5 réponses
Mike-31
Messages postés
18318
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
26 avril 2024
5 076
31 mars 2013 à 19:38
31 mars 2013 à 19:38
Salut,
Il faut bloquer le déplacement pendant le code mais avant de te donner la syntaxe il serait bien de voir ton code complet
Il faut bloquer le déplacement pendant le code mais avant de te donner la syntaxe il serait bien de voir ton code complet
Mike-31
Messages postés
18318
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
26 avril 2024
5 076
31 mars 2013 à 22:33
31 mars 2013 à 22:33
Re,
Comme cela ça devrait le faire
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Not Intersect(Target, Union([D20:D44], [F9], [F12])) Is Nothing Then
Application.EnableEvents = False
'ton code
Application.EnableEvents = True
End If
End Sub
mais que fait ton code Scenario
Comme cela ça devrait le faire
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Not Intersect(Target, Union([D20:D44], [F9], [F12])) Is Nothing Then
Application.EnableEvents = False
'ton code
Application.EnableEvents = True
End If
End Sub
mais que fait ton code Scenario
pitive35
Messages postés
75
Date d'inscription
mardi 21 août 2012
Statut
Membre
Dernière intervention
14 juillet 2022
1
1 avril 2013 à 19:17
1 avril 2013 à 19:17
Bonjour,
Merci pour ton code, mais du coup il ne rappel plus mon scénario.
Mon scenarion est une valeur cible.
J'ai une equation avec l'inconnu de chaque coté.
Comme je n'arrive pas a faire la transformation de cette formule on m'a dit que valeur cible, avec l'équation =0 ca fonctionnait bien.
Mon but c'est de l'automatisé pour que si une donnée qui se trouve dans l'équation change la valeur cible se redéclanche automatiquement.
Merci encore de ton aide
Merci pour ton code, mais du coup il ne rappel plus mon scénario.
Mon scenarion est une valeur cible.
J'ai une equation avec l'inconnu de chaque coté.
Comme je n'arrive pas a faire la transformation de cette formule on m'a dit que valeur cible, avec l'équation =0 ca fonctionnait bien.
Mon but c'est de l'automatisé pour que si une donnée qui se trouve dans l'équation change la valeur cible se redéclanche automatiquement.
Merci encore de ton aide
eriiic
Messages postés
24570
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
23 avril 2024
7 214
1 avril 2013 à 19:57
1 avril 2013 à 19:57
Bonjour,
autre proposition :
eric
autre proposition :
Private Sub Worksheet_Change(ByVal Target As Range) Dim plage As Range, li As Long, savCell As Range ' à toi d'ajouter les plages/cellules à prendre en compte Set savCell = Target Set plage = Union(Range("D20:au44"), Range("F9"), Range("F12")) If Not Intersect(Target, plage) Is Nothing Then li = Target.Row For li = 20 To 44 ' si la ligne li de la colonne D n'est pas vide, on modifie le scenario If Range("D" & li) <> "" Then Call Scenario(li) Next li End If savCell.Select End Sub
eric
pitive35
Messages postés
75
Date d'inscription
mardi 21 août 2012
Statut
Membre
Dernière intervention
14 juillet 2022
1
2 avril 2013 à 06:29
2 avril 2013 à 06:29
Bonjour,
MErci beaucoup cela fonctionne
MErci beaucoup cela fonctionne
Mike-31
Messages postés
18318
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
26 avril 2024
5 076
1 avril 2013 à 20:59
1 avril 2013 à 20:59
Re,
A Eriiic est passé par la, bonsoir
j'avais commencé à modifier le code comme cela
Private Sub Worksheet_Change(ByVal Target As Range)
Dim plage As Range, li As Long
' à toi d'ajouter les plages/cellules à prendre en compte
Set plage = Union([D20:D44], [F9], [F12])
If Not Intersect(Target, plage) Is Nothing Then
Application.EnableEvents = False
li = Target.Row
For li = 20 To 44
' si la ligne li de la colonne D n'est pas vide, on modifie le scenario
If Range("D" & li) <> "" Then Call Scenario(li)
Next li
Application.EnableEvents = True
End If
End Sub
mais j'ai l'impression qu'il faut aller voir du côté du code Scenario
A Eriiic est passé par la, bonsoir
j'avais commencé à modifier le code comme cela
Private Sub Worksheet_Change(ByVal Target As Range)
Dim plage As Range, li As Long
' à toi d'ajouter les plages/cellules à prendre en compte
Set plage = Union([D20:D44], [F9], [F12])
If Not Intersect(Target, plage) Is Nothing Then
Application.EnableEvents = False
li = Target.Row
For li = 20 To 44
' si la ligne li de la colonne D n'est pas vide, on modifie le scenario
If Range("D" & li) <> "" Then Call Scenario(li)
Next li
Application.EnableEvents = True
End If
End Sub
mais j'ai l'impression qu'il faut aller voir du côté du code Scenario
pitive35
Messages postés
75
Date d'inscription
mardi 21 août 2012
Statut
Membre
Dernière intervention
14 juillet 2022
1
2 avril 2013 à 06:29
2 avril 2013 à 06:29
Merci de ton aide mais la solution d'Eriiic foncionne, la tienne, non je revien à ma dernière ligne ecrite.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
pitive35
Messages postés
75
Date d'inscription
mardi 21 août 2012
Statut
Membre
Dernière intervention
14 juillet 2022
1
2 avril 2013 à 06:35
2 avril 2013 à 06:35
Bonjour,
Merci à vous 2 pour le temps passé, j'en profite pour vouss demander encore de l'aide.
Set plage = Union(Range("D20:au44"), Range("F9"), Range("F12"))
J'ai mis (Range("D20:au44"), pourque s'il y aune modif a faire dans cet inervalle la macro se relance.
Cela foncionne, mais en fait je n'ais pas besoin de cet interval, puisque seul une autre colonne a une incidence qui est la colonne H20:H44.
Mais si je mets (Set plage = Union(Range("D20:H44"), Range("F9"), Range("F12")) ou
Set plage = Union(Range("D20:au44"), Range("H20:H44"), Range("F9"), Range("F12"))
Ma macro ne se relance pas quand je modifie H20.
MErci de votre patiente et aide.
Merci à vous 2 pour le temps passé, j'en profite pour vouss demander encore de l'aide.
Set plage = Union(Range("D20:au44"), Range("F9"), Range("F12"))
J'ai mis (Range("D20:au44"), pourque s'il y aune modif a faire dans cet inervalle la macro se relance.
Cela foncionne, mais en fait je n'ais pas besoin de cet interval, puisque seul une autre colonne a une incidence qui est la colonne H20:H44.
Mais si je mets (Set plage = Union(Range("D20:H44"), Range("F9"), Range("F12")) ou
Set plage = Union(Range("D20:au44"), Range("H20:H44"), Range("F9"), Range("F12"))
Ma macro ne se relance pas quand je modifie H20.
MErci de votre patiente et aide.
eriiic
Messages postés
24570
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
23 avril 2024
7 214
2 avril 2013 à 23:29
2 avril 2013 à 23:29
Bonjour,
peut-être que les évènements étaient restés désactivés.
Réactive les avec
sub réinit()
Application.EnableEvents = True
end sub
(ou en fermant et rouvrant excel)
Dans Union(Range("D20:au44"), Range("H20:H44"), Range("F9"), Range("F12")) ,
Range("H20:H44") est déjà inclus dans Range("D20:au44"), donc ne sert à rien.
Union(Range("H20:H44"), Range("F9"), Range("F12")) devrait être correct (pourquoi avoir mis D20:H44 si tu ne veux que H20:H44 ???).
Sinon sans fichier on ne peut rien...
eric
peut-être que les évènements étaient restés désactivés.
Réactive les avec
sub réinit()
Application.EnableEvents = True
end sub
(ou en fermant et rouvrant excel)
Dans Union(Range("D20:au44"), Range("H20:H44"), Range("F9"), Range("F12")) ,
Range("H20:H44") est déjà inclus dans Range("D20:au44"), donc ne sert à rien.
Union(Range("H20:H44"), Range("F9"), Range("F12")) devrait être correct (pourquoi avoir mis D20:H44 si tu ne veux que H20:H44 ???).
Sinon sans fichier on ne peut rien...
eric
pitive35
Messages postés
75
Date d'inscription
mardi 21 août 2012
Statut
Membre
Dernière intervention
14 juillet 2022
1
3 avril 2013 à 09:00
3 avril 2013 à 09:00
Bonjuor,
il y a une erreur de copier coller ce n'est pas
Set plage = Union(Range("D20:au44"), Range("H20:H44"), Range("F9"), Range("F12"))
mais
Set plage = Union(Range("D20:D44"), Range("H20:H44"), Range("F9"), Range("F12")).
En fait mes facteurs de recalcul sont les cellule F9 et F12, si un de ce paramètre change toute ma macro doit recalculer toute les valeur de mon tableau.
Les plage D20:D44 et H20:H44, sont des facteur qui change le résultat de ma ligne donc ma macro doit reclaculer uniquement la ligne de mon changement.
Exemple1
mon tableau est rempl de la ligne 20 à 25.
Je m'apercois que je me suis trompé sur ma donnée en F9 ou en F12, donc je la modifie et tout mes résultats colonne XY20:XY25 se modifie avec ma macro.
Exemple 2
Mon tableau toujours remple de la ligne 20 à 25
Je doit changer une valeur en D22ou en H22, ma macro en XY22 doit agir, les autres résultat sont corrects
Ci joint mon fichiers:
https://www.cjoint.com/?3Ddi6wp45yY
Merci de ton aide
il y a une erreur de copier coller ce n'est pas
Set plage = Union(Range("D20:au44"), Range("H20:H44"), Range("F9"), Range("F12"))
mais
Set plage = Union(Range("D20:D44"), Range("H20:H44"), Range("F9"), Range("F12")).
En fait mes facteurs de recalcul sont les cellule F9 et F12, si un de ce paramètre change toute ma macro doit recalculer toute les valeur de mon tableau.
Les plage D20:D44 et H20:H44, sont des facteur qui change le résultat de ma ligne donc ma macro doit reclaculer uniquement la ligne de mon changement.
Exemple1
mon tableau est rempl de la ligne 20 à 25.
Je m'apercois que je me suis trompé sur ma donnée en F9 ou en F12, donc je la modifie et tout mes résultats colonne XY20:XY25 se modifie avec ma macro.
Exemple 2
Mon tableau toujours remple de la ligne 20 à 25
Je doit changer une valeur en D22ou en H22, ma macro en XY22 doit agir, les autres résultat sont corrects
Ci joint mon fichiers:
https://www.cjoint.com/?3Ddi6wp45yY
Merci de ton aide
eriiic
Messages postés
24570
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
23 avril 2024
7 214
3 avril 2013 à 09:12
3 avril 2013 à 09:12
Bonjour,
En D tu as des formules. Un résultat de formule qui évolue ne génère pas d'évènement Change.
Surveiller les cellules qui font évoluer cette formule, par exemple AK20.
Par ailleurs tu as tout un tas de fusions de cellules totalement inutiles. C'est à fuir le plus possible. Déjà tu perds ton temps à le faire, ensuite c'est toujours générateur de problèmes.
A réserver pour les titres, et encore...
Elargi tes colonnes et supprime-les.
eric
eric
En D tu as des formules. Un résultat de formule qui évolue ne génère pas d'évènement Change.
Surveiller les cellules qui font évoluer cette formule, par exemple AK20.
Par ailleurs tu as tout un tas de fusions de cellules totalement inutiles. C'est à fuir le plus possible. Déjà tu perds ton temps à le faire, ensuite c'est toujours générateur de problèmes.
A réserver pour les titres, et encore...
Elargi tes colonnes et supprime-les.
eric
eric
eriiic
Messages postés
24570
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
23 avril 2024
7 214
3 avril 2013 à 21:10
3 avril 2013 à 21:10
Ce n'est pas que AK qu'il faut surveiller, mais toutes les cellules dont dépend D.
eric
eric
31 mars 2013 à 19:59
Voici mon code :
Private Sub Worksheet_Change(ByVal Target As Range)
Dim plage As Range, li As Long
' à toi d'ajouter les plages/cellules à prendre en compte
Set plage = Union(Range("D20:au44"), Range("F9"), Range("F12"))
If Not Intersect(Target, plage) Is Nothing Then
li = Target.Row
For li = 20 To 44
' si la ligne li de la colonne D n'est pas vide, on modifie le scenario
If Range("D" & li) <> "" Then Call scenario(li)
Next li
End If
End Sub
Merci