Gestion base données excel pour commerciaux

PERSEVERANT

XLDnaute Junior
Bonsoir à toutes et tous,
je me suis lancé dans un projet, pour faciliter le travail de mes collaborateurs, qui dépasse mes capacités en informatiques. Je viens donc sur ce forum chercher l'aide de gens bien plus compétents que moi.

Mon sujet est le suivant, créer une base de données sous excel 2010, dont vous trouverez ci-joint le modèle, qui permette à des commerciaux de faire des devis et de les modifier au gré des fantaisies de leurs clients.

La base se crée dans un onglet BD alimenté en seconde ligne par les saisies faites dans l'onglet Saisie.
Un onglet Consultation permet de revoir et de modifier, si besoin en est, les données déjà renseignées.
Cet onglet consultation doit pouvoir afficher des données déjà existantes dans l'onglet BD. J'utilise pour celà la fonction index.

Et c'est la que les choses se corsent pour moi.

Je voudrais pouvoir accéder à un enregistrement précis dans BD pour alimenter toutes mes cellules de Consultation. Ma base étant alimentée tout au long de la journée, elle n'est donc pas triée. Je pensais pouvoir sélectionner cet enregistrement précis au travers de 3 critères, le Nom du client, la Date de départ et la Destination. Mais je suis incapable de mettre en place les formules qui me permettraient d'avoir 3 listes déroulantes en cascade pour filtrer mes enregistrements de BD. Le Nom des clients revient plusieurs fois, il me faut donc une liste déroulante sans doublon. Cette première sélection devrait me permettre de créer une seconde liste déroulante avec les Dates de départ correspondant uniquement au client sélectionné, et au cas ou il y aurait plusieurs devis avec le même client à la même date de finir la sélection par la Destination.

Une fois ces trois critères définis, je ne devrais plus avoir qu'un seul enregistrement correspondant à mes besoins, je pourrais alors récupérer le N° de l'enregistrement pour alimenter mes diverses cellules.

Suis-je déraisonnable en pensant que tout ceci est réalisable ? J'évite autant que faire se peux le VBA, mais si je dois y passer...

Par avance merci de vos remarques et suggestions, je patauge depuis deux semaines et n'ai pas su résoudre mon problème.

Cordialement
PERSEVERANT
 

Pièces jointes

  • test base de données tourisme.xlsm
    123.6 KB · Affichages: 116
  • test base de données tourisme.xlsm
    123.6 KB · Affichages: 62

PERSEVERANT

XLDnaute Junior
Bonjour.
Y avait il un problème en suspend ?
Bonjour Dranreb, à tous
c'était la question que je posais ! Au vu des derniers échanges, qui n'étaient peut être que des échanges entre vous et Jean Marie sur des aspects techniques.
Je me demandais donc quelle était la dernière et bonne version pour les ComboBox que je devais utiliser dans ma base celle de # 35 ?
Amicalement
Jean Michel
 

PERSEVERANT

XLDnaute Junior
Bonjour.
Y avait il un problème en suspend ?

Bonjour Dranreb, bonjour à tous
après relecture et test j'ai en effet un problème.
Les 3 ComboBox affichent bien une sélection unique mais je ne vois pas ou je récupère l'info attendue de cette sélection le N° d'enregistrement ou le N° de la ligne de cet enregistrement.
C'est cette information qui va alimenter toute la partie gauche de ma feuille Consultation et la deuxième ligne (qui sera masquée) de cette même feuille. La recherche via les Combo ne me sert qu'à aller récupérer toutes les informations que je veux pouvoir visualiser.
Amicalement
Jean Michel
 

Dranreb

