Bonjour
Dans mon fichier, j'ai une feuille "Accueil" dans laquelle il y a deux cellules à remplir par l'utilisateur:
- J8 contient une liste de choix
- J11 est libre
Dans la macro (incluse dans la feuille accueil) ci-dessous, je regarde d'abord si l'utilisateur saisit quelque chose dans J11 sans avoir saisi le champ J8. Si c'est le cas, je lance la macro Dabord qui le lui signale par une MsgBox.
S'il a bien rempli le champ J8, et selon ce qu'il a choisi, je lance l'une des "sous-macros" Macro1 à Macro8.
Chacune d'entre-elles crée deux copies de feuilles (entre autre une feuille FI que l'on trouve plus bas dans la macro Nv_feuille) qui sont masquées au départ du fichier.
Tout cela fonctionne bien.
MAIS:
Lors du "retour" sur la feuille "Accueil" après avoir exécuté l'une des "sous-macros". Le fait de saisir quelque chose dans J11 (c'est le geste attendu de la part de l'utilisateur), cela relance le processus initial qui, cette fois, bugge car il y a déjà des copies des feuilles qui ont été réalisées.
Comment faire donc pour que je puisse lancer une autre macro lorsque J11 est saisi, sans repasser par le stade précédent ?
1) Recherche dans J11 d'une valeur éventuellement saisie
2) Macro si J11 a été rempli sans que J8 ne l'ai été préalablement
Appel de la macro "Nv_feuille" que je voudrais lancer une fois que J8 a été rempli et que l'une des macros 1 à 8 a été effectuée.
Le fichier étant un peu lourd, s'il faut vraiment le joindre je le ferai, mais cela m'oblige à le "nettoyer" et c'est un peu fastidieux, d'autant que, pour de raisons de confidentialité le vrai nom ds macros 1 à 8 a été échangé ici.
Merci
Dans mon fichier, j'ai une feuille "Accueil" dans laquelle il y a deux cellules à remplir par l'utilisateur:
- J8 contient une liste de choix
- J11 est libre
Dans la macro (incluse dans la feuille accueil) ci-dessous, je regarde d'abord si l'utilisateur saisit quelque chose dans J11 sans avoir saisi le champ J8. Si c'est le cas, je lance la macro Dabord qui le lui signale par une MsgBox.
S'il a bien rempli le champ J8, et selon ce qu'il a choisi, je lance l'une des "sous-macros" Macro1 à Macro8.
Chacune d'entre-elles crée deux copies de feuilles (entre autre une feuille FI que l'on trouve plus bas dans la macro Nv_feuille) qui sont masquées au départ du fichier.
Tout cela fonctionne bien.
MAIS:
Lors du "retour" sur la feuille "Accueil" après avoir exécuté l'une des "sous-macros". Le fait de saisir quelque chose dans J11 (c'est le geste attendu de la part de l'utilisateur), cela relance le processus initial qui, cette fois, bugge car il y a déjà des copies des feuilles qui ont été réalisées.
Comment faire donc pour que je puisse lancer une autre macro lorsque J11 est saisi, sans repasser par le stade précédent ?
1) Recherche dans J11 d'une valeur éventuellement saisie
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$J$11" And Target.Count = 1 And Not IsEmpty(Target) Then Call Dabord
If Range("J8") = "Macro1" Then Macro1
If Range("J8") = "Macro2" Then Macro2
If Range("J8") = "Macro3" Then Macro3
If Range("J8") = "Macro4" Then Macro4
If Range("J8") = "Macro5" Then Macro5
If Range("J8") = "Macro6" Then Macro6
If Range("J8") = "Macro7" Then Macro7
If Range("J8") = "Macro8" Then Macro8
'Nv_feuille (essai non concluant)
End Sub
2) Macro si J11 a été rempli sans que J8 ne l'ai été préalablement
Code:
Sub Dabord()
If Range("J8") = "" Then
MsgBox "Saisissez d'abord une Valeur"
End If
End Sub
Appel de la macro "Nv_feuille" que je voudrais lancer une fois que J8 a été rempli et que l'une des macros 1 à 8 a été effectuée.
Code:
'Private Sub Worksheet_Change(ByVal Target As Range)
'If Target.Address = "$J$11" And Target.Count = 1 And Not IsEmpty(Target) Then Call Nv_feuille
'End Sub
Code:
Sub Nv_feuille()
'
' Nv_feuille Macro
' Macro enregistrée le 20/01/2013 par Guy
'
' Crée une copie de la feuille FI et la renomme avec le nom saisi qui est en A3
' A3 étant égal à J11 de la feuille accueil
' Cette macro est déclenchée par la saisie d'un nom en J11 de la feuille accueil
' Sheets("FI").Select
' Sheets("FI").Copy After:=Sheets("FI")
' ActiveSheet.Name = Range("A3").Value
' Range("A3").Select
Sheets("Accueil").Select
End Sub
Le fichier étant un peu lourd, s'il faut vraiment le joindre je le ferai, mais cela m'oblige à le "nettoyer" et c'est un peu fastidieux, d'autant que, pour de raisons de confidentialité le vrai nom ds macros 1 à 8 a été échangé ici.
Merci
Dernière édition: