Suivi du Parc Automobile - VBA et Excel

Bonjour à tous,

J’espère que vous allez bien,

Je suis entrain de mettre en place un petit fichier de suivi du parc automobile et j’aurai encore besoin de votre aide s’il vous plait.

Dans mon fichier en pièce jointe, j'ai une feuille nommée « LISTE PARC » qui contient toutes les informations sur mon parc auto. Dans la feuille « LISTE PARC », il y a une colonne « IMMATRI » qui contient les immatriculations et autres données rentrées des différents véhicules.

  • J’aimerai que lorsque je lance mon formulaire (qui se trouve dans Feuil1) et que je clique sur le bouton « VALIDER », les données contenues dans la feuille « LISTE PARC » se déverse dans la « SYNTHESE », mais qu’au préalable la macro a fait une suppression de doublon (colonne IMMATRI) et que dans les colonnes « TEMPS PARCOURU », « NOMBRE VOYAGE » et « TOTAL DISTANCE PARCOURU » qui se trouve dans la « SYNTHESE », les données des immatriculations identiques s’additionnent.
  • J’aimerai également savoir s’il est possible de créer une liste déroulante en fonction de la colonne « IMMATRI » de la feuille « LISTE PARC » sans pour autant que cette liste ait des doublons. J’ai créé une liste dans la feuille « LISTE DEROULANTE », mais cette liste a des doublons

Toutes mes tentatives ont été vaine jusqu’à présent, raison pour laquelle j’en appelle à votre aide.

Dans l’attente vos retour s’il vous plait,

Cordialement

64liste-parc-v1.xlsm (27.47 Ko)

Bonjour,

Voici ce que je te propose pour la première partie de ton problème

42liste-parc-v1.xlsm (32.70 Ko)

Bonjour

Bonjour à tous

Un essai à tester, pour la suite de la proposition de Jacky.

Cela te convient-il ?

26liste-parc-v2.xlsm (33.96 Ko)

Bye !

Bonjour Jacky,
Bonjour GMB,

Merci pour votre retour rapide.
Je tests vos solutions et je vous reviens très vite.

A tout à l'heure

Bonjour Jacky,

Bonjour GMB,

Bonjour tout le monde.

GMB, ton code est OK, merci encore. Mais je vais essayé de l'adapté et je te reviens si il y a un soucis s'il te plait.

Jacky, ton code fonctionne à merveille également, mais en voulant l'adapter à ma nouvelle feuille "SYNTHESE", en changeant "C" par "C8", j'ai le message d'erreur en dessous :

image

Aussi, j'aimerai bien comprendre la ligne de code ci-dessous : "K =2" représente quoi ? Et dans "Rows.Count, 3", le 3 représente quoi s'il te plait ?

 For K = 2 To Sheets("LISTE PARC").Cells(Rows.Count, 3).End(xlUp).Row

J'ai beau essayé de comprendre, mais rien y fait.

Dans l'attente de votre retour s'il vous plait.

Excellente journée à vous.

19liste-parc-v2.xlsm (40.11 Ko)

Bonjour Past007,

Evidemment en changeant la présentation de la feuille "SYNTHESE" la macro ne peut plus fonctionner correctement
Je vais revoir cette macro et t'enverrais le fichier dans la fin de journéee
A+

Aussi, j'aimerai bien comprendre la ligne de code ci-dessous : "K =2" représente quoi ? Et dans "Rows.Count, 3", le 3 représente quoi s'il te plait ?

For K = 2 To Sheets("LISTE PARC").Cells(Rows.Count, 3).End(xlUp).Row

J'ai beau essayé de comprendre, mais rien y fait.

Bonjour à tous,

@Past007, "k" est une variable qui représente un numéro de ligne. La boucle For va effectuer les actions suivantes sur chacune des lignes, une par une.

Le "3" est le 2e argument de la propriété Worksheet.Cells property (Excel) | Microsoft Learn, qui renvoie, dans l'instruction "Cells(a,b)" la cellule se situant à la ligne a et colonne b (de la feuille indiquée précédemment). Donc en l'occurrence "3" réfère à la 3e colonne, soit C.

