Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 06/12/2011, 11h16   #1
Invité de passage
 
Inscription : janvier 2008
Messages : 32
Détails du profil
Informations personnelles :
Âge : 34
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : janvier 2008
Messages : 32
Points : 2
Points : 2
Par défaut Exécution code d'une worksheet en fonction de données d'une autre worksheet

Bonjour,

Je suppose que c'est très simple à faire mais je n'y arrive pas.

J'ai effectué une partie de code fonctionnel dans un module.
Cependant, je veux basculer celui-ci dans une worksheet "B" car ce code ne s'applique qu'a celle-ci mais est il est dépendant d'une valeur de la worksheet "A" qui peut changer fréquement.

Comment puis-je faire pour que le code de la worksheet "B" s'exécute a chaque changement de la worksheet "A"?

Merci par avance.

Cdlt,
assiec est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2011, 11h24   #2
Expert Confirmé Sénior
 
Homme Daniel
aucune
Inscription : septembre 2011
Messages : 2 004
Détails du profil
Informations personnelles :
Nom : Homme Daniel
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : aucune

Informations forums :
Inscription : septembre 2011
Messages : 2 004
Points : 4 037
Points : 4 037
Bonjour,

Mets la macro suivante dans le module de la feuille A :

Code :
1
2
3
4
5
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$A$1" Then
        Sheets("B").MacroDeLaFeuilleB
    End If
End Sub
"MacroDeLaFeuilleB" s'exécutera chaque fois que la valeur de la cellule A1 de la feuille A changera.

NB Tu aurais aussi bien pu laisser la macro dans le module standard.
__________________
Cordialement.

Daniel

Citation:
La plus perdue de toutes les journées est celle où l'on n'a pas ri.
Chamfort
Daniel.C est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2011, 11h28   #3
Expert Confirmé Sénior
 
Avatar de jfontaine
 
Homme Jérôme FONTAINE
Contrôleur de Gestion
Inscription : juin 2006
Messages : 3 907
Détails du profil
Informations personnelles :
Nom : Homme Jérôme FONTAINE
Âge : 38
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Contrôleur de Gestion

Informations forums :
Inscription : juin 2006
Messages : 3 907
Points : 7 207
Points : 7 207
Bonjour,

As tu essayé d'appeler ton code dans l'évenement "Worksheet_Change" de la Feuille A
__________________
Jérôme

Citation:
"Ils ne savaient pas que c'était impossible, alors ils l'ont fait" - Marc Twain
Si la réponse répond à votre besoin, votre vote nous encouragera.
Dans le cas ou la réponse mérite, à vos yeux, un , nous faire partager la raison de ce vote, pourrait nous permettre de nous améliorer.
jfontaine est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2011, 12h56   #4
Invité de passage
 
Inscription : janvier 2008
Messages : 32
Détails du profil
Informations personnelles :
Âge : 34
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : janvier 2008
Messages : 32
Points : 2
Points : 2
Le problème est que j'ai déja un worksheet_change dans ma worksheet "A" et que le nom de la worksheet "B" peut changer.

Peut on faire executer le code d'une worksheet quand celle-ci est sélectionnée?
assiec est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2011, 13h43   #5
Expert Confirmé Sénior
 
Homme Daniel
aucune
Inscription : septembre 2011
Messages : 2 004
Détails du profil
Informations personnelles :
Nom : Homme Daniel
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : aucune

Informations forums :
Inscription : septembre 2011
Messages : 2 004
Points : 4 037
Points : 4 037
Tu peux combiner le code que tu as dans la macro avec celui à ajouter; par exemple :

Code :
1
2
3
4
5
6
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$A$1" Then
        Sheets("B").MacroDeLaFeuilleB
    End If
' ton code
End Sub
Pour le second point, laisse la macro appelée dans un module standard.
__________________
Cordialement.

Daniel

Citation:
La plus perdue de toutes les journées est celle où l'on n'a pas ri.
Chamfort
Daniel.C est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2011, 14h07   #6
Invité de passage
 
Inscription : janvier 2008
Messages : 32
Détails du profil
Informations personnelles :
Âge : 34
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : janvier 2008
Messages : 32
Points : 2
Points : 2
Ok bon la première solution je ne peux pas faire car la sheet B n'aura jamais le meme nom.

Donc il me faut impérativement un code/fonction dédié.

Merci pour votre aide.

Cdlt,
assiec est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2011, 14h15   #7
Expert Confirmé Sénior
 
Homme Daniel
aucune
Inscription : septembre 2011
Messages : 2 004
Détails du profil
Informations personnelles :
Nom : Homme Daniel
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : aucune

Informations forums :
Inscription : septembre 2011
Messages : 2 004
Points : 4 037
Points : 4 037
Si tu mets la macro dans un module standard, le code devient :

Code :
1
2
3
4
5
6
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$A$1" Then
        MacroTest
    End If
' ton code
End Sub
Et il n'est plus question de changement de feuille. Ou alors explique pourquoi tu DOIS mettre la macro dans un module feuille.
__________________
Cordialement.

Daniel

