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

Martial, bonjour,
Bonjour à tous...

Voici une nouvelle mouture mais j'ai continuellement des erreurs aléatoires que je ne comprends.

Parfois sur la méthode RANGE, parfois un code 1004...

comprend pas tout... :(
 

Pièces jointes

  • Base.xlsm
    118.5 KB · Affichages: 53
  • Base.xlsm
    118.5 KB · Affichages: 50
  • Base.xlsm
    118.5 KB · Affichages: 50
Dernière édition:

Yaloo

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

Bonjour Steve, le forum,

Une piste peut-être pour les erreurs (mais pas testé) :
VB:
Workbooks.Open ThisWorkbook.Path & "\3-SUIVI\CR\CR.xlsx"
    Set WkCR = ActiveWorkbook
  
    Dim FL2 As Worksheet

        Set FL2 = Worksheets(1)
        i = FL2.Range("B65536").End(xlUp).Row + 1
            Dim j&

            FL2.Cells(j + 1, 1).Value = Lots
            FL2.Cells(j, 2).Value = WkB.Sheets(2).Range("B" & i)
            FL2.Cells(j + 1, 2).Value = WkB.Sheets(2).Range("B" & i)
            FL2.Cells(j + 2, 2).Value = WkB.Sheets(2).Range("E" & i)
            FL2.Cells(j + 3, 2).Value = WkB.Sheets(2).Range("F" & i)
            FL2.Cells(j + 4, 2).Value = WkB.Sheets(2).Range("G" & i) & WkB.Sheets(2).Range("H" & i)
            FL2.Cells(j + 6, 2).Value = WkB.Sheets(2).Range("T" & i)
            FL2.Cells(j + 6, 4).Value = "M." & WkB.Sheets(2).Range("D" & i)
Il me semble qu'il y a plantage, car tu prends la dernière (i) de la feuille FL2 et tu mets FL2.Cells(j, 2).Value = WkB.Sheets(2).Range("B" & i) , soit tu prends (i) dans WkB.Sheets(2) soit tu mets FL2.cells(i,2).Value. De plus j n'est pas définit.
Je n'ai pas encore testé car je reprends le boulot à 14h00 et je n'ai pas trop de temps. Comme tu te trouves dans l'UserForm tu devrais récupérer les données directement dans celui-ci avec les TextBox (toujours pas testé ce que tu fais exactement).

Pour trouver la dernière série de données dans ton fichier CR. Puisque ta ligne a l'air d'être j
VB:
Dim d&, j&, k&
k = Cells(Rows.Count, 2).End(xlUp).Row
d = Application.RoundUp((k - 44) / 6, 0)
j = 45 + d * 6
La même chose mais en une seule ligne
VB:
j = 45 + (Application.RoundUp(((Cells(Rows.Count, 2).End(xlUp).Row) - 44) / 6, 0)) * 6

Ce soir, je testerai si tu ne l'as pas encore fait.

A+

Martial
 

SSteve

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

Bonsoir Martial, bonsoir le forum,

j'ai testé ton code : ca a marché la première fois mais j'avais mal calibré les cases de destinations : c'était décalé.

J'ai recadré et depuis : erreur 1004... :(
 

Pièces jointes

  • Base.xlsm
    118.7 KB · Affichages: 54
  • Base.xlsm
    118.7 KB · Affichages: 48
  • Base.xlsm
    118.7 KB · Affichages: 46

Yaloo

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

Bonjour Steve,

Il s'agit de quelle macro, car j'ai l'impression que c'est un ancien fichier.

Si c'est pour la macro CR, ce n'est pas celle que je t'ai modifié et les cellules dans CR sont toujours aux mêmes emplacements.

A+

Martial
 

SSteve

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

Bonjour à tous, Martial,

Le code fonctionne mais je me retrouve avec deux soucis :

- on obtient une erreur au niveau du vidage du ComboBox 'erreur 380 Impossible de définir la propriété Text. Valeurde propriété non valide'. Le vidage des TextBox se déroule bien et cette appel fonctionnait très bien jusqu'à présent ???

- Lorsque le code renseigne les cellules de la feuille 'CR' il intercalle des lignes vides que je ne comprends pas ?

Set FL2 = Worksheets(1)
j = FL2.Range("B65536").End(xlUp).Row + 1


FL2.Cells(j + 1, 1).Value = Lots
FL2.Cells(j, 2).Value = WkB.Sheets(2).Range("B" & i)
FL2.Cells(j + 2, 2).Value = WkB.Sheets(2).Range("E" & i)
FL2.Cells(j + 3, 2).Value = WkB.Sheets(2).Range("F" & i)
FL2.Cells(j + 4, 2).Value = WkB.Sheets(2).Range("H" & i) & " " & WkB.Sheets(2).Range("I" & i)
FL2.Cells(j + 5, 2).Value = WkB.Sheets(2).Range("T" & i)
FL2.Cells(j + 5, 4).Value = "M." & WkB.Sheets(2).Range("D" & i)

Enfin, je réalise que quand une entreprise a plusieurs 'LOTS', il ne faut pas lui faire une case spécifique pour ce nouveau lots mais plutôt compléter la case existant avec uniquement le nom du LOT, colonne A.
 

Pièces jointes

  • Base.xlsm
    119.4 KB · Affichages: 52
  • Base.xlsm
    119.4 KB · Affichages: 59
  • Base.xlsm
    119.4 KB · Affichages: 59

Yaloo

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

Bonjour Steve,

- on obtient une erreur au niveau du vidage du ComboBox 'erreur 380 Impossible de définir la propriété Text. Valeurde propriété non valide'. Le vidage des TextBox se déroule bien et cette appel fonctionnait très bien jusqu'à présent ???
Pourquoi ne pas utiliser Lots.Value = "" ce que tu utilises déjà plus haut, puisque tu n'as qu'un seul ComboBox. Sinon voir dans fichier et utiliser :
VB:
'Permet de supprimer les évènements
Application.EnableEvents = 0
' Vidage des TextBox et ComboBox
For Each objControl In Renseignements.Controls
  If TypeOf objControl Is MSForms.TextBox Then
    objControl.Text = ""
  ElseIf TypeOf objControl Is MSForms.ComboBox Then
    objControl.ListIndex = -1
  End If
Next
Application.EnableEvents = 1

- Lorsque le code renseigne les cellules de la feuille 'CR' il intercalle des lignes vides que je ne comprends pas ?
A quel niveau intercalle-t-il des lignes vides.
Soit ça peut venir de tes cellules d'origine, soit de tes lignes de "réception"
Au lieu d'utiliser ça :
VB:
FL2.Cells(j + 1, 1).Value = Lots 'Lots
            FL2.Cells(j, 2).Value = WkB.Sheets(2).Range("B" & i) 'Nom entreprise
            FL2.Cells(j + 2, 2).Value = WkB.Sheets(2).Range("E" & i) 'Adresse
            FL2.Cells(j + 3, 2).Value = WkB.Sheets(2).Range("F" & i) 'Complément
            FL2.Cells(j + 4, 2).Value = WkB.Sheets(2).Range("H" & i) & " " & WkB.Sheets(2).Range("I" & i) ' CP + Ville
            FL2.Cells(j + 5, 2).Value = WkB.Sheets(2).Range("T" & i) 'Mail
            FL2.Cells(j + 5, 4).Value = "M." & WkB.Sheets(2).Range("D" & i) 'Nom Représentant

Utilises ça, comme ça tu ne réctifies que tes cellules de réception si besoin :
VB:
FL2.Cells(j + 1, 1).Value = Lots                                          'Lots
            FL2.Cells(j, 2).Value = NomEts                                            'Nom entreprise
            FL2.Cells(j + 2, 2).Value = RueEts                                        'Adresse
            FL2.Cells(j + 3, 2).Value = CompRueEts & " " & CompRueEts1                'Complément 1 & 2
            FL2.Cells(j + 4, 2).Value = Val(CP) & " " & Ville                         'CP + Ville
            FL2.Cells(j + 5, 2).Value = Email.Value                                   'Mail
            FL2.Cells(j + 5, 4).Value = "M." & NomDirigeant & " " & PrenomDirigeant   'Nom Représentant


Enfin, je réalise que quand une entreprise a plusieurs 'LOTS', il ne faut pas lui faire une case spécifique pour ce nouveau lots mais plutôt compléter la case existant avec uniquement le nom du LOT, colonne A.
Voir fichier ci-joint

Lorsque je te préconisais la macro ci-dessous, c'est au cas ou tu n'aurai pas inséré l'adresse mail dans un de tes lots. Tu risques d'avoir un décalage de ligne
VB:
j = 45 + (Application.RoundUp(((Cells(Rows.Count, 2).End(xlUp).Row) - 44) / 6, 0)) * 6

A te relire

Martial
 

Pièces jointes

  • Base V6.xlsm
    120.1 KB · Affichages: 121

SSteve

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

Martial, bonsoir,
Bonsoir à tous ,

Merci encore : tout fonctionne !!!

Il me reste un détail : la colonne 'entreprise' de la feuille 'CR' (colonne B), à partir de la ligne 45 :

Lorsque le code 'nouvelle fiche' s'exécute, il rempli à la fin la colonne B de la feuille 'CR'. Quand il renseigne le nom de l'entrise, son adresse, il met une ligne vide entre le nom et l'adresse puis l'adresse et la ville.

Est-il possible de faire en sorte que si l'adresse se compose de 3 lignes (Nom de l'entreprise, rue et code postal/ville) sans complément d'adresse, tous tes informations soient à la ligne sans ligne blanche, quitte à laisser 2 llignes blanches entre la ligne CP/Ville et l'adresse email ?

