Microsoft 365 Amélioration/réparation d'une Macro et création d'un bouton pour calcul consommation

Olihoes

XLDnaute Nouveau
Bonjour à tous,


J'ai besoin de votre aide pour 2 soucis que je n'arrive pas à résoudre :
(Je sais que certaines choses paraissent étranges dans ce tableau, mais je dois simuler certaines données qui n'ont pas été fournies par les chauffeurs les années précédentes)

1)
J'ai grâce à l'aide de ce forum pu avoir un premier bouton qui effaçait les cellules se rapportant aux jours où on ne fait pas de plein du véhicule.
Vous m’avez fourni 2 solutions : (Encore merci à Sylvanu et CHRIS1945)
J'ai dans un premier temps utilisé la première (Macro nettoyage) mais j'ai dû ensuite rajouter une ligne pour chaque jour de l'année dans mon tableau ... :-(
Et étant assez nul je n'ai jamais réussi à modifier cette Macro nettoyage pour qu'elle supprime 3 cellules au lieu de deux.
J'ai donc utilisé la seconde Macro (Macro MAJ) que j'ai réussi à modifier pour supprimer également les lignes kilométrages que j'ai dû rajouter.

La Macro "nettoyage" donnait un résultat instantané tandis que l'autre mettait 2 ou 3 secondes à effacer les cellules superflues.
Mais maintenant, je ne sais pas ce que j'ai pu faire comme bêtise mais la macro MAJ met bien 5 minutes à s'exécuter...

Si vous pouviez modifier la macro "nettoyage" qui semblait plus rapide pour qu'elle puisse également effacer 3 cellules au lieu de 2.
(La macro affectée au bouton est actuellement celle "MAJ" que j'ai modifié)

2)
J'aurais besoin d'un second bouton qui calculerait la valeur des cellules "kilométrage" restantes après la macro du premier bouton en estimant le kilométrage par rapport à la consommation moyenne fournie au-dessus du tableau et au nombre de litre mis par le chauffeur ce jour-là.
En modifiant le résultat d'un nombre aléatoire (par exemple entre -40 et 40) pour avoir des données de kilométrage + réaliste qu'une consommation qui resterait parfaitement fixe toute l'année.

Pour l'instant j'ai mis une formule basique dans les cellules "kilométrage"(sans l'ajout de la valeur aléatoire) qui fonctionne tant que mon tableau est plein, mais dès que j'effacerai les cellules des jours où il n'y a pas eu de plein ma formule ne fonctionnera plus…


Merci d’avance pour votre aide.


Olivier
 

Pièces jointes

  • Tableau pleins véhicules.xlsm
    234.3 KB · Affichages: 4

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Olihoes,
Testez cette PJ pour le premier point avec :
VB:
Sub Nettoyage()
Dim L%, C%, Tablo
Application.ScreenUpdating = False
Tablo = Range("A9:Q" & [A10000].End(xlUp).Row)
For L = 3 To UBound(Tablo) - 3 Step 4
    For C = 4 To UBound(Tablo, 2)
        If Tablo(L, C) = "" Then
            Tablo(L + 1, C) = ""
            Tablo(L + 2, C) = ""
            Tablo(L + 3, C) = ""
        End If
    Next C
Next L
[A9].Resize(UBound(Tablo, 1), UBound(Tablo, 2)) = Tablo
End Sub
pour le second point soyez plus clair, je n'ai pas compris.
 

Pièces jointes

  • Tableau pleins véhicules.xlsm
    129.7 KB · Affichages: 0

Olihoes

XLDnaute Nouveau
Bonjour Olihoes,
Testez cette PJ pour le premier point avec :
VB:
Sub Nettoyage()
Dim L%, C%, Tablo
Application.ScreenUpdating = False
Tablo = Range("A9:Q" & [A10000].End(xlUp).Row)
For L = 3 To UBound(Tablo) - 3 Step 4
    For C = 4 To UBound(Tablo, 2)
        If Tablo(L, C) = "" Then
            Tablo(L + 1, C) = ""
            Tablo(L + 2, C) = ""
            Tablo(L + 3, C) = ""
        End If
    Next C
Next L
[A9].Resize(UBound(Tablo, 1), UBound(Tablo, 2)) = Tablo
End Sub
pour le second point soyez plus clair, je n'ai pas compris.
Bonjour,

C'est encore vous le + rapide :)
Oui ça fonctionne et il efface les cellules rapidement.
Déjà une chose de réglée :)

Je met le fichier avec cette modification en pièce jointe

Je quitte le boulot, donc je ne pourrais pas voir les réponses suivantes tout de suite.

Merci beaucoup et bon weekend à tous
 

Pièces jointes

  • Tableau pleins véhicules.xlsm
    234.5 KB · Affichages: 4

Olihoes

XLDnaute Nouveau
Re,
Evidemment sans réponse à ma question, point d'évolution ... :)
Je me pencherais sur le second point lorsque vous aurait apporté quelques éclaircissements.
Désolé, j'ai été trop vite, j'ai vu la question après avoir mis ma première réponse... :)

Donc pour le second point il faudrait qu'en cliquant sur un bouton il calcule dans les cellules kilométrage restantes (après le nettoyage effectué par la macro), le kilométrage probable du véhicule en tenant compte de la consommation moyenne et du nombre de litre pris ce jour là. (avec en bonus rajouter un nombre aléatoire qui varie par exemple entre -40 et 40 ).

