VBA : Les modules d’un projet



Modules de code, de feuilles, de classeur…les débutants sont un peu perdu dans les différents modules d’un VBAProject. Ou faut’ il écrire le code ? A quelles conditions les procédures peuvent-elles être appelées ? Ce petit schéma devrait vous aider à y voir plus clair !







VBA : Déclarations implicites des types de données



Lorsque vous déclarez vos variables vous avez l’habitude de préciser explicitement le type de données grâce au mot clé
As (Exemple Dim prenom as String). Mais savez vous que vous avez à votre disposition deux autres méthodes permettant la précision de manière implicite.

- 1 – La première méthode consiste à utiliser un suffixe correspondant au type de données :
Dim prenom$
Déclare la variable prenom de type chaîne (String).
% Integer
&
Long
!
Single
#
Double
@
Currency
$
String
- 2 – La seconde méthode utilise l’instruction DefType : Une instruction de type DefStr E-G, X signifie que toutes les variables de toutes les procédures d’un module dont les noms commencent par e, f, g ou x sont de type String. Pour cela la déclaration doit figurer dans le module général de code.
Exemple :
Option Explicit
DefStr E-G, X
Sub test()
‘il devient inutile de préciser le type de ‘ces variables
Dim ea
Dim fa
Dim ga
Dim xa
ea = "A"
fa = "B"
xa = "A"
ga = ea & fa & xa
MsgBox ga
End Sub

Liste des DefType :
DefBool Boolean
DefDbl Double
DefInt Integer
DefDate Date
DefLng Long
DefStr String
DefCur Currency
DefObj Object
DefSng Single
DefVar Variant
DefByte Byte

VBA : Les fichiers XML



Excel 2007 vous permet de travailler facilement sur vos fichiers XML, après importation du fichier dans la feuille de calcul ; il crée alors une zone de travail nommée « mappage XML ». Votre tableur devient alors un véritable éditeur de fichier XML…


- 1 – Commençons par une procédure permettant l’importation d’un fichier XML dans la feuille de calcul
Sub ImporterXML()
Dim MonFichier As XmlMap
'XmlImport est une méthode de l'objet workbook
'On choisi le fichier à importer et on définie son chemin d'accès
'On crée un Mappage
'On précise la cellule de destination
ActiveWorkbook.XmlImport _
URL:=ActiveWorkbook.Path & "\albuminfo.xml", _
Importmap:=MonFichier, _
Overwrite:=False, _
Destination:=Range("$A$3")
'Il faut attribuer un nom au mappage
MonFichier.Name = "Mes Amis 3"
End Sub


- 2 –Après modification des valeurs (Suppression ou ajout de lignes, correction d’erreurs…) dans le mappage, exportons le résultat dans un nouveau fichier XML
Sub ExportXML()
'SaveAsXMLData est une méthode de l'objet workbook
'On nomme le fichier cible à exporter et on définie son chemin d'accès
'On précise le mappage à utiliser
ActiveWorkbook.SaveAsXMLData _
Filename:=ActiveWorkbook.Path & "\albuminfo3.xml", _
Map:=ActiveWorkbook.XmlMaps("Mes Amis 3")
End Sub
Dans cet exemple j’ai supprimé toutes les lignes du mappage sauf la première.

- 3 – Le fichier XML à été modifié à l’extérieur de mon mappage Excel il nous faut donc réactualiser le mappage
Sub ActualiserXML()
'XmlMaps est une méthode de l'objet workbook permettant la gestion des mappages
'XML, actualiser, supprimer, exporter
ActiveWorkbook.XmlMaps("Mes Amis 3").Import _
"C:\Documents and Settings\User\Mes documents\albuminfo.xml"
End Sub





De nouveau une question au sujet de l’article du 6 Juin 2009 sur la suppression de lignes en fonction d’une valeur contenue dans un champ. C’est Décidément un sujet incontournable ! Cette fois un de nos lecteurs souhaiterait non pas supprimer les lignes mais plutôt les masquer ; et de plus il souhaite que la recherche de la valeur se passe dans toute la feuille et non pas dans une colonne unique. J’ai donc relevé le défi…