Il me reste, avant de clôturer ce projet, à renseigner après l'OS, le marché qui va avec. Mais cela devrait aller normalement.

Merci de ton aide !
 

Yaloo

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

Re,

Tu as ça :
VB:
FL2.Cells(k, 1).Value = Lots                                          'Lots
            FL2.Cells(j, 2).Value = NomEts                                            'Nom entreprise
            FL2.Cells(j + 2, 2).Value = RueEts                                        'Adresse
            FL2.Cells(j + 3, 2).Value = CompRueEts & " " & CompRueEts1                'Complément 1 & 2
            FL2.Cells(j + 4, 2).Value = Val(CP) & " " & Ville                         'CP + Ville
            FL2.Cells(j + 5, 2).Value = Email.Value                                   'Mail
            FL2.Cells(j + 5, 4).Value = "M." & NomDirigeant & " " & PrenomDirigeant   'Nom Représentant

Actuellement tu as :
FL2.Cells(j, 2).Value = NomEts 'Nom entreprise
FL2.Cells(j + 2, 2).Value = RueEts 'Adresse
Il faut jouer avec les FL2.Cells(j + 2, 2)

Dans le principe :
Si Compl est vide alors FL2.Cells(j + 1, 2) sinon FL2.Cells(j + 2, 2)

