0% ont trouvé ce document utile (0 vote)
6 vues4 pages

Gestion des véhicules dans UserForm VBA

Ce document contient un code VBA pour un UserForm qui gère des données liées à des véhicules, incluant des tableaux structurés pour la base de données. Il initialise des listes déroulantes, gère les événements de changement de sélection, et permet d'ajouter des entrées tout en vérifiant les champs obligatoires. Des fonctionnalités de validation et de calculs automatiques sont également intégrées pour assurer la cohérence des données saisies.

Transféré par

Tchapdie Bris
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats TXT, PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
6 vues4 pages

Gestion des véhicules dans UserForm VBA

Ce document contient un code VBA pour un UserForm qui gère des données liées à des véhicules, incluant des tableaux structurés pour la base de données. Il initialise des listes déroulantes, gère les événements de changement de sélection, et permet d'ajouter des entrées tout en vérifiant les champs obligatoires. Des fonctionnalités de validation et de calculs automatiques sont également intégrées pour assurer la cohérence des données saisies.

Transféré par

Tchapdie Bris
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats TXT, PDF, TXT ou lisez en ligne sur Scribd

Option Explicit 'oblige à déclarer toutes les variables

Private OB As Worksheet 'déclare la variable OB (Onglet Base)


Private TSB As ListObject 'déclare la variable TSB (Tableau Structuré Base)
Private OL As Worksheet 'déclare la variable OL (Onglet Listes)
Private TSV As ListObject 'déclare la variable TSV (Tableau Structuré Véhicules)
Private TSC As ListObject 'déclare la variable TSC (Tableau Structuré Carburant)

Private Sub UserForm_Initialize() 'à l'initialisation de l'UserForm


Set OB = Worksheets("Base") 'définit l'onglet OB
Set TSB = [Link]("Tableau3") 'définit le tableau structuré TSB
Set OL = Worksheets("Listes") 'définit l'onglet OL
Set TSV = [Link]("Tableau1") 'définit le tableau structuré TSV
Set TSC = [Link]("Tableau2") 'définit le tableau structuré TSC
With [Link] 'prend en compte TBDate
.Value = Date 'valeur
.SelStart = 0 'début de la sélection
.SelLength = Len(.Value) 'longueur de la sélection
End With 'fin de la prise en compte de TBDate
If [Link] = 0 Then 'condition : si le tableau structuré TSV est vide
MsgBox "Vous devez alimenter la liste de vos véhicules en cliquant sur le
bouton " & Chr(34) & "Nouveau Véhicule" & Chr(34) & " !" 'message
[Link] 'active l'onglet
End 'Stoppe tout code
End If 'fin de l condition
If [Link] = 1 Then 'condition : si le tableau structuré TSV ne contient
qu'une seule ligne
[Link] [Link](1, 1) 'ajoute l'unique donnée de la
colonne 1 à CBVehicule
[Link] [Link](1, 2) 'ajoute l'unique donnée de la
colonne 2 à CBImmat
Else 'sinon
[Link] = [Link]([Link](1))
'alimente CBVehicule (colonne 1 de TSV)
[Link] = [Link]([Link](2)) 'alimente
CBImmat (colonne 2 de TSV)
End If 'fin de la condition
[Link] = [Link]([Link](1)) 'alimente
CBCode (colonne 1 de TSC)
[Link] = [Link]([Link](2)) 'alimente CBNom
(colonne 2 de TSC)
End Sub

Private Sub CBVehicule_Change() 'au changement dans CBVehicule


If [Link] = "" Then Exit Sub 'si CBVehicule est effacée, sort de la
procédure
'renvoie dans CBImmat le résultat de la recherche dans la colonne 1 de TSV de la
valeur entière de CBVehicule décalé d'une colonne vers la droite
[Link] = [Link](1).[Link]([Link], , xlValues,
xlWhole).Offset(0, 1)
'renvoie dans CBCode le résultat de la recherche dans la colonne 1 de TSV de la
valeur entière de CBVehicule décalé de deux colonnes vers la droite
[Link] = [Link](1).[Link]([Link], , xlValues,
xlWhole).Offset(0, 2)
'renvoie dans CBNom le résultat de la recherche dans la colonne 1 de TSV de la
valeur entière de CBVehicule décalé de trois colonnes vers la droite
[Link] = [Link](1).[Link]([Link], , xlValues,
xlWhole).Offset(0, 3)
With [Link] 'prend en compte CBCode
.SelStart = 0 'début de la sélection
.SelLength = Len(.Value) 'longueur de la sélection
.SetFocus 'place le curseur
End With 'fin de la prise en compte de CBCode
End Sub

Private Sub CBImmat_Change() 'au changement dans CBImmat


If [Link] = "" Then Exit Sub 'si CBImmat est effacée, sort de la
procédure
'renvoie dans CBVehicule le résultat de la recherche dans la colonne 2 de TSV de la
valeur entière de CBImmat décalé d'une colonne vers la gauche
[Link] = [Link](2).[Link]([Link], , xlValues,
xlWhole).Offset(0, -1).Value
'renvoie dans CBCode le résultat de la recherche dans la colonne 2 de TSV de la
valeur entière de CBImmat décalé d'une colonne vers la droite
[Link] = [Link](2).[Link]([Link], , xlValues,
xlWhole).Offset(0, 1).Value
'renvoie dans CBNom le résultat de la recherche dans la colonne 2 de TSV de la
valeur entière de CBImmat décalé de deux colonnes vers la droite
[Link] = [Link](2).[Link]([Link], , xlValues,
xlWhole).Offset(0, 2).Value
With [Link] 'prend en compte CBCode
.SelStart = 0 'début de la sélection
.SelLength = Len(.Value) 'longueur de la sélection
.SetFocus 'place le curseur
End With 'fin de la prise en compte de la CBCode
End Sub

