Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

SendKeys sur plusieurs onglets

6 réponses
Avatar
GGAL
Bonjour,


J'ai la macro suivante qui permet d'ouvrir rapidement des listes déroulantes :

Sub Worksheet_SelectionChange(ByVal Target As Range)
For i = 6 To 36
If Target.Address = Range("F" & i).Address Then Application.SendKeys
("%DOWN}")
Next i
End Sub

J'ai recopier la macro sur les autres feuilles (qui correspndent aux 12 mois
de l'année)

Est-il possible de n'avoir qu'une seule procédure s'appliquant à l'ensemble
des feuilles.

Merci beaucoup.


Ggal

6 réponses

Avatar
michdenis
Dans le ThisWorkbook de ton classeur :

Écrit de cette façon, cela suppose que toutes les feuilles
sont similaires... sinon tu peux utiliser l'objet Sh pour
restreindre les feuilles où cela ne s'applique pas.

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target
As Range)
For i = 6 To 36
If Target.Address = Range("F" & i).Address Then Application.SendKeys
("%DOWN}")
Next i
End Sub




"GGAL" a écrit dans le message de news:

Bonjour,


J'ai la macro suivante qui permet d'ouvrir rapidement des listes déroulantes
:

Sub Worksheet_SelectionChange(ByVal Target As Range)
For i = 6 To 36
If Target.Address = Range("F" & i).Address Then Application.SendKeys
("%DOWN}")
Next i
End Sub

J'ai recopier la macro sur les autres feuilles (qui correspndent aux 12 mois
de l'année)

Est-il possible de n'avoir qu'une seule procédure s'appliquant à l'ensemble
des feuilles.

Merci beaucoup.


Ggal
Avatar
GGAL
Merci

C'est ce que je cherchais.
Mais dans le cas où la procédure ne s'appliquerait pour la feuille (1) par
exemple, ça donnerait quoi ?

Ggal


"michdenis" a écrit :

Dans le ThisWorkbook de ton classeur :

Écrit de cette façon, cela suppose que toutes les feuilles
sont similaires... sinon tu peux utiliser l'objet Sh pour
restreindre les feuilles où cela ne s'applique pas.

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target
As Range)
For i = 6 To 36
If Target.Address = Range("F" & i).Address Then Application.SendKeys
("%DOWN}")
Next i
End Sub




"GGAL" a écrit dans le message de news:

Bonjour,


J'ai la macro suivante qui permet d'ouvrir rapidement des listes déroulantes
:

Sub Worksheet_SelectionChange(ByVal Target As Range)
For i = 6 To 36
If Target.Address = Range("F" & i).Address Then Application.SendKeys
("%DOWN}")
Next i
End Sub

J'ai recopier la macro sur les autres feuilles (qui correspndent aux 12 mois
de l'année)

Est-il possible de n'avoir qu'une seule procédure s'appliquant à l'ensemble
des feuilles.

Merci beaucoup.


Ggal




Avatar
michdenis
Tu débutes ta procédure par un test :

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target
As Range)
Select Case Sh.Name
Case Is = "Feuil1"
For i = 6 To 36
If Target.Address = Range("F" & i).Address Then
Application.SendKeys ("%DOWN}")
End If
Next i
End Select
End Sub

Et si tu veux inclure seulement certaines feuilles, tu n'as qu'à modifier
la ligne suivante : pour inclure Feuil4 et aussi Feuil10
Case Is = "Feuil1", "Feuil4", "Feuil10"







"GGAL" a écrit dans le message de news:

Merci

C'est ce que je cherchais.
Mais dans le cas où la procédure ne s'appliquerait pour la feuille (1) par
exemple, ça donnerait quoi ?

Ggal


"michdenis" a écrit :

Dans le ThisWorkbook de ton classeur :

Écrit de cette façon, cela suppose que toutes les feuilles
sont similaires... sinon tu peux utiliser l'objet Sh pour
restreindre les feuilles où cela ne s'applique pas.

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target
As Range)
For i = 6 To 36
If Target.Address = Range("F" & i).Address Then Application.SendKeys
("%DOWN}")
Next i
End Sub




"GGAL" a écrit dans le message de news:

Bonjour,


J'ai la macro suivante qui permet d'ouvrir rapidement des listes
déroulantes
:

