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
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 ?
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
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...
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 :
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)...
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.
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' ... ?
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)
...
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...