Perte de valeur de variable

Scoobidoo

XLDnaute Occasionnel
Bonjour à tous, le Forum

Et bien me revoilà pour à nouveau vous demander de l'aide. J'ai bidouillé et non pas créé un code qui permet d'enregistrer les données saisies dans l'USF d'un fichier dans un autre fichier. Tout se passe bien à l'exception des "OptionButton". Mes variables Val et Val2 ne gardent pas leur valeurs respectives lorsque je dois écrire les infos dans mon fichier Destination. Je vous joins les 2 codes pour que vous puisiez me dire où je pêche.

Code:
Private Sub CommandButton2_Click()   
Dim Val As String
Dim Val2 As String


    If ComboBox3.Value = "" Then Exit Sub

    If IsNumeric(ComboBox3) Or ComboBox3 Like " *" Or ComboBox3.Value = "" Or InStr(ComboBox3, "  ") > 0 Then
        retMsg = MsgBox("Le nom indiqué n'est pas valide. Veuillez le corriger.", vbOKOnly)
        Exit Sub
    End If

    If Not IsNumeric(TextBox1.Value) Or TextBox1.Value = "0" Then    'si la quantité saisie nest pas numérique ou si égale à 0
        retMsg = MsgBox("La quantité saisie n'est pas valide. Veuillez la corriger.", vbOKOnly)
        Exit Sub
    End If


    If TextBox1.Value = "1" Then    
        retMsg = MsgBox("Vous êtes sur le point d'ajouter " & Chr(10) & TextBox1.Value & " contrat " & " pour " & ComboBox3.Value, vbOKCancel)
    Else: retMsg = MsgBox("Vous êtes sur le point d'ajouter " & Chr(10) & TextBox1.Value & " contrats " & " pour " & ComboBox3.Value, vbOKCancel)
    End If

    If retMsg = vbCancel Then UserForm_Initialize
    
    If retMsg = vbOK Then

        For I = 5 To 6
            If Controls("Optionbutton" & I) = True Then    'on écrit le type de contrat
                Val2 = Mid(Controls("Optionbutton" & I).Caption, 1, 15)
            End If
        Next I

        If Controls("Optionbutton3") = True Then
            Val = "Français"
        ElseIf Controls("Optionbutton4") = True And Controls("Optionbutton7") = True Then
            Val = "Etranger Direct"
        ElseIf Controls("Optionbutton4") = True And Controls("Optionbutton7") = False Then
            Val = "Etranger Via"
        End If
        
    End If
    
    Enregistrer

    With ComboBox3    
        If .Text <> "" And .ListIndex < 0 Then
            .AddItem ComboBox3, 0
            .ListIndex = -1
        End If
    End With
       UserForm_Initialize

End Sub

et ci-dessous celui qui écrit dans mon fichier Destination
Code:
Private Sub Enregistrer()
    Dim wbSour As Workbook, wsSour As Worksheet
    Dim wbDest As Workbook, wsDest As Worksheet
    Dim derLig As Long
    Dim Val As String
    Dim Val2 As String


    Application.ScreenUpdating = False
    Set wbSour = ThisWorkbook
    'Set wsSour = wbSour.Worksheets("Base")
    Set wUsf = UserForm2
    'Vérifier que le classeur de destination existe
    If Dir("Q:\_OEUVRES\JCK\Stats_Contrats\Récap_New_Stats_Contrats.xls", vbDirectory) = "" Then
        MsgBox "Le classeur de destination n'existe pas", vbCritical, "Fichier introuvable..."
        'Exit For
    End If
    ' Ouvrir le classeur de destination
    Workbooks.Open "D:\Mes documents\Stats_Contrats\Récap_New_Stats_Contrats.xls"
    Set wbDest = ActiveWorkbook
    Set wsDest = ActiveWorkbook.Worksheets("Total")
    'D:\Mes documents\Stats_Contrats\New_Statistiques_Contrats.xls

    derLig = wsDest.Range("A" & Cells.Rows.Count).End(xlUp).Row + 1

    wsDest.Range("A" & derLig).Value = UserForm2.ComboBox3.Value
    wsDest.Range("B" & derLig).Value = UserForm2.ComboBox1.Value
    wsDest.Range("C" & derLig).Value = UserForm2.ComboBox2.Value
    wsDest.Range("D" & derLig) = Val
    wsDest.Range("E" & derLig) = Val2
    wsDest.Range("F" & derLig).Value = UserForm2.TextBox1.Value
    wsDest.Range("G" & derLig).Value = CDate(Date) & "  à  " & Time
    wsDest.Range("H" & derLig).Value = Application.UserName
    ' Sauvegarder les données dans le classeur de destination
    wbDest.Save
    ' Fermer le classeur de destination
    wbDest.Close
    'End If
End Sub

D'avance merci à tous.

Scoobidoo

Ps: n'hésitez pas à me proposer des amélioration pour le code que j'ai bricolé. A+
 

Odesta

XLDnaute Impliqué
Re : Perte de valeur de variable

Bonjour

En survolant rapidement, il me semble qu'il y a juste un petit problème :
Vous déclarez val et val2 dans les deux macros.
VBA ne sait pas que ce sont les deux mêmes variables.
Pour cela :
A l'extérieur des macros, écrire la déclaration des variables en mode "public"

Public Val As String
Public Val2 As String

J'espère que cela suffira

Cordialement
Olivier
 

Statistiques des forums

Discussions
312 489
Messages
2 088 849
Membres
103 974
dernier inscrit
chmikha