Car la formule que j'ai mise débloque complètement une fois les cellules effacées.

Merci :)
 

Olihoes

XLDnaute Nouveau
Bonjour,

Et donc pour être encore plus précis (enfin j'espère... 😅)

Pour la première cellule kilométrage où un plein a été fait pour un véhicule :
=*valeur de kilométrage initiaux de ce véhicule indiqué en ligne 9*+((*nombre de litres pris ce jour là*/*conso moyenne de ce véhicule indiqué en ligne 6*))*100)

Et ensuite pour les prochaines cellules kilométrage restantes (donc celles où un plein a été effectué):
=*dernière valeur kilométrage*+((*nombre de litres pris ce jour là*/*conso de ce véhicule indiqué en ligne 6*)*100)


Merci d'avance.

Olivier
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Re,
Compris. :)
J'ai supposé que les dates allaient toujours dans le sens croissant pour calculer.
( le km est le km précédent + km calculé )
Par contre toujours pas compris le " -40 et +40" . Sur quoi doit il intervenir ? C'est +/-40 litres ou +/-40km ?
En PJ un essai avec :
VB:
Sub Kilométrages()
Dim L%, Vehicule%, Tablo, Conso, km_init, km
Application.ScreenUpdating = False
Tablo = Range("A9:Q" & [A10000].End(xlUp).Row)
For Vehicule = 4 To 17
    km_init = Tablo(1, Vehicule) ' kilométrage initial
    Conso = Cells(6, Vehicule)
    For L = 3 To UBound(Tablo) - 3 Step 4
        If Tablo(L, Vehicule) <> "" Then
            km = km_init + 100 * Tablo(L, Vehicule) / Conso
            Tablo(L + 1, Vehicule) = km
            km_init = km
        End If
    Next L
Next Vehicule
[A9].Resize(UBound(Tablo, 1), UBound(Tablo, 2)) = Tablo
End Sub
 

Pièces jointes

  • Tableau pleins véhicules (V3).xlsm
    131.2 KB · Affichages: 2

Olihoes

XLDnaute Nouveau
Re,
Compris. :)
J'ai supposé que les dates allaient toujours dans le sens croissant pour calculer.
( le km est le km précédent + km calculé )
Par contre toujours pas compris le " -40 et +40" . Sur quoi doit il intervenir ? C'est +/-40 litres ou +/-40km ?
En PJ un essai avec :
VB:
Sub Kilométrages()
Dim L%, Vehicule%, Tablo, Conso, km_init, km
Application.ScreenUpdating = False
Tablo = Range("A9:Q" & [A10000].End(xlUp).Row)
For Vehicule = 4 To 17
    km_init = Tablo(1, Vehicule) ' kilométrage initial
    Conso = Cells(6, Vehicule)
    For L = 3 To UBound(Tablo) - 3 Step 4
        If Tablo(L, Vehicule) <> "" Then
            km = km_init + 100 * Tablo(L, Vehicule) / Conso
            Tablo(L + 1, Vehicule) = km
            km_init = km
        End If
    Next L
Next Vehicule
[A9].Resize(UBound(Tablo, 1), UBound(Tablo, 2)) = Tablo
End Sub
Merci beaucoup, je vais tester ça au plus vite.

Le +/- 40 c'est sur le nombre de kilomètre.
Comme ça le kilométrage sera un peu + réaliste que si la consommation reste parfaitement identique toute l'année :)
 

Olihoes

XLDnaute Nouveau
Maintenant, mais c'est surement nettement plus difficile.
Pour éviter que manque de chance, le hasard fasse que ce soit toujours des chiffres qui tendent vers -40 qui sortent y a-t-il un moyen de faire en sorte qu'au final de l'année pour le véhicule la somme des km ajoutés et retirés par cette ajout aléatoire entre -40 et 40 soit égal à zéro?

Maintenant c'est déjà très bien avec simplement l'ajout supplémentaire aléatoire. C'est vraiment pour peaufiner que je demande ça.

Encore merci pour votre aide.
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Re,
Un essai en PJ avec ces modifs :
VB:
Randomize: AjoutAlea = Int(80 * Rnd - 40)
km = AjoutAlea + km_init + 100 * Tablo(L, Vehicule) / Conso

SommeAlea = SommeAlea + AjoutAlea

Pour le dernier on erctifie pour que les sommes alea soient nulles
Tablo(DernLig, Vehicule) = Tablo(DernLig, Vehicule) - SommeAlea
Par contre pour le fichier avec formules c'est correct puisqu'on prend la somme des pleins donc au total pas d'ajout ou retrait négatif.
 

Pièces jointes

  • Tableau pleins véhicules (V5).xlsm
    131.7 KB · Affichages: 2

Olihoes

XLDnaute Nouveau
Bonjour Sylvanu,
J'ai complété mon tableau et tout me semble très bien fonctionner :)
On m'a juste rajouté 4 véhicules supplémentaires à encoder et bien sûr je ne sais pas modifier ta formule pour que la macro en prenne compte des colonnes supplémentaires... 😅

Pourriez-vous faire cette modification?

Encore merci :)
 

Pièces jointes

  • Tableau pleins véhicules.xlsm
    324.5 KB · Affichages: 2

Discussions similaires

Réponses
10
Affichages
663

Statistiques des forums

Discussions
314 727
Messages
2 112 264
Membres
111 478
dernier inscrit
Excel_INFO