Citation:
La plus perdue de toutes les journées est celle où l'on n'a pas ri.
Chamfort
Daniel.C est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2011, 14h41   #8
Invité de passage
 
Inscription : janvier 2008
Messages : 32
Détails du profil
Informations personnelles :
Âge : 34
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : janvier 2008
Messages : 32
Points : 2
Points : 2
Merci pour la réponse mais désolé je n'y arrive pas (certainement du a mon niveau).

Pour etre je l'espère plus explicite voici mon code:

Worksheet "A":
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Private Sub worksheet_change(ByVal Answer As Range)
Select Case Answer.Address(0, 0)
Case "H8"
    If UCase(Answer.Value) = "YES" Then
        Shapes("Picture 2").Visible = True
        Shapes("Picture 3").Visible = False
        ActiveSheet.Cells(8, 9).Value = "Explanation mandadory"
        ActiveSheet.Cells(12, 8).Value = ""
        .....
Else 
....
End If
End Select
End Sub
Worksheet "B":
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Dim Route As String
Dim FF As String
Dim FE As String
 
FE = ActiveSheet.Cells(4, 10).Value
'Ici on récupère le nom de la feuille qui nous interresse (Worksheet "A")
FF = Left(FE, 2)
Route = Worksheets(FF).Cells(26, 12).Value
 
If Route = "5" Then
    ActiveSheet.Cells(9, 10).Value = "5A"
    ActiveSheet.Cells(11, 10).Value = ""
    ....
End If
Je viens de m'apercevoir que je suis obligé d'etre dans la worksheet "B" pour executer le code à cause des "Activesheets"....
assiec est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2011, 16h10   #9
Expert Confirmé Sénior
 
Homme Daniel
aucune
Inscription : septembre 2011
Messages : 2 004
Détails du profil
Informations personnelles :
Nom : Homme Daniel
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : aucune

Informations forums :
Inscription : septembre 2011
Messages : 2 004
Points : 4 037
Points : 4 037
Voici le code à mettre dna le module de la feuille A :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Private Sub worksheet_change(ByVal Answer As Range)
Select Case Answer.Address(0, 0)
Case "H8"
    If UCase(Answer.Value) = "YES" Then
        Shapes("Picture 2").Visible = True
        Shapes("Picture 3").Visible = False
        ActiveSheet.Cells(8, 9).Value = "Explanation mandadory"
        ActiveSheet.Cells(12, 8).Value = ""
        '.....
    End If
End Select
    If Target.Address = "$A$1" Then 'si A1 est la cellule à tester
        Sheets("B").MacroAppelée
    End If
End Sub
Pourquoi dis-tu que la feuille ne s'appelle pas toujours "B" ? Qu'est-ce qui détermine le nom ?
__________________
Cordialement.

Daniel

Citation:
La plus perdue de toutes les journées est celle où l'on n'a pas ri.
Chamfort
Daniel.C est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2011, 16h25   #10
Invité de passage
 
Inscription : janvier 2008
Messages : 32
Détails du profil
Informations personnelles :
Âge : 34
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : janvier 2008
Messages : 32
Points : 2
Points : 2
Vous etes sûr pour le target?

En fait, les feuilles fonctionnent par couple, une worksheet "A" donne
lieu à une ou plusieurs worksheet "B"...

C'est pour ca que pour simplifier (pour moi) dans la worksheet "B" j'ai utilisé pas mal de Activeworksheet.cells(...).value..... et je n'ai pas a gerer les differents noms de la worksheet "B"
assiec est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2011, 16h40   #11
Expert Confirmé Sénior
 
Homme Daniel
aucune
Inscription : septembre 2011
Messages : 2 004
Détails du profil
Informations personnelles :
Nom : Homme Daniel
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : aucune

Informations forums :
Inscription : septembre 2011
Messages : 2 004
Points : 4 037
Points : 4 037
Je persiste. Tu mets la macro appelante et tu passes le nom de la feuille en paramètre :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Private Sub worksheet_change(ByVal Answer As Range)
Select Case Answer.Address(0, 0)
Case "H8"
    If UCase(Answer.Value) = "YES" Then
        Shapes("Picture 2").Visible = True
        Shapes("Picture 3").Visible = False
        ActiveSheet.Cells(8, 9).Value = "Explanation mandadory"
        ActiveSheet.Cells(12, 8).Value = ""
        '.....
    End If
End Select
    If Target.Address = "$A$1" Then 'si A1 est la cellule à tester
 
MacroAppelée "B"
    End If
End Sub
et tu mets la macro suivante dans module standard :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Sub MacroAppelée(NomFeuille)
    Dim Route As String
    Dim FF As String
    Dim FE As String
 
    With Sheets(NomFeuille)
        FE = .Cells(4, 10).Value
        'Ici on récupère le nom de la feuille qui nous interresse (Worksheet "A")
        FF = Left(FE, 2)
        Route = Worksheets(FF).Cells(26, 12).Value
 
        If Route = "5" Then
            .Cells(9, 10).Value = "5A"
            .Cells(11, 10).Value = ""
            '....
        End If
    End With
End Sub
__________________
Cordialement.

Daniel