- 1 – Considérons la liste (A1 :E20), je souhaite (par exemple) masquer toute les lignes qui contiennent le mot France, quelque soit la colonne dans laquelle il se trouve.


- 2 – Voici le code, charge à vous de l’adapter…
Option Explicit
Option Base 1
Sub recherche2()
Dim i As Integer
Dim j As Integer
Dim lignefin As Integer
Dim recherche As String
Dim contenu As String
Dim tab_compare(5)
Dim compare As Long
recherche = InputBox("Veuillez entrer la valeur cherchée ?", "Welcome", "")
'La valeur saisie est transmise à la variable recherche
With ThisWorkbook.Sheets(1)
'détermination du nombre de lignes dans la base
'le nombre de colonnes est en général connu
Range("A2").Select
Range(Selection, Selection.End(xlDown)).Select
lignefin = Selection.Rows.Count
'pour chaque cellule de la base
For i = 2 To lignefin + 1
For j = 1 To 5
'on parcourt, on stocke le contenu de la cellule et on compare avec la valeur saisie
Cells(i, j).Select
contenu = Cells(i, j).Value
'la fonction InStr(chaîne1, chaîne2) permet de vérifier la présence de chaîne2 dans chaîne1
'et retourne l'occurrence de la première position de la comparaison donc 0 si chaîne2 est ‘pas présente dans chaîne1

compare = InStr(1, contenu, recherche)
'pour chaque comparaison on stocke le résultat dans un tableau
If compare = 0 Then
tab_compare(j) = "Y"
Else
tab_compare(j) = "N"
End If
'il faut cinq résultats positifs pour décider de masquer la ligne
If tab_compare(1) = "Y" And tab_compare(2) = "Y" And tab_compare(3) = "Y" _
And tab_compare(4) = "Y" And tab_compare(5) = "Y" Then
Rows(i).Select
Selection.EntireRow.Hidden = True
End If
Next j
Next i
End With
End Sub
‘************************************************************
Sub Remettre()
'prévoir une macro pour réafficher les lignes
Rows("1:21").Select
Selection.EntireRow.Hidden = False
End Sub

 
- 3 – Voici le résultat après exécution de la procédure recherche2 () que j’ai attaché au bouton Recherche, la procédure Remettre() que j’ai attacher au bouton Réafficher permet de faire réapparaitre les lignes masquées.




VBA : L’horoscope chinois



Dans le prolongement de l’article précédent, je vous propose un algorithme très simple pour le calcul de votre signe astrologique chinois…



- 1 – Ouvrez un nouveau classeur et réalisez le tableau suivant, puis ajouter le bouton de commande Développeur / Contrôles / Insérer / contrôles de formulaire

- 2 – Réaliser un formulaire VBA (TestDate) conforme au modèle ci dessous

- 3 - Affecter la macro OuvrirFormulaire() (que vous avez saisie dans une feuille de module de code) au bouton de commande de votre feuille de calcul.

- 4 – Voici le code de cette macro…
Option Explicit
Sub OuvrirFormulaire()
TestDate.Chinois.Caption = ""
TestDate.Show
End Sub

- 5 –
Le programme vous demande de saisir votre date de naissance puis de cliquer sur le bouton OK. Excel retourne alors votre l’horoscope chinois dans un label.

- 6 – Voici le code du programme :
Option Explicit
'indique que les tableaux sont numérotés à partir d'un indice i=1
Option Base 1
‘******************************************************
Private Sub CalcAge_Click()
'déclaration des variables
Dim ligne As Byte
Dim anChinois As Integer
Dim col As Byte
‘On récupère l’année dans la date de naissance par extraction des 4 caractères placés à droite
anChinois = Right(datenaissance.Value, 4)
‘Maintenant il suffit de balayer le tableau et de comparer les dates
For ligne = 2 To 13
For col = 2 To 11
If Cells(ligne, col).Value = anChinois Then
Chinois.Caption = "Vous êtes " & Cells(ligne, 1).Value & " dans l'horoscope chinois."
End If
Next col
Next ligne
End Sub
‘**********************************************************
Private Sub Sortir_Click()
'fermeture du formulaire
TestDate.Hide
End Sub



