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

Lancement automatique d'une macro en VBA

2 réponses
Avatar
meta
Bonjour,

Je sais programmer en VBA, mais un tout petit peu et les recherches sur le
net sont comme trouver une aiguille dans une botte de foin tellement il y
a - trop - d'informations.

Donc j'ai deux questions:

- Comment définit-on une variable qui me permettra de ne plus trainer comme
un boulet Sheet("Feuille") pour la moindre instruction ?
Je voudrais aussi mettre "Feuille" dans une variable.

- Plus compliqué, j'ai écrit une macro qui effectue des modifications sur
une colonne, avec le nombre de lignes de mon tableau qui est calculé par la
macro. Ca marche très bien mais je dois la lancer à la main et je voudrais
le faire automatiquement à chaque modification d'une des cellules de la
colonne. Les exemples d'actions sur changement de valeurs que j'ai trouvés
sur le net ne fonctionnent pas, j'ai du me louper quelque part. Alors si
quelqu'un pouvait me donner le bout de code qui va bien...

Merci d'avance

2 réponses

Avatar
GL
Le 17/03/2014 22:06, meta a écrit :
Bonjour,

Je sais programmer en VBA, mais un tout petit peu et les recherches sur
le net sont comme trouver une aiguille dans une botte de foin tellement
il y a - trop - d'informations.

Donc j'ai deux questions:

- Comment définit-on une variable qui me permettra de ne plus trainer
comme un boulet Sheet("Feuille") pour la moindre instruction ?
Je voudrais aussi mettre "Feuille" dans une variable.



Dim WS As Excel.Worksheet
Set WS = Sheet("Feuille")

Dim NomFeuille As String
ou bien : Dim NomFeuille$ ( $ signifie String )
NomFeuille = "Feuille"
Set WS = Sheet(NomFeuille)

- Plus compliqué, j'ai écrit une macro qui effectue des modifications
sur une colonne, avec le nombre de lignes de mon tableau qui est calculé
par la macro. Ca marche très bien mais je dois la lancer à la main et je
voudrais le faire automatiquement à chaque modification d'une des
cellules de la colonne. Les exemples d'actions sur changement de valeurs
que j'ai trouvés sur le net ne fonctionnent pas, j'ai du me louper
quelque part. Alors si quelqu'un pouvait me donner le bout de code qui
va bien...



La il vous faudra un module de classe, celui lié à la feuille en
question, et programmer la macro correspondant à l'événement OnChange
(à chaque modification d'une cellule de la feuille, cette macro sera
automatiquement déclenchée).

Mais c'est assez lourdingue, vu notamment la lenteur pathologique
d'exécution de VBA.

Sinon vous pouvez insérer un bouton pression (sans rapport avec la St
Patrick) qui déclenche une macro dans un module standard. A charge de
cliquer le bouton pour lancer la macro.

Merci d'avance
Avatar
MichD
Bonjour,

Si tu veux remplacer dans une procédure ceci : Sheet("Feuille")
Tu peux déclarer une variable comme ceci :
'---------------------------------
Sub Test()
Dim Sh As Worksheet
Set Sh = Sheet("Feuil1")
Msgbox Sh.name
End Sub
'---------------------------------

Si tu veux utiliser la variable Sh dans tout ton projet VBA,
Tu déclares ta variable dans le haut d'un module standard comme ceci :
Dim Sh As Worksheet
Attention, si tu choisis cette avenue, tu ne dois plus déclarer la variable
au
niveau de la procédure.

Évidemment pour que la variable soit utilisable, il faut que tu la
définisses.
Pour ce faire, tu peux utiliser cet événement dans le ThisWiorkbook qui
s'exécute à l'ouverture du classeur
'---------------------------------
Private Sub Workbook_Open()
Set Sh = Worksheets("feuil1")
End Sub
'---------------------------------


Dans l'exemple qui suit, à chaque fois que tu modifieras le contenu d'une
cellule de la colonne A, la procédure, Worksheet_Change s'exécutera.
Tu copies cette procédure dans le module de la feuille où l'action se
déroule. Il ne te reste plus qu'à modifier Range("A:A") pour la colonne
de ton application.
'-------------------------------------------------
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Rg As Range, Col As Range

Set Rg = Intersect(Range("A:A"), Target)
If Not Rg Is Nothing Then
For Each Col In Rg.Columns
Call MaMacro(Col)
Next
End If
End Sub
'-------------------------------------------------
Sub MaMacro(Plage As Range)

'Exemple pour modifier la colonne de la colonne
'Diminue la largeur de la colonne par 2
Plage.ColumnWidth = Plage.ColumnWidth / 2
End Sub
'-------------------------------------------------