Private Sub CBCode_Change() 'au changement dans CBCode


[Link] = [Link] 'change CBNom
End Sub

Private Sub CBNom_Change() 'au changement dans CBNom


[Link] = [Link] 'change CBCode
End Sub

Private Sub TBPrixL_KeyPress(ByVal KeyAscii As [Link]) 'à l'appui


sur une touche dans TBPrixL
If KeyAscii = 46 Then KeyAscii = 44: Exit Sub 'remplace le point par une virgule,
sort de la procédure
'remplace toute autre touche que {0, 1, 2, 3, 4, 5, 6, 7, 8 et 9} par Backspace
(effacement retour arrière)
If KeyAscii < 47 Or KeyAscii > 58 Then KeyAscii = 8
End Sub

Private Sub TBQuant_KeyPress(ByVal KeyAscii As [Link]) 'à l'appui


sur une touche dans TBQuant
If KeyAscii = 46 Then KeyAscii = 44: Exit Sub 'remplace le point par une virgule,
sort de la procédure
'remplace toute autre touche que {0, 1, 2, 3, 4, 5, 6, 7, 8 et 9} par Backspace
(effacement retour arrière)
If KeyAscii < 47 Or KeyAscii > 58 Then KeyAscii = 8
End Sub

Private Sub TBKilom_KeyPress(ByVal KeyAscii As [Link]) 'à l'appui


sur une touche dans TBKilom
'remplace toute autre touche que {0, 1, 2, 3, 4, 5, 6, 7, 8 et 9} par Backspace
(effacement retour arrière)
If KeyAscii < 47 Or KeyAscii > 58 Then KeyAscii = 8
End Sub
Private Sub CommandButton1_Click() 'bouton "OK"
Dim CTRL As Control 'déclare la variable CRTL (ConTRôLe)
Dim R As Range 'déclare la variable R (Recherche)
Dim LI As Integer 'déclare la variable LI (LIgne)
Dim I As Integer 'déclare la variable I(Incrément)

For Each CTRL In [Link] 'boucle sur tous les contrôles CTRL de l'UserForm en
cours
If [Link] <> "" Then 'condition 1 : si la propriété [Tag] du contrôle n'est
pas vide
If [Link] = "" Then 'condition 2 : si le contrôle est vide
MsgBox "Vous devez renseigner de champ !" 'message
[Link] 'place le curseur
Exit Sub 'sort de la procédure
End If 'fin de la condition 2
End If 'fin de la condition 1
Next CTRL 'prochain contrôle de la boucle
Set R = [Link](1).[Link]("") 'définit la recherche R (Recherche du
vide dans la colonne 1 de TSB)
If R Is Nothing Or [Link] = 0 Then 'condition : si aucune occurrence
n'est trouvée ou si TSB ne contient pas encore de ligne
[Link] 'ajoute une ligne à TSB
LI = [Link] 'définit la ligne LI (dernière ligne de TSB)
Else 'sinon (au moins une occurrence trouvée)
LI = [Link] - [Link] 'définit la ligne LI (ligne de la première
occurrence trouvée moins la ligne de en-têtes de TSB)
End If 'fin de la condition
[Link](LI, 1) = CDate([Link]) 'renvoie la date de TBDate dans
TSB ligne LI colonne 1
[Link](LI, 2) = [Link] 'renvoie la valeur de CBVehicule
dans TSB ligne LI colonne 2
[Link](LI, 3) = [Link] 'renvoie la valeur de CBCode dans TSB
ligne LI colonne 3
[Link](LI, 4) = [Link] 'renvoie la valeur de CBNom dans TSB
ligne LI colonne 4
[Link](LI, 5) = CDbl([Link]) 'renvoie la valeur de TBPrixL
(convertie en décimal Double) dans TSB ligne LI colonne 5
[Link](LI, 6) = CDbl([Link]) 'renvoie la valeur de TBQuant
(convertie en décimal Double) dans TSB ligne LI colonne 6
[Link](LI, 8) = CLng([Link]) 'renvoie la valeur de TBKilom
(convertie en entier long) dans TSB ligne LI colonne 8
For I = [Link] - 1 To 1 Step -1 'boucle inversée : sur toutes les ligne
I de TSB (de l'avant dernière à la première)
If [Link](I, 2) = [Link] Then 'condition 1 : si le véhicule
de la ligne I est égal à CBVehicule
If [Link](LI, 2).Value = [Link] Then 'condition 2 : si le
véhicule de la ligne LI est égal à CBVehicule
On Error Resume Next 'gestion des erreurs (en cas d'erreur passe à la
ligne suivante) ?
'renvoie la différence entre les kilométrages du même véhicule (le
kilométrage parcouru depuis le dernier plein)
[Link](I, 10).Value = [Link](LI, 8).Value -
[Link](I, 8).Value
'renvoie la différence entre les dates du même véhicule (la durée
depuis le dernier plein)
[Link](I, 11).Value = CDate([Link](LI, 1).Value)
- CDate([Link](I, 1).Value)
'revoie la consommation par rapport au plein
[Link](I, 9).Value = Round(CDbl([Link](I, 6) *
100 / [Link](I, 10)), 2)
Exit For 'sort de la boucle
End If 'fin de la condition 2
End If 'fin de la condition 1
Next I 'prochaine ligne de la boucle
Unload Me 'vide et ferme l'USerForm1
End Sub

Private Sub CommandButton2_Click()


Unload Me 'vide et ferme l'USerForm en cours
End Sub

Vous aimerez peut-être aussi