Renvoyer dans une cellule la valuer d'une TextBox en fonction d'une ComboBox

SSteve

XLDnaute Junior
Bonjour à tous

Je suis plus que novice en VBA et j'essaie de concevoir un petit programme par l'intermédiaire, entre autre, d'un UserForm.
J'y ai inséré une ComboxBox qui va récuperer des noms dans la colonne A.
J'ai ensuite une TextBox qui demande de renseigner un montant attribué à ce nom.
Le but est d'en renvoyer le montant inscrit dans la TextBox dans la ligne de réference de la Combobox.
Comme on peux reproduire plusieur fois la manip, il faudrait que ce renvoie se situe dans la première cellule de la fin de la ligne.
J'y ai passé quelques heures...
Merci de votre aide précieuse.
Steve
Je suis sous Excel 2010

Voici le code :

' Lots est une liste générée par un autre UserForm qui rempli la colonne A

Public MontantHT_Value As String

Private Sub Valider_Click()
If Lots = "" Then
MsgBox "Merci de renseigner le lot"
Lots.SetFocus
Exit Sub
End If

If MontantHT = "" Then
MsgBox "Merci de renseigner le montant HT de l'avenant"
MontantHT.SetFocus
Exit Sub
End If

If Not IsNumeric(MontantHT) Then
MsgBox "Merci de renseigner des chiffres !"
MontantHT = ""
MontantHT.SetFocus
Exit Sub
End If

' Copie du Montant dans la case Avenant correspondante
Dim POs As Range, Ccell As Range, CheckCell As Range, TextBox As Range

Set POs = Worksheets("Definition").Range("A2:A30")
Set TextBox = TextBox"Lots"
Set CheckCell = TextBox.Value


For Each Ccell In POs
If CheckCell.Value = Ccell.Value Then
ActiveSheet.Paste (MontantHT.Value)
Else
'
End If
Next

' Vidage des TextBox/ComboBox
Lots = ""
MontantHT = ""

End Sub
Private Sub Annuler_Click()
Unload AVENANT
Accueil.Show
End Sub
Private Sub MontantHT_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If KeyAscii = 46 Then KeyAscii = 44
End Sub
 

Yaloo

XLDnaute Barbatruc
Re : Renvoyer dans une cellule la valuer d'une TextBox en fonction d'une ComboBox

Voila ton fichier, tu as le même problème avec ta macro OS. A toi de la modifier.

Je ne sais pas si tu as vu mon post #30, j'ai mis quelques annotations dans les macros, tu peux supprimer certaines lignes.

N'hésites pas si tu as besoin.

A+

Martial

PS : Pour les combobox, on peut utiliser une autre façon de les remplir qu'avec RowSource. Cela permet notamment de n'avoir que les données de la colonne A de la feuille "Definition", à voir.
 

Pièces jointes

  • Base (3).xlsm
    58.5 KB · Affichages: 65
  • Base (3).xlsm
    58.5 KB · Affichages: 61
  • Base (3).xlsm
    58.5 KB · Affichages: 66

Yaloo

XLDnaute Barbatruc
Re : Renvoyer dans une cellule la valuer d'une TextBox en fonction d'une ComboBox

Re,

Désolé, il y avait une erreur au niveau de l'ajout d'une nouvelle feuille. Si la feuille existait déjà, ça beuguait. J'ai donc mis une fonction permettant de vérifier que la feuille n'existe pas pour pouvoir l'ajouter, si elle existe, on l'active et on écrit dedans.

A+
 

Pièces jointes

  • Base V2.xlsm
    60.1 KB · Affichages: 56

SSteve

XLDnaute Junior
Re : Renvoyer dans une cellule la valuer d'une TextBox en fonction d'une ComboBox

Martial, merci encore !

Je n'avais pas vu ton post #30. Je crois qu'à force de faire des tests en tout genre et des copies de copies, je m'embrouille... et en arrive à faire des erreurs dans les reprises de code...

En relisant tes notes, je réalise que j'ai fait une erreur de déroulement de procédure :

lorsque je créé un AVENANT et qu'il n'y a pas déjà d'avenant pour le LOTS concerné, la fiche AVENANT se créé et le MontantHT du Marché est celui originel (colonne L de la feuille Definition).

Si lorsque je créé un avenant et qu'il y a dejà un avenant existant pour le LOTS concerné, le MontantHT du marché renseigné dans la nouvelle fiche ANENANT est celui initial aditionné des éventuels AVENANTS précédents.
De plus le nom de la fiche devient le nom initial incrémenté...

