Combinaison RECHERCHE avancée
Bonjour le forum,
j'aimerais reporter sur ma feuille excel, le montant correspondant à la consommation de carburant journalier, en fonction de 2 paramètres.
L' ID du véhicule du tableau de report à trouver dans le tableau de consommation et rapporter le montant selon le jour correspondant.
Merci !!
Bonjour Luc, bonjour le forum,
Peut-être comme ça :
Sub Macro1()
Dim OB As Worksheet 'déclare la variable OB (Onglet Base)
Dim OT As Worksheet 'déclare la variable OT (Onglet Tableau)
Dim TV As Variant 'déclare la variable TV (Tableau des valeurs)
Dim DC As Byte 'déclare la variable DC (Dernière Colonne)
Dim ID As Variant 'déclare la variable ID
Dim I As Integer 'déclare la variable I (Incrément)
Dim J As Integer 'déclare la variable J (incrément)
Dim R As Range 'déclare la variable R (Recherche)
Dim LI As Byte 'déclare la variable LI (LIgne)
Dim COL As Byte 'déclare la variable COL (COLonne)
Set OB = Worksheets("sortie essence du mois") 'définit l'onglet OB
Set OT = Worksheets("carburant poids lourds") 'définit l'onglet OT
OT.Range("C9:Q39").ClearContents 'efface les anciennes données
TV = OB.Range("A1").CurrentRegion 'définit la tableau des valeurs TV
DC = OT.Range("R7").End(xlToLeft).Column 'définit la colonne de la dernière ID éditée dans la ligne 7
ID = OT.Range(OT.Cells(7, 3), OT.Cells(7, DC)) 'définit le tableau ID des ID
For I = 2 To UBound(TV, 1) 'boucle 1 : sur toutes les lignes I du tableau des valeurs TV (en partant de la seconde)
For J = 1 To UBound(ID, 2) 'boucle 2 : sur toutes les ID du tableau des ID
If TV(I, 3) = ID(1, J) Then 'condition 1 : si la donnée ligne I colonne 3 de TV est égale à la donnée ligne 1 colonne J de ID
COL = J + 2 'définit la colonne COL
Set R = OT.Columns(2).Find(TV(I, 1), , xlValues, xlWhole) 'définit la recherche R (recherche la date (TV(I,1) dans la colonne 2 de l'ongelt OT)
If Not R Is Nothing Then 'condition 2: s'il existe au moins une occurrence trouvée
LI = R.Row 'de'finit la ligne LI (ligne de la première occurrence trouvée)
OT.Cells(LI, COL).Value = TV(I, 5) 'renvoie les litres (TV(I,5)) dans la cellule ligne LI colonne COL de l'onglet OT
End If 'fin de la condition 2
End If 'fin de la condition 1
Next J 'prochaine ID de la boucle 2
Next I 'prochaine ligne de la boucle 1
End SubBonjour Thauthème et merci.
Je vais regarder comment cela sort!
Merci beaucoup !
Petite plus, lorsqu'il y a un doublon sur la même date, c'est à dire dans mon cas, un double approvisionnement sur une même date pour un même véhicule, possible de programmer sur une cellule en bas du tableau, mettre le volume pris et donner la date qui fait doublon, soit en surlignant la date ou d'une autre façon?
Bonjour, la macro et la formule fonctionnent plutôt bien, pas de bug remonté.
Problème confronté, j'ai le même véhicule qui prends du carburant, le matin et le soir, shift de nuit… comment l'incrémenter dans ma consommation journalière?
Merci !!
Bonjour le fil, bonjour le forum,
Le code modifié :
Private Sub CommandButton1_Click()
Dim OB As Worksheet 'déclare la variable OB (Onglet Base)
Dim OT As Worksheet 'déclare la variable OT (Onglet Tableau)
Dim TV As Variant 'déclare la variable TV (Tableau des valeurs)
Dim DC As Byte 'déclare la variable DC (Dernière Colonne)
Dim ID As Variant 'déclare la variable ID
Dim I As Integer 'déclare la variable I (Incrément)
Dim J As Integer 'déclare la variable J (incrément)
Dim R As Range 'déclare la variable R (Recherche)
Dim LI As Byte 'déclare la variable LI (LIgne)
Dim COL As Byte 'déclare la variable COL (COLonne)
Set OB = Worksheets("sortie essence du mois") 'définit l'onglet OB
Set OT = Worksheets("carburant poids lourds") 'définit l'onglet OT
OT.Range("C9:Q39").ClearContents 'efface les anciennes données
TV = OB.Range("A1").CurrentRegion 'définit la tableau des valeurs TV
DC = OT.Range("R7").End(xlToLeft).Column 'définit la colonne de la dernière ID éditée dans la ligne 7
ID = OT.Range(OT.Cells(7, 3), OT.Cells(7, DC)) 'définit le tableau ID des ID
For I = 2 To UBound(TV, 1) 'boucle 1 : sur toutes les lignes I du tableau des valeurs TV (en partant de la seconde)
For J = 1 To UBound(ID, 2) 'boucle 2 : sur toutes les ID du tableau des ID
If TV(I, 3) = ID(1, J) Then 'condition 1 : si la donnée ligne I colonne 3 de TV est égale à la donnée ligne 1 colonne J de ID
COL = J + 2 'définit la colonne COL
Set R = OT.Columns(2).Find(TV(I, 1), , xlValues, xlWhole) 'définit la recherche R (recherche la date (TV(I,1) dans la colonne 2 de l'ongelt OT)
If Not R Is Nothing Then 'condition 2: s'il existe au moins une occurrence trouvée
LI = R.Row 'de'finit la ligne LI (ligne de la première occurrence trouvée)
OT.Cells(LI, COL).Value = OT.Cells(LI, COL).Value + TV(I, 5) 'renvoie la somme des litres (TV(I,5)) dans la cellule ligne LI colonne COL de l'onglet OT <===== changement ici
End If 'fin de la condition 2
End If 'fin de la condition 1
Next J 'prochaine ID de la boucle 2
Next I 'prochaine ligne de la boucle 1
End SubLe fichier :