Sub Worksheet_SelectionChange(ByVal Target As Range)
For i = 6 To 36
If Target.Address = Range("F" & i).Address Then Application.SendKeys
("%DOWN}")
Next i
End Sub

J'ai recopier la macro sur les autres feuilles (qui correspndent aux 12
mois
de l'année)

Est-il possible de n'avoir qu'une seule procédure s'appliquant à
l'ensemble
des feuilles.

Merci beaucoup.


Ggal




Avatar
GGAL
D'accord quand on connaît le nom des feuilles.
Mais quand on veut l'appliquer indépendamment des noms, en tenant compte
des numéros des feuilles : Sheets(1), Sheets(4)

Ggal


"michdenis" a écrit :

Tu débutes ta procédure par un test :

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target
As Range)
Select Case Sh.Name
Case Is = "Feuil1"
For i = 6 To 36
If Target.Address = Range("F" & i).Address Then
Application.SendKeys ("%DOWN}")
End If
Next i
End Select
End Sub

Et si tu veux inclure seulement certaines feuilles, tu n'as qu'à modifier
la ligne suivante : pour inclure Feuil4 et aussi Feuil10
Case Is = "Feuil1", "Feuil4", "Feuil10"







"GGAL" a écrit dans le message de news:

Merci

C'est ce que je cherchais.
Mais dans le cas où la procédure ne s'appliquerait pour la feuille (1) par
exemple, ça donnerait quoi ?

Ggal


"michdenis" a écrit :

> Dans le ThisWorkbook de ton classeur :
>
> Écrit de cette façon, cela suppose que toutes les feuilles
> sont similaires... sinon tu peux utiliser l'objet Sh pour
> restreindre les feuilles où cela ne s'applique pas.
>
> Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target
> As Range)
> For i = 6 To 36
> If Target.Address = Range("F" & i).Address Then Application.SendKeys
> ("%DOWN}")
> Next i
> End Sub
>
>
>
>
> "GGAL" a écrit dans le message de news:
>
> Bonjour,
>
>
> J'ai la macro suivante qui permet d'ouvrir rapidement des listes
> déroulantes
> :
>
> Sub Worksheet_SelectionChange(ByVal Target As Range)
> For i = 6 To 36
> If Target.Address = Range("F" & i).Address Then Application.SendKeys
> ("%DOWN}")
> Next i
> End Sub
>
> J'ai recopier la macro sur les autres feuilles (qui correspndent aux 12
> mois
> de l'année)
>
> Est-il possible de n'avoir qu'une seule procédure s'appliquant à
> l'ensemble
> des feuilles.
>
> Merci beaucoup.
>
>
> Ggal
>
>




Avatar
michdenis
| des numéros des feuilles : Sheets(1), Sheets(4)

Idéalement, tu devrais utiliser la propriété "CodeName"
En fait, elle te retourne le nom de l'objet "Feuill" tel que
défini dans l'environnement VBA

Dans la fenêtre de l'éditeur de code, dans la section
Projet VBA, les noms des feuilles apparaissent comme suit :

Feuil1(Feuil1)

Le premier Feuil1 représente la propriété CodeName et si
tu regarde dans les propriétés de cette dernière, Tu auras "Feuil"
pour la propriété "Name"

(Feuil1) représente le nom de l'onglet de la feuille.

En utilisant CodeName, ton code demeure toujours bon même si
l'usager s'amuse à modifier le nom des onglets des feuilles.

Pour ta question : Sheets(1) représente l'objet "Feuille" et non pas
le nom de la feuille.... mais tu peux utiliser Sheets(1).Name






"michdenis" a écrit :

Tu débutes ta procédure par un test :

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target
As Range)
Select Case Sh.Name
Case Is = "Feuil1"
For i = 6 To 36
If Target.Address = Range("F" & i).Address Then
Application.SendKeys ("%DOWN}")
End If
Next i
End Select
End Sub

Et si tu veux inclure seulement certaines feuilles, tu n'as qu'à modifier
la ligne suivante : pour inclure Feuil4 et aussi Feuil10
Case Is = "Feuil1", "Feuil4", "Feuil10"







"GGAL" a écrit dans le message de news:

Merci

C'est ce que je cherchais.
Mais dans le cas où la procédure ne s'appliquerait pour la feuille (1) par
exemple, ça donnerait quoi ?

Ggal


"michdenis" a écrit :