Citation:
La plus perdue de toutes les journées est celle où l'on n'a pas ri.
Chamfort
Daniel.C est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2011, 09h28   #12
Invité de passage
 
Inscription : janvier 2008
Messages : 32
Détails du profil
Informations personnelles :
Âge : 34
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : janvier 2008
Messages : 32
Points : 2
Points : 2
Je comprends la démarche mais je mets quoi pour le "NomFeuille" sachant que je ne connais pas a l'avance son nom et que je n'ai pas de moyen de le générer par avance?
assiec est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2011, 10h07   #13
Expert Confirmé Sénior
 
Homme Daniel
aucune
Inscription : septembre 2011
Messages : 2 004
Détails du profil
Informations personnelles :
Nom : Homme Daniel
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : aucune

Informations forums :
Inscription : septembre 2011
Messages : 2 004
Points : 4 037
Points : 4 037
Bonjour,

Comment cette feuille arrive-t-elle dans ton classeur sans que tu en connaisses le nom ? Donne plus d'explications.
__________________
Cordialement.

Daniel

Citation:
La plus perdue de toutes les journées est celle où l'on n'a pas ri.
Chamfort
Daniel.C est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2011, 11h18   #14
Invité de passage
 
Inscription : janvier 2008
Messages : 32
Détails du profil
Informations personnelles :
Âge : 34
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : janvier 2008
Messages : 32
Points : 2
Points : 2
Alors je reprends

Ma worksheet A donne lieu a une ou plusieurs worksheet (appellées A1, A2, A3...) qui sont créées/renommées au besoin par copie d'une feuille template:

Ex:
A donne lieu a créer une A1
ou bien
A donne lieu a créer une A1 et une A2
ou bien
A donne lieu a créer une A1, une A2 et une A3
....

Donc je ne peut pas savoir en avance si j'aurais A1, A2 ou A3 ou bien deux d'entre elles ou bien les trois voire 4 ou 5...

Et la je recommence avec une nouvelle worksheet au meme format que la worksheet A qui donne lieu a d'autre worksheet équivalentes aux A1, A2...


Au final, des valeurs dans les worksheet A1, A2, A3... sont inscrites en fonction d'un paramètre de la worksheet A qui lui peut etre mis a jour au besoin.

Pour le moment j'ai donc ma macro qui se recopie and les worksheet A1, A2, A3... du au copier/coller de chaque feuille et en entete de ma macro mes worksheet se mettent a jour automatiquement par le worksheet_activate...
assiec est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2011, 12h02   #15
Expert Confirmé Sénior
 
Homme Daniel
aucune
Inscription : septembre 2011
Messages : 2 004
Détails du profil
Informations personnelles :
Nom : Homme Daniel
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : aucune

Informations forums :
Inscription : septembre 2011
Messages : 2 004
Points : 4 037
Points : 4 037
Citation:
Ex:
A donne lieu a créer une A1
ou bien
A donne lieu a créer une A1 et une A2
ou bien
A donne lieu a créer une A1, une A2 et une A3
Il y a bien une logique qui sous-tend cela ?
__________________
Cordialement.

Daniel

Citation:
La plus perdue de toutes les journées est celle où l'on n'a pas ri.
Chamfort
Daniel.C est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2011, 18h08   #16
Expert Confirmé Sénior
 
Avatar de Qwazerty
 
Homme Stéphane
La très haute tension :D
Inscription : avril 2002
Messages : 2 446
Détails du profil
Informations personnelles :
Nom : Homme Stéphane
Âge : 32
Localisation : France

Informations professionnelles :
Activité : La très haute tension :D
Secteur : Service public

Informations forums :
Inscription : avril 2002
Messages : 2 446
Points : 4 620
Points : 4 620
Envoyer un message via MSN à Qwazerty
Citation:
Envoyé par assiec Voir le message
Vous etes sûr pour le Target?
Salut

Disons que dans l'idée, je ne vois pas trop pourquoi tu as modifié le nom de la cellule passée en paramètre de Worksheet_Change, normalement par défaut VBa la nomme "Target"... pourquoi avoir mis "Answer"?
Ce qui bien sur doit poser des problèmes en utilisant le mot Target puisque celui-ci n'existant pas... son contenu est donc vide.

++
Qwaz
__________________

MagicQwaz := Harry Potter la baguette en moins
Le monde dans lequel on vit
HammerFest
Ma page perso DVP - Dernier Tutoriel : VBA & Internet Explorer
Qwazerty est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/12/2011, 14h58   #17
Invité de passage
 
Inscription : janvier 2008
Messages : 32
Détails du profil
Informations personnelles :
Âge : 34
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : janvier 2008
Messages : 32
Points : 2
Points : 2
Citation:
Daniel.C
Il y a bien une logique qui sous-tend cela ?
Non car cela depends des resultats d'études techniques qui en decoulent.

Citation:
Qwazerty
Ce qui bien sur doit poser des problèmes en utilisant le mot Target puisque celui-ci n'existant pas...
Oui effectivement.

Bon mon problème est pour le moment réglé avec le worksheet_activate
assiec est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 15h46.


 
 
 
 
Partenaires

Hébergement Web