XLDnaute Barbatruc
Bonjour.
Sélectionnez CL (Si c'est bien le nom que vous avez adopté pour votre variable WithEvents As ComboBoxLiées) dans la liste de gauche ("Objet") qui surmonte la fenêtre de code dans la programmation de l'UserForm.
S'il n'y a encore aucun évènement pris en charge, ça vous installera déjà le modèle de procédure qui l'avertira qu'une ComboBox a changé.
Si vous êtes sûr qu'on aboutira toujours à une seule ligne quand tous les choix sont faits, vous pouvez utiliser l'évènement BingoUn (à sélectionner dans la liste de droite, "Procédure", cette fois) pour connaitre le numéro de ligne dans CL.PlgTablo qui est ainsi localisé.
Conseil: Faites y :
VB:
LCou = Ligne: VLgn = CL.PlgTablo.Rows(LCou).Value
pour avoir toutes les valeurs dans un tableau VBA d'une ligne et plusieurs colonnes. Ça limitera les accès aux cellules, toujours pénalisants.
Déclarez en tête:
VB:
Private LCou As Long, VLgn()
Du moins, si vous voulez aller plus loin, en alimentant des TextBox dans un UserForm un peu plus élaboré.
Parce que dans ce que j'avais proposé, j'avais déjà utilisé cet évènement BingoUn pour nommer "LBD" la plage de la ligne atteinte de façon à pouvoir utiliser des formules toutes simples qui identifient une colonne, puis, derrière un espace après, ce LBD. Ça restitue la valeur à l'intersection de la colonne et de la ligne.
 

PERSEVERANT

XLDnaute Junior
Bonjour.
Sélectionnez CL (Si c'est bien le nom que vous avez adopté pour votre variable WithEvents As ComboBoxLiées) dans la liste de gauche ("Objet") qui surmonte la fenêtre de code dans la programmation de l'UserForm.
S'il n'y a encore aucun évènement pris en charge, ça vous installera déjà le modèle de procédure qui l'avertira qu'une ComboBox a changé.
Si vous êtes sûr qu'on aboutira toujours à une seule ligne quand tous les choix sont faits, vous pouvez utiliser l'évènement BingoUn (à sélectionner dans la liste de droite, "Procédure", cette fois) pour connaitre le numéro de ligne dans CL.PlgTablo qui est ainsi localisé.
Conseil: Faites y :
VB:
LCou = Ligne: VLgn = CL.PlgTablo.Rows(LCou).Value
pour avoir toutes les valeurs dans un tableau VBA d'une ligne et plusieurs colonnes. Ça limitera les accès aux cellules, toujours pénalisants.
Déclarez en tête:
VB:
Private LCou As Long, VLgn()
Du moins, si vous voulez aller plus loin, en alimentant des TextBox dans un UserForm un peu plus élaboré.
Parce que dans ce que j'avais proposé, j'avais déjà utilisé cet évènement BingoUn pour nommer "LBD" la plage de la ligne atteinte de façon à pouvoir utiliser des formules toutes simples qui identifient une colonne, puis, derrière un espace après, ce LBD. Ça restitue la valeur à l'intersection de la colonne et de la ligne.

J'aime bien la fin, celle qui parle de simplicité.
Si BingoUn existe déjà (encore faut il que je le trouve) et me fournit toutes les données de ma ligne ça me semble répondre à mon besoin, mais la encore comment est-ce que je récupère ces données ? Je vais voir le post de ChTi160, qui semble avoir une solution que j'ai du laisser passer. Et avec les deux je vais bien trouver un moyen de...
Merci
 

PERSEVERANT

XLDnaute Junior
Bonjour Jean Michel
Bonjour le Fil,Le Forum
je n'ai pas ton fichier , mais regarde le Post #36 ou je transfère les données en sélectionnant la ligne dans la Listbox , ça peut aider ! Lol
Bonne fin de Journée
Amicalement
Jean marie

Bonsoir Jean Marie
je viens de revoir le#36 et en effet ton test affiche bien les données, et en particulier le N° d'enregistrement. Le curseur est d'ailleurs positionné sur la bonne ligne dans la base de données. Mais même question qu' Dranreb, ou est stockée l'info pour que je la récupère la où j'en ai besoin ?
En clair pour le béotien que je suis, cette info est stockée quelque part, comment je trouve sa cachette et comment puis-je afficher cette info pour m'en resservir dans ma feuille excel ?
Je suis un non informaticien, comme sans doute de nombreuses personnes qui viennent poser des questions sur ce site, ce que vous dîtes (Dranreb et toi) est sans doute évidant, mais nous autres (au moins un certain nombre d'entre nous) passons des heures à chercher dans les codes ce qui pour vous est d'une évidence rare.
Amicalement
Jean Michel
 

Dranreb

XLDnaute Barbatruc
Je n'ai pas joint depuis le #35 de nouvelle version de CBxLiéesPERSEVERANT.xlsm,
son UFmConsult est muni d'une Private Sub CL_BingoUn, je rappelle l'ensemble du code à tout hasard :
VB:
Option Explicit
Private WithEvents CL As CBxL.ComboBoxLiées

Private Sub UserForm_Initialize()
Set CL = CBxL.Création.ComboBoxLiées
CL.Plage [TBD]
CL.Add Me.CBxNomClient, "Client"
CL.Add Me.CBxDateDépart, "Date Départ"
CL.Add Me.CBxDestinat, "Destination"
CL.CorrespRequise = True
CL.Actualiser
End Sub

Private Sub CL_BingoUn(ByVal Ligne As Long)
CL.PlgTablo.Rows(Ligne).Name = "LBD"
End Sub

Private Sub CBnEffacer_Click()
CL.Nettoyer
End Sub
et les formules en C4:C8 récupèrent déjà les informations.
En C4 :
Code:
=TBD[Vendeur] LBD
 
Dernière édition:

ChTi160

XLDnaute Barbatruc
Re
Bonsoir "Dranreb"
pas sur d'avoir compris la demande Lol
je tire les données à partir de cette Procédure ??????
VB:
Private Sub LstB_BD_Click()
With UsF_Recherches_BD
  With .LstB_BD
      Lgn = .List(.ListIndex, 10) 'On récupére le numero de la Ligne Source
  End With
End With
With Ws_Cible 'avec la feuille Cible
  With .Range("A2") 'A partir de la Cellule "A2"
        .EntireRow.ClearContents 'j'efface les données eventuellement présentes
                Tbl = Application.Index(Tabtemp, Lgn) 'Je récupére dans "Tbl" les données de la Ligne à partir du tableau des Données "Tabtemp"
        .Resize(, UBound(Tbl, 1)) = Tbl 'Je colle ces donnees en redimmensionnant la plage de réception en fonction du nombre de Lignes de Ce Tableau "Tbl"
  End With
End With
Erase Tbl 'je vide le Tableau
End Sub
en espérant avoir fait avancer le Schimilllimblick Lol
Bonne fin de Journée
Amicalement
Jean marie
 

PERSEVERANT

XLDnaute Junior
Je n'ai pas joint depuis le #35 de nouvelle version de CBxLiéesPERSEVERANT.xlsm,
son UFmConsult est muni d'une Private Sub CL_BingoUn, je rappelle l'ensemble du code à tout hasard :
VB:
Option Explicit
Private WithEvents CL As CBxL.ComboBoxLiées

Private Sub UserForm_Initialize()
Set CL = CBxL.Création.ComboBoxLiées
CL.Plage [TBD]
CL.Add Me.CBxNomClient, "Client"
CL.Add Me.CBxDateDépart, "Date Départ"
CL.Add Me.CBxDestinat, "Destination"
CL.CorrespRequise = True
CL.Actualiser
End Sub

Private Sub CL_BingoUn(ByVal Ligne As Long)
CL.PlgTablo.Rows(Ligne).Name = "LBD"
End Sub

Private Sub CBnEffacer_Click()
CL.Nettoyer
End Sub
et les formules en C4:C8 récupèrent déjà les informations.
En C4 :
Code:
=TBD[Vendeur] LBD
 

Discussions similaires

Réponses
4
Affichages
364
Réponses
27
Affichages
637
Réponses
6
Affichages
443

Statistiques des forums

Discussions
313 262
Messages
2 096 641
Membres
106 697
dernier inscrit
Zedid