> Dans le ThisWorkbook de ton classeur :
>
> Écrit de cette façon, cela suppose que toutes les feuilles
> sont similaires... sinon tu peux utiliser l'objet Sh pour
> restreindre les feuilles où cela ne s'applique pas.
>
> Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal
> Target
> As Range)
> For i = 6 To 36
> If Target.Address = Range("F" & i).Address Then Application.SendKeys
> ("%DOWN}")
> Next i
> End Sub
>
>
>
>
> "GGAL" a écrit dans le message de news:
>
> Bonjour,
>
>
> J'ai la macro suivante qui permet d'ouvrir rapidement des listes
> déroulantes
> :
>
> Sub Worksheet_SelectionChange(ByVal Target As Range)
> For i = 6 To 36
> If Target.Address = Range("F" & i).Address Then Application.SendKeys
> ("%DOWN}")
> Next i
> End Sub
>
> J'ai recopier la macro sur les autres feuilles (qui correspndent aux 12
> mois
> de l'année)
>
> Est-il possible de n'avoir qu'une seule procédure s'appliquant à
> l'ensemble
> des feuilles.
>
> Merci beaucoup.
>
>
> Ggal
>
>




Avatar
GGAL
C'est parfait, merci pour tout.

Ggal

"michdenis" a écrit :

| des numéros des feuilles : Sheets(1), Sheets(4)

Idéalement, tu devrais utiliser la propriété "CodeName"
En fait, elle te retourne le nom de l'objet "Feuill" tel que
défini dans l'environnement VBA

Dans la fenêtre de l'éditeur de code, dans la section
Projet VBA, les noms des feuilles apparaissent comme suit :

Feuil1(Feuil1)

Le premier Feuil1 représente la propriété CodeName et si
tu regarde dans les propriétés de cette dernière, Tu auras "Feuil"
pour la propriété "Name"

(Feuil1) représente le nom de l'onglet de la feuille.

En utilisant CodeName, ton code demeure toujours bon même si
l'usager s'amuse à modifier le nom des onglets des feuilles.

Pour ta question : Sheets(1) représente l'objet "Feuille" et non pas
le nom de la feuille.... mais tu peux utiliser Sheets(1).Name






"michdenis" a écrit :

> Tu débutes ta procédure par un test :
>
> Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target
> As Range)
> Select Case Sh.Name
> Case Is = "Feuil1"
> For i = 6 To 36
> If Target.Address = Range("F" & i).Address Then
> Application.SendKeys ("%DOWN}")
> End If
> Next i
> End Select
> End Sub
>
> Et si tu veux inclure seulement certaines feuilles, tu n'as qu'à modifier
> la ligne suivante : pour inclure Feuil4 et aussi Feuil10
> Case Is = "Feuil1", "Feuil4", "Feuil10"
>
>
>
>
>
>
>
> "GGAL" a écrit dans le message de news:
>
> Merci
>
> C'est ce que je cherchais.
> Mais dans le cas où la procédure ne s'appliquerait pour la feuille (1) par
> exemple, ça donnerait quoi ?
>
> Ggal
>
>
> "michdenis" a écrit :
>
> > Dans le ThisWorkbook de ton classeur :
> >
> > Écrit de cette façon, cela suppose que toutes les feuilles
> > sont similaires... sinon tu peux utiliser l'objet Sh pour
> > restreindre les feuilles où cela ne s'applique pas.
> >
> > Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal
> > Target
> > As Range)
> > For i = 6 To 36
> > If Target.Address = Range("F" & i).Address Then Application.SendKeys
> > ("%DOWN}")
> > Next i
> > End Sub
> >
> >
> >
> >
> > "GGAL" a écrit dans le message de news:
> >
> > Bonjour,
> >
> >
> > J'ai la macro suivante qui permet d'ouvrir rapidement des listes
> > déroulantes
> > :
> >
> > Sub Worksheet_SelectionChange(ByVal Target As Range)
> > For i = 6 To 36
> > If Target.Address = Range("F" & i).Address Then Application.SendKeys
> > ("%DOWN}")
> > Next i
> > End Sub
> >
> > J'ai recopier la macro sur les autres feuilles (qui correspndent aux 12
> > mois
> > de l'année)
> >
> > Est-il possible de n'avoir qu'une seule procédure s'appliquant à
> > l'ensemble
> > des feuilles.
> >
> > Merci beaucoup.
> >
> >
> > Ggal
> >
> >
>
>