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
 

SSteve

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

Lol !!!

Si mais durant le nettoyage du fichier, j'ai trop nettoyé !!! :confused:

Revoici le fichier corrigé... :)

La réussite de ce projet et ma formation en accéleré est pricnipalement grace à toi !!!

Merci encore (jamais trop vu la tache à accomplir.... :) )

Steve
 

Pièces jointes

  • Base.xlsm
    103 KB · Affichages: 109
  • Base.xlsm
    103 KB · Affichages: 115
  • Base.xlsm
    103 KB · Affichages: 122

Yaloo

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

Tu as trouvé le moyen pour envoyer par mail ?

Pourquoi tu as écrit Liste.Save : Liste.Close ---> Tu enregistres ta liste dans un autre fichier ? (Je suis curieux, hein :eek:)
 

SSteve

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

Bonsoir à tous, Bonsior Martial,

re LOL !!! Un oubli... c'était l'enregistrement de la liste de diffusion que j'avais tenté de mettre en place avant ton code, en vain.

Et j'ai oublié de l'enlevé...

En fait, j'ai deux version de ce code :
- une version avec OS
- une version sans OS

La version sans OS n'avait pas cet oubli...

Voilu ;)
 

SSteve

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

Martial, bonjour,

Je reviens te demander un ptit coup de main sur la dernière version réalisée : lorsque je réalise une situation normalement dans le formulaire situation, je demande la modification conditionnée de police de caractère (cellule A21/D21) en l'occurence si dans la cellule G21 dans l'aquelle je copie une cellule d'un ature tableau, si celle-ci donc est remplie les caractères de la cellule A 21 ne sont plus rayés mais ceux de la cellule D21 le sont.

Or que je remplisse ou pas la condition, la mis en forme est identique...

y aurait-il une mauvaise écriture du code qui ne permette pas de vérifier la condition ?

Merci de ton aide...
 

Pièces jointes

  • SITUATIONS.xlsx
    18.4 KB · Affichages: 119
  • Base.xlsm
    115.3 KB · Affichages: 127
  • SITUATIONS.xlsx
    18.4 KB · Affichages: 116
  • Base.xlsm
    115.3 KB · Affichages: 124
  • SITUATIONS.xlsx
    18.4 KB · Affichages: 116
  • Base.xlsm
    115.3 KB · Affichages: 125

Yaloo

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

Bonjour Steve,

C'est normal, il faut que tes données, celle que tu cherches et celle qui est dans la cellule, soient exactement identique, majuscule ou minuscule.

Pour éviter ça, tu peut utiliser UCase comme ceci :
If UCase(.[G21].Value) = "CB"
Ca c'était le premier point, le deuxième, lorsque tu écris
qu'est-ce que ça veut dire ? en gros : rien, car tu ne mets pas de = ou de Select ou de Font etc...

Ensuite quand tu mets ceci,
With .[A21].Font
.Strikethrough = False
End With
.[D21]
With .[D21].Font
.Strikethrough = True
End With
C'est pareil, Avec la cellule A21 la police est rayée Faux et la cellule D21 la police est rayée Vrai.

Personnellement, je pense que tu n'as pas besoin d'écrire en G21 "CB" donc tu peux te servir de la donnée qui se trouve dans ta feuille SITUATION, et écrire ceci :

VB:
'Pour la feuille SITUATION de Base.xlsm, si la cellule K de la ligne est égale à CB, en majuscule
If UCase(WkB.Sheets(4).Range("K" & i)) = "CB" Then
  'Alors A21 n'est pas rayée et D21 est rayée
  .[A21].Font.Strikethrough = False
  .[D21].Font.Strikethrough = True
'Si la cellule K de la ligne est égale à ???
ElseIf WkB.Sheets(4).Range("K" & i).Value = "???" Then
  'Alors A21 est rayée et D21 n'est pas rayée
  .[A21].Font.Strikethrough = True
  .[D21].Font.Strikethrough = False
'Sinon (tous ls autres cas)
Else
  'Les 2 cellules sont rayées
  .[A21].Font.Strikethrough = True
  .[D21].Font.Strikethrough = True
End If

Si tu as besoin de remplir ta cellule G21, autant s'en servir, alors tu peux écrire comme ça :

VB:
'Si la cellule G21 est égale à CB, en majuscule
If UCase(.[G21]) = "CB" Then
  'Alors A21 n'est pas rayée et D21 est rayée
  .[A21].Font.Strikethrough = False
  .[D21].Font.Strikethrough = True