VBA : Calculer votre horoscope



Pas d’article depuis début Juillet ! Il est temps de se remettre au travail ; mais comme la période est encore estivale, je vous propose un petit jeu destiné au calcul de son horoscope solaire. De quoi se familiariser avec les fonctions dates d’Excel.


- 1 – Ouvrez un nouveau classeur et réalisez le tableau suivant, puis ajouter le bouton de commande Développeur / Contrôles / Insérer / contrôles de formulaire

- 2 – Réaliser un formulaire VBA (TestDate) conforme au modèle ci dessous

- 3 – Affecter la macro OuvrirFormulaire() (que vous avez saisie dans une feuille de module de code) au bouton de commande de votre feuille de calcul.

- 4 – Voici le code de cette macro…
Option Explicit
Sub OuvrirFormulaire()
With TestDate
.age.Caption = ""
.journaissance.Caption = ""
.Signe.Caption = ""
.datenaissance.Value = ""
End With
TestDate.Show
End Sub

- 5 – Le programme affiche en permanence la date et l’heure courante. Il faut saisir sa date de naissance puis cliquer sur le bouton OK. Excel retourne alors votre âge, votre jour de naissance et votre signe de l’horoscope solaire dans 3 labels différents

- 6 – Voici le code du programme :
Option Explicit
'indique que les tableaux sont numérotés à partir d'un indice i=1
Option Base 1
‘************************************************
Private Sub CalcAge_Click()
'déclaration des variables
Dim dn As Date
Dim dj As Date
Dim dateSigne As Date
Dim NumJourSemaine As Byte
Dim JourSemaine As String
Dim ligne As Byte
Dim TableJourSemaine
'*****************************************
'Calcul et affichage de l'âge avec arrondi
dj = Date
dn = datenaissance.Value
age.Caption = "Vous avez " & Int((dj - dn) / 365.25) & " ans."
'*****************************************
'Calcul et affichage du jour de naissance
‘remplissage du tableau des jours de la semaine
TableJourSemaine = Array("Dimanche", "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi")
‘Weekday(n) retourne le n° d’ordre du jour dans la semaine
NumJourSemaine = Weekday(dn)
‘en fonction du numéro d’ordre le selon que va nous donner le jour
Select Case NumJourSemaine
Case 1
JourSemaine = TableJourSemaine(1)
Case 2
JourSemaine = TableJourSemaine(2)
Case 3
JourSemaine = TableJourSemaine(3)
Case 4
JourSemaine = TableJourSemaine(4)
Case 5
JourSemaine = TableJourSemaine(5)
Case 6
JourSemaine = TableJourSemaine(6)
Case 7
JourSemaine = TableJourSemaine(7)
End Select
journaissance.Caption = "Vous êtes né un " & JourSemaine & "."
'***********************************************************
'calcul et affichage de l'horoscope solaire
ligne = 2
‘il faut transformer la date saisie en une date d’année type, 2009 par exemple car le tableau du classeur correspond à une seule année
dateSigne = CDate(Left(CStr(datenaissance.Value), 6) & "2009")
While ligne >= 2 And ligne <= 13 If dateSigne >= Cells(ligne, 2).Value And dateSigne <= Cells(ligne, 3).Value Then Signe.Caption = "Vous êtes du " & Cells(ligne, 1).Value & " dans l'horoscope solaire."
Exit Sub
Else
‘il faut bloquer le passage à l’année suivante
If dateSigne >= 22 / 12 / 2009 Or dateSigne <= 20 / 1 / 2009 Then Signe.Caption = "Vous êtes du Capricorne dans l'horoscope solaire."
End If
ligne = ligne + 1
End If
Wend
End Sub
‘******************************************************
Private Sub Sortir_Click()
'fermeture du formulaire
TestDate.Hide
End Sub
‘********************************************************
Private Sub UserForm_Activate()
'affichage de la date et de l'heure courante
datejour.Caption = "Aujourd'hui : " & Date & " à " & Time
End Sub





top