FAQ VBA
FAQ VBAConsultez toutes les FAQ
Nombre d'auteurs : 10, nombre de questions : 133, dernière mise à jour : 15 juin 2021
- Comment programme-t-on la correction d'orthographe ?
- Peut-on basculer le type de référence par le code ?
- A quoi sert la propriété WorksheetFunction ?
- A quoi correspond la notation [A1] ?
- Quelles différences entre FindFile et GetOpenFilename ?
- Comment gérer les événements de l'application ?
- Peut-on appeler une macro d'un autre classeur ?
- Comment exporter un graphe en un gif ?
- Comment trouver la traduction anglaise d'une fonction de feuille de calcul ?
Cela dépend de ce que l'on veut obtenir. Pour démarrer la correction sur une feuille par exemple il suffit de faire :
Application.CheckSpelling
CustomDictionary:=
"PERSO.DIC"
, IgnoreUppercase:=
False
, AlwaysSuggest:=
True
Ceci a pour effet d'ouvrir la fenêtre du correcteur. Il est possible de contrôler un seul mot, avec une réponse booléenne.
Private
Function
MotExiste
(
ByVal
strMot As
String
) As
Boolean
MotExiste =
Application.CheckSpelling
(
strMot, "PERSO.DIC"
, False
)
End
Function
Oui. Il faut faire
Application.ReferenceStyle
=
xlR1C1
ou xlA1 dans l'autre sens. Néanmoins, il vaut mieux l'éviter en cours d'exécution. Généralement, Excel convertit correctement ses références. Cependant certains codes attendent un type de référence homogène entre le code et la fonction appelée.
Elle renvoie la collection des fonctions intégrées d'Excel. Ceci est très pratique dans de nombreux cas. Par exemple, dans Excel 97, la fonction VBA Replace n'existe pas. Mais Excel fournit sa fonction de feuille SUBSTITUTE qui est équivalente. On peut l'utiliser par le biais de WorksheetFunction.
Dim
MaChaine As
String
MaChaine =
"où est l'apostrophe"
MaChaine =
Application.WorksheetFunction.Substitute
(
MaChaine, "'"
, "''"
)
C'est un appel implicite à la méthode Evaluate. Il s'agit en fait d'un interpréteur (le même que celui qui interprète les formules Excel). On peut faire des utilisations très complexes de cette méthode. Par exemple
MaValeur =
Application.Evaluate
(
"LOG(A1*3+2)"
)
Cela peut s'écrire aussi
MaValeur =
[LOG
(
A1*
3
+
2
)]
Notez qu'il n'y a pas de guillements lorsqu'on utilise la notation crochets. L'interprétation des plages, dans notre cas A1, demande que le système de référence soit homogène. Si ma feuille était en référence LC j'obtiendrais une incompatibilité de type.
Principalement FindFile ouvre le fichier alors que GetOpenFilename renvoie le nom du fichier sélectionné. Cependant GetOpenFilename permet d'utiliser un filtrage ce que ne permet pas la méthode FindFile. Par exemple :
NomFichier =
Application.GetOpenFilename
(
"Classeurs Excel(*.xls),*.xls, Macros complémentaires (*.xla),*.xla"
)
Il y a une plus grande sécurité à utiliser la méthode GetOpenFilename.
Il y a deux approches différentes dans ce concept. L'objet Application donne la possibilité de créer du code sur des méthodes OnAction. Par exemple
Application.OnKey
"^{p}"
, "Gestion"
Déclenche la procédure Gestion sur l'appui des touches CTRL+P Il est aussi possible de faire de l'interruption d'événements sur l'objet Application, mais c'est un peu plus complexe. Dans un module objet (Feuille, classeur, classe), on déclare une variable pour l'application. Dès lors, il est possible de gérer les événements par l'intermédiaire de cette variable.
Dim
WithEvents App As
Application
Private
Sub
App_NewWorkbook
(
ByVal
Wb As
Excel.Workbook
)
End
Sub
Il faut utiliser Run. Cette méthode permet aussi de passer des paramètres. Supposons que mon classeur "calcul.xls" contienne une fonction Log10 telle que :
Public
Function
Log10
(
ByVal
X As
Single
) As
Single
Log10 =
Log
(
X) /
Log
(
10
#)
End
Function
Il est possible de l'utiliser depuis un autre classeur en faisant
Result =
Application.Run
(
"calcul.xls!Log10"
, 1
.2
)
La routine ci-dessous te permettra de sauvegarder le graphe actif
Sub
PrintChart
(
)
Dim
FName As
String
, NomGraphe As
String
NomGraphe =
Right
(
ActiveChart.Name
, Len
(
ActiveChart.Name
) -
Len
(
ActiveSheet.Name
) -
1
)
With
ActiveSheet.ChartObjects
(
NomGraphe).Chart
FName =
Application.GetSaveAsFilename
(
""
, "Fichier Gif (*.GIF),*.GIF,Fichier JPEG (*.JPG),*.JPG,Tous fichiers (*.*),*.*"
)
.Export
Filename:=
FName, FilterName:=
TypeImg, Interactive:=
True
End
With
End
Sub
Dans le répertoire d'installation d'Excel, (généralement C:\Programm Files\Microsoft 0ffice\Officexx\1036 pour une version Office en français), le fichier VBALIST.XLS permet de trouver, entre autres, la traduction des fonctions de feuilles de calcul Excel.
Exemple : pour la fonction EQUIV => MATCH
Ces fonctions peuvent ensuite être utilsées dans le code VBA :
Sub
FindFirst
(
)
myVar =
Application.WorksheetFunction
_
.Match
(
9
, Worksheets
(
1
).Range
(
"A1:A10"
), 0
)
MsgBox
myVar
End
Sub
Lien : A quoi sert la propriété WorksheetFunction ?
Lien : Pourquoi autant de propriétés "Formula" différentes ?