'Si la cellule G21 est égale à ???
ElseIf UCase(.[G21]) = "???" Then
  'Alors A21 est rayée et D21 n'est pas rayée
  .[A21].Font.Strikethrough = True
  .[D21].Font.Strikethrough = False
'Sinon (tous ls autres cas)
Else
  'Les 2 cellules sont rayées
  .[A21].Font.Strikethrough = True
  .[D21].Font.Strikethrough = True
End If

A te relire

Martial
 

SSteve

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

Martial, bonsoir,

Avec beaucoup de retard, merci de ton précédent retour que je viens tout juste de tester !

Je me retrouve avec un problème non identifié dans la procédure 'SITUATION' :

Normalement :

lorsque j'édite une première situation, il n'y a pas de situation précédente. De ce fait, les cellulles F23 à F28 restent vides.

A partir de la deuxième situation, quand il y en a plus d'une, la cellule F23 doit être renseignée par le montant HT (J30) de la situation précédente.

Mes problèmes sont que :
- dans notre cas, la case F23 est renseignée dès la première situation par un chiffre (?)
- la deuxième situation se retrouve alors avec un chiffre d'origine que je n'arrive pas à comprendre non plus...

Merci de ton aide sur ce point.

Sinon tout semble fonctionner correctement !

Steve
 
Dernière édition:

Yaloo

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

Bonjour Steve,

Difficile de s'y remettre après un délai d'un mois.

Normalement :

lorsque j'édite une première situation, il n'y a pas de situation précédente. De ce fait, les cellulles F23 à F28 restent vides.

A partir de la deuxième situation, quand il y en a plus d'une, la cellule F23 doit être renseignée par le montant HT (J30) de la situation précédente.

Je ne comprends pas, normalement dans la colonne F (de la feuille Situation) il s'agit d'acompte et non de situation. Les montants d'acompte sont pris dans ta base, feuille 4 de la colonne E à J

Sinon ça doit se trouver dans cette partie de la macro :
VB:
'Détermine la ligne de copie
      i = Lots.ListIndex + 8
      ' Enregistrement des données
          With WkS.ActiveSheet
            .[H3] = WkB.Sheets(4).Range("A" & i)
            .[H4] = Lots
            .[F7] = Val(Right(NomFeuille, 2))
            .[J9] = WkB.Sheets(2).[U2]
            .[F10] = WkB.Sheets(2).Range("M" & i)
            .[F11] = WkB.Sheets(2).Range("N" & i)
            .[F12] = WkB.Sheets(2).Range("O" & i)
            .[F13] = WkB.Sheets(2).Range("P" & i)
            .[F14] = WkB.Sheets(2).Range("Q" & i)
            .[F15] = WkB.Sheets(2).Range("R" & i)
            .[E18] = Val(Pourcentage.Value) / 100
            .[G21] = WkB.Sheets(4).Range("K" & i)
            .[F23] = WkB.Sheets(4).Range("E" & i)
            .[F24] = WkB.Sheets(4).Range("F" & i)
            .[F25] = WkB.Sheets(4).Range("G" & i)
            .[F26] = WkB.Sheets(4).Range("H" & i)
            .[F27] = WkB.Sheets(4).Range("I" & i)
            .[F28] = WkB.Sheets(4).Range("J" & i)

A partir de .[F23] = etc...

A te relire

Martial
 

SSteve

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

Martial bonsoir,

Mes déplacements intempestifs rendent difficile mon assiduité...

En fait, un acompte est une situation. Mais lors de ta première situation, tu n'as pas reçu d'acompte, et le code n'en tenait pas compte...

J'ai réussi à solutionner ce problème en inversant l'ordre d'exécution du code :

je renseigne d'abord le classeur 'SITUATION' et ensuite le tableau du classeur 'BASE'.

Par contre je rencontre un autre soucis :

le montant de la situation n'est pas égale au montant du marché multiplié par le pourcentage : il faut déduire le compte prorata (quand il y en a un) et la retenue de garantie (quant il y en a une)...

Merci de ton aide...
 
Dernière édition:

Yaloo

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

Bonjour Steve,

C'est un peu compliqué, car dans les derniers exemples que tu nous mets, il n'y a pas de données. Donc difficile de s'y retrouver.

