Macro variable selon saisi cellule
Résolu/Fermé
A voir également:
- Macro variable selon saisi cellule
- Macro word - Guide
- Macro logiciel - Télécharger - Organisation
- Aller à la ligne dans une cellule excel - Guide
- Verrouiller cellule excel - Guide
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
16 réponses
Bonjour,
À placer derrière la feuille concernée :
Cdt
Info
À placer derrière la feuille concernée :
Option Explicit Private Sub Worksheet_Change(ByVal Target As Range) If (Target.Address = "$A$1") Then Call Execute_Commande(Target.Value) End If End Sub ' Function Execute_Commande(ByVal Valeur As Variant) MsgBox Valeur End Function '
Cdt
Info
Je n'ai pas compris,
j'ai mis comme code :
j'ai mis comme code :
Sub TCD_investissement() ' Windows("suivi budget version 1.2.xls").Activate ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Exercice"). _ CurrentPage = "2010" ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Section"). _ CurrentPage = "I" ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Sens"). _ CurrentPage = "D" Range("B7:B17").Select Selection.Copy Windows("tableaux de bord - objectif-1.2.xls").Activate Sheets("Tableau_Investissement").Select Range("C5").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False End Sub Private Sub Worksheet_Change(ByVal Target As Range) If (Target.Address = "$E$5") Then Call Execute_Commande(Target.Value) End If End Sub ' Function Execute_Commande(ByVal Valeur As Variant) MsgBox Valeur End Function
pour ceux qui veulent bien m'aider , ci joint lon fichier
http://www.cijoint.fr/cjlink.php?file=cj201102/cijjZzyTfK.xls
http://www.cijoint.fr/cjlink.php?file=cj201102/cijjZzyTfK.xls
Bonjour,
Je cite :
[ Je souhaiterais saisir l'année sur une cellule excel, par exemple 2011, et qu'a partir de ma saisie dans la cellule « A1 » par exemple ... ]
Cellule A1 sur quel Feuille ? Dans le TCD ?
En attendant, placer ce code derrière la feuille Entête:
Cdt
Info
Je cite :
[ Je souhaiterais saisir l'année sur une cellule excel, par exemple 2011, et qu'a partir de ma saisie dans la cellule « A1 » par exemple ... ]
Cellule A1 sur quel Feuille ? Dans le TCD ?
En attendant, placer ce code derrière la feuille Entête:
Private Sub Worksheet_Change(ByVal Target As Range) If (Target.Address = "$D$6") Then Call MaMacro(Target.Value) End If End Sub ' Sub MaMacro(ByVal Annee As String) MsgBox Annee End Sub '
Cdt
Info
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
soniatouns777
Messages postés
16
Date d'inscription
mercredi 26 janvier 2011
Statut
Membre
Dernière intervention
26 février 2011
1
25 févr. 2011 à 21:56
25 févr. 2011 à 21:56
bonjour,
merci de me reponse,
je suis desolé pour mon incohérence : il s'agit de la saisie d'une valeur dans la cellule D6 dans l'onglet entete, la valeur que je saisirait , par exemple 2010, forcerait dans l'onglet "TCD" à selectionner cette même valeur dans la cellule B1
j'ai fait une macro par enregistrement que selectionne toujours les mêmes champs, seulement pour le champ ou figure l'année, je souhaite avoir la main et choisir l'année
ton code doit il s'inscrire dans un module?
comment faire le lien entre ta macro et la mienne?
désolé par avance pour mes questions qui doivent te sembler bêtes
(Rq :fichier joint)
http://www.cijoint.fr/cjlink.php?file=cj201102/cijjZzyTfK.xls
merci de me reponse,
je suis desolé pour mon incohérence : il s'agit de la saisie d'une valeur dans la cellule D6 dans l'onglet entete, la valeur que je saisirait , par exemple 2010, forcerait dans l'onglet "TCD" à selectionner cette même valeur dans la cellule B1
j'ai fait une macro par enregistrement que selectionne toujours les mêmes champs, seulement pour le champ ou figure l'année, je souhaite avoir la main et choisir l'année
ton code doit il s'inscrire dans un module?
comment faire le lien entre ta macro et la mienne?
désolé par avance pour mes questions qui doivent te sembler bêtes
(Rq :fichier joint)
http://www.cijoint.fr/cjlink.php?file=cj201102/cijjZzyTfK.xls
Merci pour ton aide !!! :
en mettant ton code ,j'ai une boite de dislogue qui s'affiche avec l'année,
maintenant je souhaiterais faire le lien entre la valeur qui figure sur la boite de dialogue et ma macro où je souhaiterais
que le champs exercice prenne la valeur que j'ai saisi (et non pas 2010)
en mettant ton code ,j'ai une boite de dislogue qui s'affiche avec l'année,
maintenant je souhaiterais faire le lien entre la valeur qui figure sur la boite de dialogue et ma macro où je souhaiterais
que le champs exercice prenne la valeur que j'ai saisi (et non pas 2010)
Windows("classeur2.xls").Activate Sheets("TCD").Select ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Exercice"). _ CurrentPage = "2010" ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Sens"). _ CurrentPage = "D" ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Section"). _ CurrentPage = "F"
soniatouns777
Messages postés
16
Date d'inscription
mercredi 26 janvier 2011
Statut
Membre
Dernière intervention
26 février 2011
1
26 févr. 2011 à 21:08
26 févr. 2011 à 21:08
ohé y a quelqu'un?
re :
C'est un bon pas de fait, si tu as vu l'affichage de l'année
inscrite dans la boite de message, c'est que le programme a atteint
la procédure que j'ai écrite :
Maintenant, si tu souhaite atteindre ton TCD, tu dois déplacer cette procédure dans un module et pour éviter le mélange des
"espaces de noms", tu l'appelle en identifiant le module en question:
La procédure MaMacro deviendra quelque chose comme :
Cdt
Info
C'est un bon pas de fait, si tu as vu l'affichage de l'année
inscrite dans la boite de message, c'est que le programme a atteint
la procédure que j'ai écrite :
Sub MaMacro(ByVal Annee As String) MsgBox Annee End Sub '
Maintenant, si tu souhaite atteindre ton TCD, tu dois déplacer cette procédure dans un module et pour éviter le mélange des
"espaces de noms", tu l'appelle en identifiant le module en question:
Private Sub Worksheet_Change(ByVal Target As Range) If (Target.Address = "$D$6") Then Call Module1.MaMacro(Target.Value) End If End Sub '
La procédure MaMacro deviendra quelque chose comme :
Sub MaMacro(ByVal Annee As String) Windows("classeur2.xls").Activate Sheets("TCD").Select ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields ("Exercice"). _ CurrentPage = Annee ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Sens"). _ CurrentPage = "D" ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Section"). _ CurrentPage = "F" End Sub '
Cdt
Info
bonsoir Info,
merci pour ta réponse, j'ai hate de tester le code au boulot , en tout cas je te remercie pour tes explications LIMPIDES !!Si ça marche, je t'en serais eternellement redevable !!
merci encore
soniatouns777
merci pour ta réponse, j'ai hate de tester le code au boulot , en tout cas je te remercie pour tes explications LIMPIDES !!Si ça marche, je t'en serais eternellement redevable !!
merci encore
soniatouns777
re:
C'est toujours un plaisirs quand le travail est apprécié.
Petite remarque :
Soit prudente lors du déplacement de la macro,
ce n'est pas la macro avec la signature
[ Private Sub Worksheet_Change(ByVal Target As Range) ]
que tu dois déplacer, celle-ci doit demeurer derrière la
feuille [ Entête ], mais bien la macro qui porte la signature :
[ Sub MaMacro(ByVal Annee As String) ].
Les macros "procédures" derrière une feuille sont limités
quand à leur portée. Et tu pourrais avoir de la difficulté
à atteindre ton TCD.
Ça te paraîteras un peu complexe, mais il s'agit de ce que
j'appelle les "espaces de noms", ce terme est un peu inexacte
mais il représente bien la signification de la portée des macros
derrière une feuille.
Cdt
Info
P.S. Désolé de n'avoir puis suivre de plus près ce fil, aujourd'hui
je suis en vacance, mais tu connais la routine boulot/dodo et
je n'ai plus 25 ans et j'ai d'autres obligations.
C'est toujours un plaisirs quand le travail est apprécié.
Petite remarque :
Soit prudente lors du déplacement de la macro,
ce n'est pas la macro avec la signature
[ Private Sub Worksheet_Change(ByVal Target As Range) ]
que tu dois déplacer, celle-ci doit demeurer derrière la
feuille [ Entête ], mais bien la macro qui porte la signature :
[ Sub MaMacro(ByVal Annee As String) ].
Les macros "procédures" derrière une feuille sont limités
quand à leur portée. Et tu pourrais avoir de la difficulté
à atteindre ton TCD.
Ça te paraîteras un peu complexe, mais il s'agit de ce que
j'appelle les "espaces de noms", ce terme est un peu inexacte
mais il représente bien la signification de la portée des macros
derrière une feuille.
Cdt
Info
P.S. Désolé de n'avoir puis suivre de plus près ce fil, aujourd'hui
je suis en vacance, mais tu connais la routine boulot/dodo et
je n'ai plus 25 ans et j'ai d'autres obligations.
Bonjour Info,
CA MARCHE !!! C'est génial
j'ai choisi de mettre dans la même macro la boite de dialogue et l'extraction du TCD
ce qui donne
Je te remercie vraiment pour tes explications Info, c'est tellement bien expliqué que je me suis approprié la macro!!.
J'ai une derniere question : est ce que c'est possible d'introduire une petite limitation : je m'explique : dans mon TCD, pour l'instant, les années vont jusque 2011 mais si je saisi 2020, la macro me remplace une année par l'année 2020 alors que je souhaiterais un message d'erreur.
Est ce que c'est possible ? (mais c'est déjà génial !)
Merci encore
Bonne journée!!
Soniatouns777
CA MARCHE !!! C'est génial
j'ai choisi de mettre dans la même macro la boite de dialogue et l'extraction du TCD
ce qui donne
Sub MaMacro(ByVal Annee As String) MsgBox ("Vous avez saisi l'excercice " & Annee) Windows("classeur2.xls").Activate Sheets("TCD").Select ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Exercice"). _ CurrentPage = Annee .....
Je te remercie vraiment pour tes explications Info, c'est tellement bien expliqué que je me suis approprié la macro!!.
J'ai une derniere question : est ce que c'est possible d'introduire une petite limitation : je m'explique : dans mon TCD, pour l'instant, les années vont jusque 2011 mais si je saisi 2020, la macro me remplace une année par l'année 2020 alors que je souhaiterais un message d'erreur.
Est ce que c'est possible ? (mais c'est déjà génial !)
Merci encore
Bonne journée!!
Soniatouns777
re:
Suggestion :
Cdt
Info
Suggestion :
Option Explicit Private Sub Worksheet_Change(ByVal Target As Range) ' Constantes de limites inférieur et supérieur Const DateMin = #1/15/1950# Const DateMax = #1/15/2015# ' Variable temporaire de comparaison Dim LaDate As Date ' Test sur la cellule visé [D6] If (Target.Address = "$D$6") Then ' Formattage de la date choisie LaDate = Format("01-01-" & Target.Value, "DD/MM/YYYY") ' Test sur le date maximun If (LaDate > DateMax) Then MsgBox "Erreur sur la date !!!" Else ' Test sur la date minimum If LaDate < DateMin Then MsgBox "Erreur sur la date !!!" Else ' Si LaDate est dans le range permis Call Module1.MaMacro(Target.Value) End If End If End If End Sub '
Cdt
Info
Merci encore Info,
J'ai l'impression de rever !! tout fonctionne (ce n'est pas normal)
puis je encore abuser une dernière fois de ta gentilesse?
(promis c'est la dernière question ensuite je met le sujet en résolu)
Je souhaite qu'il y'ai non pas 1 mais 2 cellules dans ma feuille entête dans lesquelles je pourrais saisir dans chacune une date et qui feraient le lien avec le même TCD (mais pas la même extraction)
quand j'ai voulu ecrire un second :
Private Sub Worksheet_Change(ByVal Target As Range)
Excel m'a dit que le nom etait ambigue, comment doit-on l'ecrire STP
merci encore pour ton intervention
Soniatouns777
J'ai l'impression de rever !! tout fonctionne (ce n'est pas normal)
puis je encore abuser une dernière fois de ta gentilesse?
(promis c'est la dernière question ensuite je met le sujet en résolu)
Je souhaite qu'il y'ai non pas 1 mais 2 cellules dans ma feuille entête dans lesquelles je pourrais saisir dans chacune une date et qui feraient le lien avec le même TCD (mais pas la même extraction)
quand j'ai voulu ecrire un second :
Private Sub Worksheet_Change(ByVal Target As Range)
Excel m'a dit que le nom etait ambigue, comment doit-on l'ecrire STP
merci encore pour ton intervention
Soniatouns777
re :
En effet il est impossible de dupliquer les évènements. Par contre
dans ce même évènement tu peux valider plusieurs cellules.
Bon j'ai simplifié l'exemple précédent pour ne pas se perdre dans le code!
Il est aussi possible de tester sur une colonne entière, ou une ligne
entière.
Et une combinaison de diverses test !
Je cite :
< ... puis je encore abuser une dernière fois de ta gentilesse? ... ]
Je ne me sens pas abusé le moins du monde, si tu as la patience
d'attendre la réponse, YAKA demandé et je me ferai un plaisirs
de t'aider si cela est dans mes cordes.
L'important est que le tout réponde à ton besoin.
Cdt
Info
En effet il est impossible de dupliquer les évènements. Par contre
dans ce même évènement tu peux valider plusieurs cellules.
Bon j'ai simplifié l'exemple précédent pour ne pas se perdre dans le code!
Private Sub Worksheet_Change(ByVal Target As Range) ' Test sur la cellule visé [D6] If (Target.Address = "$D$6") Then Call Module1.MaMacro(Target.Value) Else If (Target.Address = "$G$8") Then Call Module1.MaMacro2(Target.Value) End If End If End Sub '
Il est aussi possible de tester sur une colonne entière, ou une ligne
entière.
Private Sub Worksheet_Change(ByVal Target As Range) ' Test sur la colonne 3 [ C ] If (Target.Column = 3) Then Call Module1.MaMacro(Target.Value) Else ' Test sur la ligne 8 If (Target.Row = 8) Then Call Module1.MaMacro2(Target.Value) End If End If End Sub '
Et une combinaison de diverses test !
Private Sub Worksheet_Change(ByVal Target As Range) ' Test sur la colonne 3 [ C ] If (Target.Column = 3) Then If ((Target.Row = 6) Or (Target.Row = 8)) Then Call Module1.MaMacro(Target.Value) Else ' Test sur la ligne 8 If (Target.Row = 8) Then If ((Target.Column > 3) And (Target.Column < 9)) Then Call Module1.MaMacro2(Target.Value) End If End If End Sub '
Je cite :
< ... puis je encore abuser une dernière fois de ta gentilesse? ... ]
Je ne me sens pas abusé le moins du monde, si tu as la patience
d'attendre la réponse, YAKA demandé et je me ferai un plaisirs
de t'aider si cela est dans mes cordes.
L'important est que le tout réponde à ton besoin.
Cdt
Info
:-)
Pour la gestion des évènements, il est souvent plus prudent
de désactiver les évènements.
et pour la performance :
Cdt
Bonne continuité.
Info
Pour la gestion des évènements, il est souvent plus prudent
de désactiver les évènements.
Private Sub Worksheet_Change(ByVal Target As Range) Application.EnableEvents = False ' Ton code ' ... Application.EnableEvents = True End Sub '
et pour la performance :
Private Sub Worksheet_Change(ByVal Target As Range) Application.ScreenUpdating = False Application.EnableEvents = False ' Ton code ' ... Application.ScreenUpdating = True Application.EnableEvents = True End Sub
Cdt
Bonne continuité.
Info