enfin quelque chose comme ça.

A+

Martial
 

Yaloo

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

Re,

Oui, bonne idée, dans ce cas-là, je pense qu'il faut faire une boucle à partir de j car si tu prends la dernière cellule alors que c'est un deuxième Lot, ça risque de ne pas fonctionner. Enfin je pense ... à tort peut être.

Ou alors ajouter à j une ligne à chaque fois que tu rentres une donnée dans la cellule.

A+

Martial
 

SSteve

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

En fait voila ce que j'ai ecris :

FL2.Cells(65535, 2).End(xlUp)(2) = RueEts 'Adresse
FL2.Cells(65535, 2).End(xlUp)(2) = CompRueEts & " " & CompRueEts1 'Complément 1 & 2
FL2.Cells(65535, 2).End(xlUp)(2) = Val(CP) & " " & Ville 'CP + Ville

Mais comme tu l'indique, cela ne marche pas, du mois lorsque une même entreprise a deux lots : il écrit à la case suivante...

Tu indiques faire une boucle à partir de J ... ??
 

Yaloo

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

Re,

Pour finir je n'ai pas fait de boucle, car un peu compliqué pour mettre ensuite le mail et nom du dirigeant.

Essaies avec le code ci-dessous, j'ai un peu testé, mais il peut encore y avoir des erreurs ...

VB:
...'ATTENTION modification de la ligne du Lot avec k et non j
            FL2.Cells(k, 1).Value = Lots                                          'Lots
            FL2.Cells(j, 2).Value = NomEts                                            'Nom entreprise
            k = j
            If RueEts <> "" Then k = k + 1: FL2.Cells(k, 2).Value = RueEts                                    'Adresse
            If CompRueEts <> "" Or CompRueEts1 <> "" Then k = k + 1: FL2.Cells(k, 2).Value = CompRueEts & " " & CompRueEts1                'Complément 1 & 2
            FL2.Cells(k + 1, 2).Value = Format(Val(CP), "00000") & " " & Ville                         'CP + Ville
            FL2.Cells(j + 5, 2).Value = Email.Value                                   'Mail
            FL2.Cells(j + 5, 4).Value = "M." & NomDirigeant & " " & PrenomDirigeant   'Nom Représentant
....

A te relire

Martial
 

Discussions similaires

Statistiques des forums

Discussions
311 720
Messages
2 081 917
Membres
101 839
dernier inscrit
laurentEstrées