Peut-être avec quelque chose comme ça (à mettre à la fin de l'envoi de tes valeurs dans la feuille) :

VB:
.[F27] = WkB.Sheets(4).Range("I" & i)
.[F28] = WkB.Sheets(4).Range("J" & i)
VoirOuTuMetsCetteDonnée = (MontantHT * Pourcentage / 100) - IIf(.[J20].Value = "", 0, .[J20].Value) - IIf(IsNumeric(.[J21].Value), .[J21].Value)

Ou alors, dans ta feuille nouvellement créée, as-tu cette donnée, puisque tu as plusieurs cellules avec des formules. Tu peux dans ce cas-là la récupérer directement.

Sinon, essaies de nous mettre quelques exemples dans tes classeurs.

A+

Martial
 

SSteve

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

Martial, bonjour,

En annexe les documents renseignés.

J'ai repéré un nouveau problème mais toujours sur la même procédure :

Dans mon exemple :

1er pb :
les cases F10 et F11 du lot PEINTURE auraient du être renseignées d'un montant respectivement de 1500 et 800 €.
De même pour le lot VRD pour la case F10 pour un montant de 15 000 €.
=> je ne comprends pas l'origine de ce point

2e pb précédemment énoncé :
le montant indiqué dans les cases F23, F24, F24, etc sont des montants bruts avant déduction du compte prorata et de la retenue de garantie quant l'un et l'autre sont indiqués.
=> étant donné que le code renseigne d'abord le classeur 'SITUATIONS' et ensuite la feuille 'SITUATIONS' du classeur 'BASE' il faudrait peut-être 'simplement' renvoyer le montant de la cellule J30 de la feuille traitée du classeur 'SITUATIONS'.

Comme le code renvoi, à chaque fois, les valeurs renseignées dans le classeur 'BASE' ... ?
 

Pièces jointes

  • SITUATIONS.xlsx
    79.5 KB · Affichages: 101
  • Base.xlsm
    110.3 KB · Affichages: 112
  • SITUATIONS.xlsx
    79.5 KB · Affichages: 100
  • Base.xlsm
    110.3 KB · Affichages: 107
  • SITUATIONS.xlsx
    79.5 KB · Affichages: 104
  • Base.xlsm
    110.3 KB · Affichages: 105

SSteve

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

Pour ceux que cela intéresse !
 

Pièces jointes

  • SITUATIONS.xlsx
    79.4 KB · Affichages: 102
  • Base.xlsm
    110.6 KB · Affichages: 122
  • SITUATIONS.xlsx
    79.4 KB · Affichages: 104
  • Base.xlsm
    110.6 KB · Affichages: 124
  • SITUATIONS.xlsx
    79.4 KB · Affichages: 117
  • Base.xlsm
    110.6 KB · Affichages: 124

Yaloo

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

Salut Steve,

C'est normal, tu prends le même i
'Détermine la ligne de copie
i = Lots.ListIndex + 8

Alors que lorsque tu copies des données de 2 feuilles différentes, les lignes ne sont pas la même.

Soit tu écris :
i = Lots.ListIndex + 1
...
.[J9] = WkB.Sheets(4).Range("D" & i + 7)
...
.[F11] = WkB.Sheets(2).Range("N" & i)
...

Ou alors, mais c'est pas très logique :
i = Lots.ListIndex + 8
...
.[J9] = WkB.Sheets(4).Range("D" & i)
...
.[F11] = WkB.Sheets(2).Range("N" & i - 8)
...

A+

Martial

Edit : On n'est arrivé à la même déduction.
 
Dernière édition:

SSteve

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

Martial bonsoir,

J'aurais encore besoin de tes lumières :

En essayant le code sur mon ordi je n'ai aucun problème. Mais voila, c'est que j'utilise le code depuis plusieurs bécanes toutes en cloud et donc le path du dossier change avec le nom de la session.

J'ai réglé le problème en VBA (Google est mon ami) mais je n'arrive pas à régler les références de cellule d'un fichier sur des cellules d'un autre fichier excel dans un sous répertoire du même dossier.

type :
'='C:\Users\steve\CloudStation\CLIENTS\NORAUTO\Nantes\Dossier Nantes avec OS\$\[Base.xlsm]LOTS'!$E$30'

Il s'agit, si j'ai tout compris, de référence relative et absolue mais lié à des liens croisés).

J'ai trouvé dans le cas de cellule dans un même fichier mais pas quant on renvoie à un autre fichier...

Merci de ton aide.

(Je ne sais pas si j'ai été clair...?)

Steve
 

Discussions similaires