Insertion de donnée à partir d?un Userform dans un fichier excel [Résolu]

Signaler
Messages postés
360
Date d'inscription
dimanche 3 décembre 2006
Statut
Membre
Dernière intervention
3 janvier 2012
-
Messages postés
360
Date d'inscription
dimanche 3 décembre 2006
Statut
Membre
Dernière intervention
3 janvier 2012
-
Boujour à tous,

Toujours en VBA sur mon projet,

Dans mon Userform, quans je fait une recherche avec la valeur du ComboBox1, il m'affiche l'information de la colone C à O.
<hr size="2" width="100%" />
Private Sub CommandButton1_Click()
If ComboBox1.Text = vbNullString Then
ComboBox1.SetFocus
MsgBox "SÉLECTIONNEZ VOTRE BON DE COMMANDE S.V.P."
Else

Application.ScreenUpdating = False
Dim Valeur As String
   Sheets("Bon de commande").Select
    Valeur = ComboBox1.Text
  
    Range("B9").Select
  
    ActiveSheet.Cells.Find(What:=Valeur, After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
    xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False) _
    .Activate
    'Numéro du permis
    DTPicker21 = ActiveCell.Offset(0, 1).Text
    TextBox1 = ActiveCell.Offset(0, 11).Text
    TextBox2 = ActiveCell.Offset(0, 12).Text
    TextBox3 = ActiveCell.Offset(0, 9).Text
    TextBox7 = ActiveCell.Offset(1, 11).Text
    TextBox8 = ActiveCell.Offset(1, 12).Text
    TextBox9 = ActiveCell.Offset(1, 9).Text
    TextBox13 = ActiveCell.Offset(2, 11).Text
    TextBox14 = ActiveCell.Offset(2, 12).Text
    TextBox15 = ActiveCell.Offset(2, 9).Text
   
    End If
    Application.ScreenUpdating = True
End Sub
<hr size="2" width="100%" />
Maintenant, je voudrais inserrer des données dedans le fichier excel en entrant des données dans les textboxs 4 à 6, dans le ComboBox2 et aussi dans un DTPicker2 pour que les info se place automatiquement dans le fichier excel.

Voici le scrip qui me cause problème (en rouge le problème):
<hr size="2" width="100%" />
Private Sub CommandButton2_Click()
msg = "Voulez-vous continuer avec l'enregistrement?"
Style = vbYesNo + vbDefaultButton1
Réponse = MsgBox(msg, Style, Title)
If Réponse = vbYes Then

  Range("B" & ComboBox1.ListIndex) = Range(("P") & TextBox4.Value)
  Range("B" & ComboBox1.ListIndex) = Range(("P") &TextBox5.Value)
  Range("B" & ComboBox1.ListIndex) = Range(("P") &TextBox6.Value)
  Range("B" & ComboBox1.ListIndex) = Range(("P") &DTPicker1)
  Range("B" & ComboBox1.ListIndex) = Range(("P") &ComboBox2.Value)
End If
Unload Me
End Sub
<hr size="2" width="100%" />Merci encore pour votre aide.  

9 réponses

Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
18
Dans ton code tu écris 5 fois dans la même cellule en B
Range("B" & ComboBox1.ListIndex) = .....

Peux-tu expliquer un peu mieux ce que tu cherches à inscrire dans ta feuille et tu veux inscrire ces données ?

MPi
Messages postés
360
Date d'inscription
dimanche 3 décembre 2006
Statut
Membre
Dernière intervention
3 janvier 2012
3
 
Désolé petite correction

