Insertion de donnée à partir d?un Userform dans un fichier excel

Résolu
avyrex1926 Messages postés 360 Date d'inscription dimanche 3 décembre 2006 Statut Membre Dernière intervention 3 janvier 2012 - 20 mai 2007 à 12:22
avyrex1926 Messages postés 360 Date d'inscription dimanche 3 décembre 2006 Statut Membre Dernière intervention 3 janvier 2012 - 20 mai 2007 à 16:00
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

cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
20 mai 2007 à 14:11
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
3
avyrex1926 Messages postés 360 Date d'inscription dimanche 3 décembre 2006 Statut Membre Dernière intervention 3 janvier 2012 3
20 mai 2007 à 12:23
 
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)
0
avyrex1926 Messages postés 360 Date d'inscription dimanche 3 décembre 2006 Statut Membre Dernière intervention 3 janvier 2012 3
20 mai 2007 à 14:16
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
0
avyrex1926 Messages postés 360 Date d'inscription dimanche 3 décembre 2006 Statut Membre Dernière intervention 3 janvier 2012 3
20 mai 2007 à 14:22
B = la colone ou le Combobox1 cherche la valeur
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
avyrex1926 Messages postés 360 Date d'inscription dimanche 3 décembre 2006 Statut Membre Dernière intervention 3 janvier 2012 3
20 mai 2007 à 14:59
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
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
20 mai 2007 à 15:02
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~
  
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
20 mai 2007 à 15:16
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
0
avyrex1926 Messages postés 360 Date d'inscription dimanche 3 décembre 2006 Statut Membre Dernière intervention 3 janvier 2012 3
20 mai 2007 à 15:43
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
0
avyrex1926 Messages postés 360 Date d'inscription dimanche 3 décembre 2006 Statut Membre Dernière intervention 3 janvier 2012 3
20 mai 2007 à 16:00
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
0
Rejoignez-nous