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
Bonjour,

J'ai essayé d'adapté une macro pour un de mes tableau. Elle se met en route si la valeur de certaine cellule fonctionne.
Je ne sais pas pourquoi dès que la macro se met en marche mon curseur va dans une certaine cellule.
Ce que j'aimerais c'est qu'après le lancement de ma macro le curseur revient sur la cellule ou j'étais avant le lancement.
Comme c'est dans un tableau la cellule ou je suis peux varié donc je ne peux pas lui dire de revenir par exemple en D20, puisque à après ca sera en D21 ou D22 ...

Comment faire ?

Merci d'avance
A voir également:

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
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
0
pitive35 Messages postés 75 Date d'inscription mardi 21 août 2012 Statut Membre Dernière intervention 14 juillet 2022 1
31 mars 2013 à 19:59
Bonjour,

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
0
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
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
0
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
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
0
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
Bonjour,

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
0
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
Bonjour,

MErci beaucoup cela fonctionne
0
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
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
0
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
Merci de ton aide mais la solution d'Eriiic foncionne, la tienne, non je revien à ma dernière ligne ecrite.
0

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
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.
0
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
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
0
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
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
0
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
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
0
Bonjour,
Ok je vais la modifier pour utiliser la colonne ak.
Pour les cellules fusionnées, c'est pour que tous mes tableaux se ressemblent. J'ai créé une base vierge et après je fusionne en fonction de ce que j'ai à faire.

Merci de ton aide
0
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
Ce n'est pas que AK qu'il faut surveiller, mais toutes les cellules dont dépend D.
eric
0