Range("B" & ComboBox1.ListIndex) = Range((" P ") & TextBox4.Value)
  Range("B" & ComboBox1.ListIndex) = Range(("Q") &TextBox5.Value)
  Range("B" & ComboBox1.ListIndex) = Range((" R ") &TextBox6.Value)
  Range("B" & ComboBox1.ListIndex) = Range(("S) &DTPicker1)
  Range("B" & ComboBox1.ListIndex) = Range(("T") &ComboBox2.Value)
Messages postés
360
Date d'inscription
dimanche 3 décembre 2006
Statut
Membre
Dernière intervention
3 janvier 2012
3
Plus en détail car je crois que mon explication n'était pas à point,

Une fois la recherche fait dans le ComboBox1 ex: la valeur 00000,

Il recherche dans la feuille excel puis selon la valeur du comboBox, il me met dans le textBox1 à 3, la valeur qui suit la valeur du ComboBox1.

Maintenant, si j'entre dans le TextBox 4, TextBox5 et le TextBox6 des valeurs ainsi que Dans un DTpicker1 et le ComboBox2, en cliquant sur un Bouton, les données vont s'inscrire à la suite sur la bonne Ligne.

Et voilà le script ou je suis rendu.
<hr size= "2" width="100%" />
Private Sub CommandButton2_Click()
msg = "Voulez-vous continuer avec l'enregistrement?"
Style = vbYesNo + vbDefaultButton1
Réponse = MsgBox(msg, Style, Title)
If Réponse = vbYes Then

  Range("B" & ComboBox1.ListIndex) = Range((" P ") & TextBox4.Value)
  Range("B" & ComboBox1.ListIndex) = Range(("Q") &TextBox5.Value)
  Range("B" & ComboBox1.ListIndex) = Range((" R ") &TextBox6.Value)
  Range("B" & ComboBox1.ListIndex) = Range(("S") &DTPicker1)
  Range("B" & ComboBox1.ListIndex) = Range(("T") &ComboBox2.Value)
End If
Unload Me
End Sub
Messages postés
360
Date d'inscription
dimanche 3 décembre 2006
Statut
Membre
Dernière intervention
3 janvier 2012
3
B = la colone ou le Combobox1 cherche la valeur
Messages postés
360
Date d'inscription
dimanche 3 décembre 2006
Statut
Membre
Dernière intervention
3 janvier 2012
3
que j'ai trouvé, suite à toi MPI,

Private Sub CommandButton2_Click()
msg = "Voulez-vous continuer avec l'enregistrement?"
Style = vbYesNo + vbDefaultButton1
Réponse = MsgBox(msg, Style, Title)
If Réponse = vbYes Then

  Range("P" & ComboBox1.Value) = TextBox4.Value
  Range("Q" & ComboBox1.Value) = TextBox5.Value
  Range("R" & ComboBox1.Value) = TextBox6.Value
  Range("S" & ComboBox1.Value) = DTPicker1
  Range("T" & ComboBox1.Value) = ComboBox2
End If
Unload Me
End Sub

Merci
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
Salut,

  Range("B" & ComboBox1.ListIndex) = Range((" P ") & TextBox4.Value)
  Range("B" & ComboBox1.ListIndex) = Range(("Q") &TextBox5.Value)
  Range("B" & ComboBox1.ListIndex) = Range((" R ") &TextBox6.Value)
  Range("B" & ComboBox1.ListIndex) = Range(("S") &DTPicker1)
  Range("B" & ComboBox1.ListIndex) = Range((" T ") &ComboBox2.Value)

Si TextBox4, 5 & 6 ont une valeur numérique, ça pourrait le faire, et encore que faut du bol.
Si c'est du texte, admettons le mot salut, beh ton code traduit :
Range("B" & ComboBox1.ListIndex) = Range("Psalut")

Ca n'existe pas.
Autre exemple flagrant :
  Range("B" & ComboBox1.ListIndex) Range((" S ") &DTPicker1)
  Range("B" & ComboBox1.ListIndex) = Range(" S 20/05/2007")

Donc réexplique mieux pas Où ces données vont mais quoi ?
Car tes Range(("P") & TextBox4.Value) ça ne veut rien dire, et impossible à deviner

@++

<hr size ="2" width="100%" />
  --Mortalino--
Le mystérieux chevalier, ~Provençal, le Gaulois~
  
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
18
Sans trop savoir si j'ai bien compris... voici comment je procéderais

Option Explicit

Private Sub CommandButton2_Click()
    Dim Ligne As Long
    Dim Rep As Integer
   
    Ligne = GetLigne(ComboBox1.Text)  'retracer la ligne pour écrire les données
    If Ligne = -1 Then
        MsgBox "La valeur de Combobox1 n'a pas été trouvée"
        Exit Sub
    End If
   
    Rep = MsgBox("Voulez-vous continuer avec l'enregistrement?", _
                    vbYesNo, ThisWorkbook.Name)
    If Rep = vbNo Then Exit Sub
   
    'Ici change les lettres D à H pour les lettres des cellules
    'dans lesquelles tu veux inscrire tes données
    Range(" D " & Ligne) = TextBox4.Value
    Range("E" & Ligne) = TextBox5.Value
    Range(" F " & Ligne) = TextBox6.Value
    Range("G" & Ligne) = DTPicker1.Value
    Range(" H " & Ligne) = ComboBox2.Value
   
End Sub

'Function qui retourne la ligne correspondant au texte de Combobox1
Function GetLigne(strTexte) As Long
    Dim Recherche As Range
   
    'prendre une ou l'autre selon la valeur recherchée (texte ou numérique)
'    Set Recherche = ActiveSheet.Columns("B:B").Find(strTexte)      'valeur texte
    Set Recherche = ActiveSheet.Columns("B:B").Find(CLng(strTexte)) 'valeur numérique
    If Not Recherche Is Nothing Then
        GetLigne = Recherche.Row
    Else
        GetLigne = -1  'valeur non trouvée
    End If
End Function

MPi
Messages postés
360
Date d'inscription
dimanche 3 décembre 2006
Statut
Membre
Dernière intervention
3 janvier 2012
3
OK,
Range("B" & ComboBox1.ListIndex) Range((" P ") & TextBox4.Value)      <gras>TextBox4 Chiffre</gras>  Range("B" & ComboBox1.ListIndex) Range((" Q ") &TextBox5.Value)     <gras>TextBox5 Chiffre</gras>
  Range("B" & ComboBox1.ListIndex) Range((" R ") &TextBox6.Value)     <gras>TextBox6 Chiffre</gras>
  Range("B" & ComboBox1.ListIndex) Range((" S ") &DTPicker1)             <gras> DTPicker Date</gras>  Range("B" & ComboBox1.ListIndex) Range((" T ") &ComboBox2.Value)  ComboBox2 Mot  Ex: "Paiement partiel"

Il semble que ça fonctionne de cette facon mais je n'aime pas le script car trop long et si je rajoute des TextBoxs pour que les données se rajoute un en dessous de l'autre, ça risque de causer problème.

Voilà le script:
<hr size="2" width="100%" />Private Sub CommandButton2_Click()
Dim Ligne As Long
    Dim Rep As Integer
  
    Ligne = GetLigne(ComboBox1.Text)  'retracer la ligne pour écrire les données
    If Ligne = -1 Then
        MsgBox "La valeur de Combobox1 n'a pas été trouvée"
        Exit Sub
    End If
  
    Rep = MsgBox("Voulez-vous continuer avec l'enregistrement?", _
                    vbYesNo, ThisWorkbook.Name)
    If Rep = vbNo Then Exit Sub
  
    'Ici change les lettres D à H pour les lettres des cellules
    'dans lesquelles tu veux inscrire tes données
    Range("P" & Ligne) = TextBox4.Value
    Range("Q" & Ligne) = TextBox5.Value
    Range("R" & Ligne) = TextBox6.Value
    Range("S" & Ligne) = DTPicker1.Value
    Range("T" & Ligne) = ComboBox2.Text
   
Ligne = (Range("P1").End(xlDown).Row + 1)
    Range("P" & Ligne) = TextBox10.Value
    Ligne = (Range("Q1").End(xlDown).Row + 1)
    Range("Q" & Ligne) = TextBox11.Text
    Ligne = (Range("R1").End(xlDown).Row + 1)
    Range("R" & Ligne) = TextBox12.Text
    Ligne = (Range("S1").End(xlDown).Row + 1)
    Range("S" & Ligne) = DTPicker2.Value
    Ligne = (Range("T1").End(xlDown).Row + 1)
    Range("T" & Ligne) = ComboBox3.Value

Unload Me
End Sub
Messages postés
360
Date d'inscription
dimanche 3 décembre 2006
Statut
Membre
Dernière intervention
3 janvier 2012
3
Ouias,,,, merci

Ça fonctionne comme ça.

Merci à vous 2

Private Sub CommandButton2_Click()
Dim Ligne As Long
    Dim Rep As Integer
  
    Ligne = GetLigne(ComboBox1.Text)  'retracer la ligne pour écrire les données
    If Ligne = -1 Then
        MsgBox "La valeur de Combobox1 n'a pas été trouvée"
        Exit Sub
    End If
  
    Rep = MsgBox("Voulez-vous continuer avec l'enregistrement?", _
                    vbYesNo, ThisWorkbook.Name)
    If Rep = vbNo Then Exit Sub
  
    'Ici change les lettres D à H pour les lettres des cellules
    'dans lesquelles tu veux inscrire tes données
    Range("P" & Ligne) = TextBox4.Value
    Range("Q" & Ligne) = TextBox5.Value
    Range("R" & Ligne) = TextBox6.Value
    Range("S" & Ligne) = DTPicker1.Value
    Range("T" & Ligne) = ComboBox2.Text
   
    Range("P" & Ligne + 1) = TextBox10.Value
    Range("Q" & Ligne + 1) = TextBox11.Value
    Range("R" & Ligne + 1) = TextBox12.Value
    Range("S" & Ligne + 1) = DTPicker2.Value
    Range("T" & Ligne + 1) = ComboBox3.Text
   

Unload Me
End Sub