Bonsoir,

Voici le fichier adapté à ta nouvelle présentation de la feuille "SYNTHESE"
Pour tes questions j'ai, dans mon code, mis toutes les explications
Dernier problème que tu devras résoudre, c'est le format des immat. en feuille "SYNTHESE"

Bonne soirée

Salut Saboh,
C'est parfait, tu as fourni les explicatons attendues
Merci et à bientôt

bonjour le fil

@Jacky, si vous utilisez un format pour les colonnes H et J:K = "#,##0.00;-#,##0.00;;@", vous ne devez pas supprimer les zéros dans votre macro (dépendant de vos propriétés, il faut échanger les points et les virgules)

Bonjour Bart,

Bonne initiative qui m'évte de chercher à supprimer les "0" dans les colonnes citées
Merci et bonne soirée

Bonjour Past007,

J'ai finalisé ton fichier et je l'ai légèrement allégé en supprimant l'UserForm_Test
Nous pourrions encore l'alléger en supprimant la première feuille et appeler la procédure depuis la feuille 2, soit par un bouton, soit par exemple par un double clic
A voir

Peux tu nous dire si la proposition suivante te convient

@Jacky,

ce format me parait faux, donc je l'ai adapté.

Puis la macro "formater", regardez le fonctionnement de "With ... End With", cela vous aidera à écrire plus lisible. L'utilisation de "Activate" et "Select" sert à rien et ralentit la macro (à éviter)

https://learn.microsoft.com/fr-fr/dotnet/visual-basic/language-reference/statements/with-end-with-st...

Bonjour Bart

Je me posais en effet une grosse question en ce qui concernait le format Bordures
J'étais persuadé qu'il fallait absolument obtenir ce format morceau par morceau
Bart tu me rassures, un format "Borders" suffit, merci

L'utilisation de "Activate" et "Select" sert à rien et ralentit la macro (à éviter)

Très bien, j'en tiendrai compte désormais, mais si je veux retrouver la feuille "SYNTHESE" à la fin de ma procédure il me semble que je dois bien utiiliser "Activate" ?
Alors un

        Sheets("SYNTHESE").Range("A1").Select

devrait convenir ?

Bart, depuis que nous nous correspondons j'en apprends des astuces grâce à toi, un grand merci

re, merci !

"application.goto" est plus pratique, Votre "Sheets("SYNTHESE").Range("A1").Select" ne fonctionne pas, il faut le faire en 2 fois.

Moi, je préfère application.goto Sheets("SYNTHESE").Range("A1") (fonctionne en 1 fois)

https://learn.microsoft.com/fr-fr/office/vba/api/excel.application.goto (avec le 2eme argument, vous pouvez même positionner la cellule dans l'écran)

Bart,

Je ne comprends pas très bien

"Sheets("SYNTHESE").Range("A1").Select" ne fonctionne pas, il faut le faire en 2 fois.

pourquoi en 2 fois ?

re,

Sheets("SYNTHESE").Range("A1").Select fonctionne seulement si activesheet="Synthese", mais alors pourquoi compliquer les choses en ajoutant ce "Sheets("SYNTHESE")"

sinon (activesheet<>"synthese"), il faut le faire en 2 fois

Sheets("SYNTHESE").select
Range("A1").Select

exemple "Goto"

     Application.Goto Sheets("SYNTHESE").Range("D10"), 1     'D10 de "synthese" comme "topleft" dans l'écran
     Application.Goto Range("F20")           'et puis prenez F20 et D10 reste "topleft" & il ne faut pas répéter le feuille

D'accord,

Je n'avais pas assimilé la subtilité qui consiste à appeler d'abord la feuille dans le cas où elle n'es pas activée
Je croyais pouvoir faire cela en une seule fois

Bonne journée

Bonjour à tous,

Très heureux de voir toutes ses réponses et suggestions.

Je les tests toutes et je vous reviens dans les plus brefs délais.

Merci encore et bon début de week-end à vous

Rechercher des sujets similaires à "suivi parc automobile vba"