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

vba variable publique + private sub

3 réponses
Avatar
j-pascal
Bonjour,

Dans ce qui suit, je pensais mettre le calcul de "MaPlage" en dehors de
chaque Sub avec une variable déclarée "Publique", mais apparemment ça
ne fonctionne pas. Est-ce du fait qu'il s'agisse de "Private Sub" ?

'---------------------
Private Sub Tri_ColA_Click() 'Ordre
MaPlage = Range("A3:K" & Application.CountA(Range("G:G")) +
2).Address
Range(MaPlage).Sort Key1:=[a3], Order1:=xlAscending
End Sub
Private Sub Tri_ColB_Click() 'Arrivée
MaPlage = Range("A3:K" & Application.CountA(Range("G:G")) +
2).Address
Range(MaPlage).Sort Key1:=[b3], Order1:=xlAscending
End Sub
Private Sub Tri_ColC_Click() 'Courrier
MaPlage = Range("A3:K" & Application.CountA(Range("G:G")) +
2).Address
Range(MaPlage).Sort Key1:=[c3], Order1:=xlAscending
End Sub
'---------------------

Merci pour vos lumières,

JP

3 réponses

Avatar
Daniel.C
J'ai mis les trois macros dans un module feuille; j'ai testé les deux
macros :

Private Sub test1()
MaPlage = Range("A3:K" & Application.CountA(Range("G:G")) +
2).Address
End Sub
Private Sub test2()
Range(MaPlage).Sort Key1:=[c3], Order1:=xlAscending
End Sub

Pas de problème.
Pour déboguer, ajoute :
MsgBox MaPlage avant tri.
Daniel

Bonjour,

Dans ce qui suit, je pensais mettre le calcul de "MaPlage" en dehors de
chaque Sub avec une variable déclarée "Publique", mais apparemment ça ne
fonctionne pas. Est-ce du fait qu'il s'agisse de "Private Sub" ?

'---------------------
Private Sub Tri_ColA_Click() 'Ordre
MaPlage = Range("A3:K" & Application.CountA(Range("G:G")) + 2).Address
Range(MaPlage).Sort Key1:=[a3], Order1:=xlAscending
End Sub
Private Sub Tri_ColB_Click() 'Arrivée
MaPlage = Range("A3:K" & Application.CountA(Range("G:G")) + 2).Address
Range(MaPlage).Sort Key1:=[b3], Order1:=xlAscending
End Sub
Private Sub Tri_ColC_Click() 'Courrier
MaPlage = Range("A3:K" & Application.CountA(Range("G:G")) + 2).Address
Range(MaPlage).Sort Key1:=[c3], Order1:=xlAscending
End Sub
'---------------------

Merci pour vos lumières,

JP


Avatar
LSteph
Pour déclarer proprement si tu as besoin d'y faire appel depuis
plusieurs sub et private sub

'---------------------
'Dans un module standard :

Option Explicit
Public Maplage as string

'---------------------

'dans ton private module

Option Explicit


Private Sub Tri_ColA_Click() 'Ordre
MaPlage = Range("A3:K" & Application.CountA(Range("G:G")) + 2).Address
Range(MaPlage).Sort Key1:=[a3], Order1:=xlAscending
End Sub
Private Sub Tri_ColB_Click() 'Arrivée
MaPlage = Range("A3:K" & Application.CountA(Range("G:G")) + 2).Address
Range(MaPlage).Sort Key1:=[b3], Order1:=xlAscending
End Sub
Private Sub Tri_ColC_Click() 'Courrier
MaPlage = Range("A3:K" & Application.CountA(Range("G:G")) + 2).Address
Range(MaPlage).Sort Key1:=[c3], Order1:=xlAscending
End Sub
'---------------------

j-pascal a écrit :
Bonjour,

Dans ce qui suit, je pensais mettre le calcul de "MaPlage" en dehors de
chaque Sub avec une variable déclarée "Publique", mais apparemment ça ne
fonctionne pas. Est-ce du fait qu'il s'agisse de "Private Sub" ?

'---------------------
Private Sub Tri_ColA_Click() 'Ordre
MaPlage = Range("A3:K" & Application.CountA(Range("G:G")) + 2).Address
Range(MaPlage).Sort Key1:=[a3], Order1:=xlAscending
End Sub
Private Sub Tri_ColB_Click() 'Arrivée
MaPlage = Range("A3:K" & Application.CountA(Range("G:G")) + 2).Address
Range(MaPlage).Sort Key1:=[b3], Order1:=xlAscending
End Sub
Private Sub Tri_ColC_Click() 'Courrier
MaPlage = Range("A3:K" & Application.CountA(Range("G:G")) + 2).Address
Range(MaPlage).Sort Key1:=[c3], Order1:=xlAscending
End Sub
'---------------------

Merci pour vos lumières,

JP




Avatar
j-pascal
Bonjour Stéphane,

En fait, j'avais mis la "Public MaPlage" dans le module de feuille au
lieu d'un module standard ...
Mais ce que je voulais, c'est éviter la répétition de :
"MaPlage = Range("A3:K" & Application.CountA(Range("G:G")) +
2).Address"
et donc juste derrière la déclaration de la variable, j'avais mis la
formule ci-dessus. Apparemment ça n'avait pas fonctionné !

JP

Pour déclarer proprement si tu as besoin d'y faire appel depuis plusieurs sub
et private sub

'---------------------
'Dans un module standard :

Option Explicit
Public Maplage as string

'---------------------

'dans ton private module

Option Explicit


Private Sub Tri_ColA_Click() 'Ordre
MaPlage = Range("A3:K" & Application.CountA(Range("G:G")) + 2).Address
Range(MaPlage).Sort Key1:=[a3], Order1:=xlAscending
End Sub
Private Sub Tri_ColB_Click() 'Arrivée
MaPlage = Range("A3:K" & Application.CountA(Range("G:G")) + 2).Address
Range(MaPlage).Sort Key1:=[b3], Order1:=xlAscending
End Sub
Private Sub Tri_ColC_Click() 'Courrier
MaPlage = Range("A3:K" & Application.CountA(Range("G:G")) + 2).Address
Range(MaPlage).Sort Key1:=[c3], Order1:=xlAscending
End Sub
'---------------------

j-pascal a écrit :
Bonjour,

Dans ce qui suit, je pensais mettre le calcul de "MaPlage" en dehors de
chaque Sub avec une variable déclarée "Publique", mais apparemment ça ne
fonctionne pas. Est-ce du fait qu'il s'agisse de "Private Sub" ?

'---------------------
Private Sub Tri_ColA_Click() 'Ordre
MaPlage = Range("A3:K" & Application.CountA(Range("G:G")) + 2).Address
Range(MaPlage).Sort Key1:=[a3], Order1:=xlAscending
End Sub
Private Sub Tri_ColB_Click() 'Arrivée
MaPlage = Range("A3:K" & Application.CountA(Range("G:G")) + 2).Address
Range(MaPlage).Sort Key1:=[b3], Order1:=xlAscending
End Sub
Private Sub Tri_ColC_Click() 'Courrier
MaPlage = Range("A3:K" & Application.CountA(Range("G:G")) + 2).Address
Range(MaPlage).Sort Key1:=[c3], Order1:=xlAscending
End Sub
'---------------------

Merci pour vos lumières,

JP