Peux-tu m'éclairer sur cette mise en code SVP ?
 

Yaloo

XLDnaute Barbatruc
Re : Renvoyer dans une cellule la valuer d'une TextBox en fonction d'une ComboBox

Si je résume :

- Il n'y a pas eu d'avenant = on le crée avec le montant de l'avenant ; nom de la feuille Nom de l'avenant
- Le montant n'est-il pas celui du Marché + celui de l'avenant

- Il y a déjà eu un avenant = on crée une nouvelle feuille avec Montant de tous les avenants ; nom de feuille Nom de l'avenant 01
- par exemple Nom de feuille CHARPENTE 01

Est-ce bien ça ?
 

SSteve

XLDnaute Junior
Re : Renvoyer dans une cellule la valuer d'une TextBox en fonction d'une ComboBox

- Il n'y a pas eu d'avenant = on le crée avec le montant de l'avenant ; nom de la feuille Nom de l'avenant
- Le montant est celui celui de l'avenant (le montant du marché est renseigné directement et la cellule total fait le reste (HT + TVA)

- Il y a déjà eu un avenant = on crée une nouvelle feuille avec Montant de tous les avenants ; nom de feuille Nom de l'avenant 01
- par exemple Nom de feuille CHARPENTE 01


Mais en fait il serait peut-être simple de faire une colonne total bout de tableau dans la feuille 'Definition' qui serait l'addition de la colonne MontantHT + AVENANT(S) et qui servirait à renseigner la cellule MontantHT des AVENANTS créés...
 

Yaloo

XLDnaute Barbatruc
Re : Renvoyer dans une cellule la valuer d'une TextBox en fonction d'une ComboBox

Le total peut être fait dans la macro, ce n'est pas un problème.

Je regarderai ça demain, ce soir je suis crevé.

A demain

Bonne nuit

Martial
 

Yaloo

XLDnaute Barbatruc
Re : Renvoyer dans une cellule la valuer d'une TextBox en fonction d'une ComboBox

Bonjour Steve,

Boouuu ! Je crois que j'y suis arrivé, y'a peut être (surement) plus simple mais j'ai galéré :mad: :mad:

Pour tes avenants :

- Soit le nom du "Lots" existe déjà (mais ce n'est pas la dernière feuille), on rajoute une feuille avec le nom du "Lots" + 1 (ça c'est facile)

- Soit il s'agit de la dernière feuille (là, ça se complique !!!) et il s'agit d'un nom de "Lots", on rajoute une feuille avec le nom du "Lots" + 1

- Soit il s'agit d'un nouveau "Lots", on rajoute une feuille et on la nomme "Lots" 01

Pour les sommes des avenants, ça doit être OK, mais vérifie quand même, je me suis plus appliqué pour la création des feuilles.

J'ai modifié également la façon de mettre les données dans ton ComboBox "Lots", cela permet de n'avoir que les lignes existantes de ton onglets "Definition". Il faut pour ça définir un nom de plage dans Gestionnaire de Noms (mettre une plage dynamique) et rappeler à l'ouverture de ton UserForm, la plage.

J'ai fait des tests, suffisamment ... je ne sais pas, à toi de jouer ;)

A te relire

Martial
 

Pièces jointes

  • Base V3.xlsm
    65.7 KB · Affichages: 58

SSteve

XLDnaute Junior
Re : Renvoyer dans une cellule la valuer d'une TextBox en fonction d'une ComboBox

Bonsoir Martial, Bonsoir à tous,

