userform et VBA ????

yolojo

XLDnaute Occasionnel
Bonjour, je reviens vers vous car mon niveau en VBA n'a pas progresser suffisamment pour arriver à me débrouiller encore seul. J'avais déjà fait appel à certain d'entre vous pour réaliser un fichier pour automatiser mes commandes de fournitures et j'aurais une petite modif à apporter.
En effet je souhaiterais que dans mon formulaire de saisie, s'affiche le montant total de la commande en cours suivant le client (dans le rectangle vert).
Si vous avez une idée.
Merci d'avance
Cordialement
 

Pièces jointes

  • Commande scolaire.xls
    320 KB · Affichages: 49

Dranreb

XLDnaute Barbatruc
Re : userform et VBA ????

Bonsoir.
S'il s'agit du même chiffre que celui en G6 de la feuille Choix, cette cellule s'appelant "TotalCmd", il suffit de réhabiliter l'instruction en commentaire dans CmdValider_Click:
VB:
LabelTotal.Caption = [TotalCmd].Value & " €"
 

yolojo

XLDnaute Occasionnel
Re : userform et VBA ????

Merci bien de la réponse, mais justement non, ce n'est pas le résultat que je cherche. Je souhaiterais plutôt le contenu de la cellule D90 de l'onglet commandes si dans le formulaire la commande correspond au premier client (D2). Ainsi cela me permet de contrôler en temps réel lorsque je saisi la commande du client si le total correspond à sa commande.
Merci d'avance
 

Dranreb

XLDnaute Barbatruc
Re : userform et VBA ????

Si la plage D2:CY2 est destinée à recevoir des noms de clients vous auriez peut être intérêt à l'affecter au List d'un ComboBox pour le nom plutôt qu'un ListBox, comme ça son ListIndex vous donnera le décalage horizontal à partir de [D90] de la cellule dont la Value doit être reproduite dans ce Label.

P.S. Je viens de voir un peu plus loin. Vous avez une Public Sub RecapCommandes. Vous auriez tout intérêt à lui transmettre des paramètres pour ne plus être obligé d'avoir à les chercher dans l'Userform. Et en l'écrivant comme une Function elle pourrait rendre ce total.
VB:
Public Function RecapCommandes(ByVal NomPrénom As String, _
   ByVal LgnArt As Long, ByVal Qté As Double) As Double
Enfin c'est juste une idée.
 
Dernière édition:

yolojo

XLDnaute Occasionnel
Re : userform et VBA ????

Si je comprend bien, je remplace les textbox du nom et prénom par des combobox et je leurs affecte les même code qu'au textbox ?
Cela va fonctionner ? et ensuite je ne saisi pas du tout l'histoire di listindex et du decalage horizontal !!!!
Désolé
 

Dranreb

XLDnaute Barbatruc
Re : userform et VBA ????

Non mais je n'avais pas vus que vous renseignez cette feuille commande au fur et à mesure depuis l'Userform par l'intermédiaire d'une procédure RecapCommande. Ça ne pourrait marcher que si Nom et Prénom étaient dès le départ dans un seul ComboBox.
Sinon il y aurait peut être une voie si tout reste également contenu aussi dans votre feuille Choix en divisant aussi la colonne A en 2: Nom et Prénom. Je ne sais pas, faut voir. J'ai proposé d'autres choses en édit dans mon poste précédent.
 
Dernière édition:

yolojo

XLDnaute Occasionnel
Re : userform et VBA ????

J'avais pensé à une fonction genre RECHERCHEH dans l'onglet "commandes" et qui renverrai en fonction du nom (D2:CY2) le montant total de la commande (D90:CY90) dans le LabelTotal, mais je ne connais pas le code pour exécuter ce genre de fonction sous vba
 

Dranreb

XLDnaute Barbatruc
Re : userform et VBA ????

Essayez peut être le coup de la fonction RecapCommandes. Passez une bonne fois pour toutes en 1er paramètre Me.Textclient.Text & " " & Me.TextPrenom.Text éviterait de calculer cette concaténation des centaines de fois !
Vous pouvez aussi utiliser WorksheetFunction.Match(ValeurCherchée, PlageDeRecherche, 0)
 
Dernière édition:

yolojo

XLDnaute Occasionnel
Re : userform et VBA ????

Qu'entendez-vous par Passez une bonne fois pour toutes en 1er paramètre Me.Textclient.Text & " " & Me.TextPrenom.Text .
Faut-il que j'insert ce code dans le module 2 ? Si oui, à quel endroit ? Dois-je supprimé d'autre ligne ? Je ne vois pas ce que cela pourra m'apporter pour le calcul que je recherche !!!
J'avoue je nage complet.:confused:
 

Dranreb

XLDnaute Barbatruc
Re : userform et VBA ????

De plus la recherche de l'article vous pourriez l'éviter: c'est 2*LaLigne + 2
Surtout si vous garantissez la correspondance entre Liste et Commandes en mettant dans cette dernière en A4 :
Code:
=INDEX(Numéro;(LIGNE()-4)/2+1)
et en B4:
Code:
=INDEX(Désign;(LIGNE()-4)/2+1)
propagé vers le bas.

Je me demande même si vous n'auriez pas plutôt intérêt à n'en faire qu'une feuille avec pour chaque client 2 colonnes plutôt que 2 lignes… Ou même… J'ai une question: Est-il nécessaire d'afficher le total de chaque article dans Commandes ? Parce que pour le total de tous les articles ce n'est pas nécessaire: Un SOMMEPROD le calculerait très bien ! (fait chier cette disposition en 2 lignes !)

En tout cas votre procédure RecapCommandes fait toutes les recherches nécessaires qui lui permettraient de restituer facilement le total à l'userform. Il ne reste plus qu'a lui apprendre à communiquer avec celui ci par l'intermédiaire de paramètres. Ce serait plus sain que d'aller chasser l'information dans les contrôles qu'il contient.

Voyez aussi si vous ne pourriez pas tirer partit de cette fonction en plusieurs endroits :
VB:
Public Function ColClient(ByVal NomPrénom As String) As Range
Dim Cel As Range
Set Cel = Feuil5.[D2:CY2].Find(What:=NomPrénom, LookIn:=xlValues, LookAt:=xlWhole, _
   SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False)
If Cel Is Nothing Then Set Cel = Feuil5.[CZ2].End(xlToLeft).Offset(, 1)
Set ColClient = Cel.EntireColumn
End Function
et dans l'userform:
VB:
LabelTotal.Caption = ColClient(Me.Textclient.Text & " " _
      & Me.TextPrenom.Text).Rows(90).Value & " €"
Du moins quand un des TextBox change. Ça ne dispensera pas le RecapCommandes, qui aura aussi intérêt à utiliser cette fonction (si elle marche bien) de renvoyer la valeur du nouveau total. Si elle n'a que ça à renvoyer vous pourriez l'écrire sous forme de Function comme déjà suggéré au poste #4, sinon qu'elle le rende dans un des paramètres passé ByRef (par défaut si non spécifié).
 
Dernière édition:

Discussions similaires

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 305
Messages
2 087 084
Membres
103 459
dernier inscrit
Arnocal