Je 'rigole' (rire nerveux car depuis plus d'une semaine mes nuits sont sensiblement écourtées dû à ce projet...) et je ne crois pas, apparament, me rendre compte de la complexité du déroulé du code... code qui, sans toi, n'en serait pas là : et donc un grand merci !!!

c'est génial !!!

J'ai refait un point tout à l'heure en prenant une vision globale de l'ensemble des documents (feuilles) intervenants dans ce projet.

Il me reste 3 ou 4 points à traiter (du moins je l'espère) :
- penses-tu qu'il soit possible d'incrémenter le 'N°' de l' 'AVENANT' (cellule C3)
- remplir un tableau 'AVENANT' dans lequel je puisse copier les infos liées à l'avenant nouvellement créé (cela n'est pas compliqué) mais de telle sorte que lorsque le même LOTS a 2 ou plus de 2 avenants les lots soient regroupés entre eux (insertion de ligne au bon endroit) voir l'exemple annexe


Je n'ai pas vu ou tu as modifié la manière de renseigner la ComboBox ?
 

Pièces jointes

  • Avenant.xlsx
    21 KB · Affichages: 59
  • Avenant.xlsx
    21 KB · Affichages: 59
  • Avenant.xlsx
    21 KB · Affichages: 59
Dernière édition:

Yaloo

XLDnaute Barbatruc
Re : Renvoyer dans une cellule la valuer d'une TextBox en fonction d'une ComboBox

Salut Steve,

Je commence par la dernière question, mais c'est seulement parce que c'est la plus simple :

Dans l'UserForm, j'ai mis cette procédure permettant l'initialisation de l'UserForm.

VB:
Private Sub UserForm_Initialize()
  Lots.List = Range("Lot_Def").Value
End Sub
Tu trouvera la plage Lot_Def dans le gestionnaire de nom. C'est une plage dynamique, c'est-à-dire qu'elle va s'agrandir à chaque ajout de ligne. Cela permet de n'avoir que les lignes de ton tableau.

Pour l'incrémentation, ça doit être possible, mais qu'est-ce que c'est que cette feuille ? Elle n'était pas dans la version précédente ? Ah!!! je crois que j'ai compris, tu me dévoiles un peu de tes demandes à chaque évolution !!!! ;) Comme ça, je ne prends pas peur et je reste sur le fil ? :p Bon si tu expliques je pense qu'il n'y a pas de problème.

Pour la seconde demande, toujours possible mais il faut que tu travailles un peu, et que tu me donnes ce que tu veux exactement.

A te relire

Martial
 

SSteve

XLDnaute Junior
Re : Renvoyer dans une cellule la valuer d'une TextBox en fonction d'une ComboBox

Non non ! :cool: je t'assure. Je pensais remplir cette fiche manuellement pensant que ceci était peut-être un peu trop complexe à mettre en code... et vu l'avancement du projet, j'ai remis en perspective cette possibilité.

Le but est de minimiser l'intervention humaine ! ;)

En fait je dois avoir environ 17 feuilles différentes qui dépendent du classeur 'Base'. Mais elles fonctionnent en liens croisés. Autant dire que si ces codes renseignent mal les cellules, tout le dossier est en vrac.

OK j'ai vu pour l'initialisation du ComboBox : dans l'UserForm de l'AVENANT.
Je peux donc très bien en faire autant pour le ComboBox du UserForm 'Renseignements' ?

Quand je te disais qu'il me restait 3 ou 4 truc :
il me reste un document à remplir (copie de la trame et remplissage suivant l'UserForm 'Renseignements') mais je ne sais pas encore si cela va être une trame .docs ou .xlsx. et autant dire en .xlsx je commence à imaginer comment faire, mais en .docs... :confused: la grande inconnue !

J'ose espérer qu'après cela, ce projet sera clos.

J'imagine maintenant un ou deux bout de code sur d'autres projets mais rien à voir avec le présent projet.

Bon j'essaie de coder le remplissage du tableau AVENANT et revient à la charge si besoin.

Pour l'incrémentation, comment proceder proprement ?

Et merci encore !

Steve
 

SSteve

XLDnaute Junior
Re : Renvoyer dans une cellule la valuer d'une TextBox en fonction d'une ComboBox

Martial,

tu m'as mis le commentaire suivant :


For Each objControl In Renseignements.Controls
If TypeOf objControl Is MSForms.TextBox Then
objControl.Text = ""
End If
Next

'Pourquoi le mettre 2 fois ????
For Each objControl In Renseignements.Controls
If TypeOf objControl Is MSForms.ComboBox Then
objControl.Text = ""
End If
Next


Pourquoi :
un pour les TextBox
un pour le ComboBox

?
 

Yaloo

XLDnaute Barbatruc
Re : Renvoyer dans une cellule la valuer d'une TextBox en fonction d'une ComboBox

Re,

Post#43
Je n'avais pas vu qu'il s'agissait de TextBox et de ComboBox


Post#42

Je plaisantait évidemment :) Y'a pas de problème.

Bien sûr, pour la plage dynamique, tu peux faire la même chose pour le combobox de Renseignements.

Pour le remplissage, ça peut être fait soit sur Word soit sur Excel.

Comment procéder pour l'incrémentation ? Il faudrait voir la feuille exactement.



A te relire

Martial
 

Discussions similaires

Réponses
2
Affichages
152

Statistiques des forums

Discussions
314 629
Messages
2 111 345
Membres
111 110
dernier inscrit
chergui