Excel 2007 vba test si valeur saisie textbox

Seb -  
Bidouilleu_R Messages postés 1209 Statut Membre -
Bonjour,

J'ai crée un userform avec 50 textbox. J'ai une combobox qui me permet de choisir un profil.
Un bouton enregistrer me permet de copier le contenu des textbox dans les cellules d'excel en fonction du profil choisi.
Si l'utilisateur oublie d'appuié sur le bouton enregistrer avant de changer de profil toutes les valeurs saisie sont perdue.
J'aimerai testé si l'utilisateur viens de saisie une valeur dans une ou plusieurs textbox et qu'au moment de changer de profil un message apparaît le prévenant qu'il n'a pas enregistrer.
Comment est ce possible de faire ceci.
Merci pour votre aide.

6 réponses

  1. Yoskopolite Messages postés 92 Statut Membre 8
     
    Une solution (pas franchement miracle mais bon...) :

    1 - Créé une checkbox, et rend la invisible (ou place là à un endroit qui t'arrange).
    2 - Sur modification de chacun de tes 50 champs, effectuer la même procédure qui coche la checkbox.
    3 - Sur modification de ta combobox, vérifie que la checkbox est cochée. Si c'est le cas, met un message d'avertissement, puis décoche la.

    On peut adapater cette méthode en remplissant une cellule plutôt qu'en utilisant une checkbox.
    0
  2. Seb
     
    J'ai fais une classe pour tester si une de mes 50 textbox change alors je coche la checkbox
    Voila mon code :
    Private Sub TxtBox_Change()
        CheckBox1 = True
    End Sub
    


    En inscrivant des valeurs dans mes textbox, la checkbox ne se coche pas.
    Pouvez vous m'aider?
    Merci
    0
  3. Seb
     
    C'est bon j'ai réussi à cocher ma checkbox par contre maintenant à la place de rendre invisible la checkbox j'aimerais utiliser un booléan.
    Voici le code :

    Public txt As Boolean
    
    Private Sub TxtBox_Change()
        txt = True
    End Sub
    
    Private Sub ComboBox1_Change()
        If txt = True Then
        Select Case MsgBox("Enregistrer les modifications", vbYesNo)
        Case vbYes
    
        Case vbNo
    
        End Select
        End If
    End Sub
    
    


    La variable txt se met bien à 1 mais quand la combobox change la msgbox n'apparaît pas.
    Si je remplace :
    If txt = True Then
    

    par
    If CheckBox1.Value = True Then
    

    Le msgbox apparaît.
    Où est le problème.
    Merci
    0
    1. Yoskopolite Messages postés 92 Statut Membre 8
       
      Ben ça me parait pas mal. Je ne comprend pas ce qui cloche.
      J'ai testé de mon côté avec la variable publique, et ça a l'air de fonctionner.
      Essaye de mettre un point d'arrêt sur le "If txt = True Then", pour observer sa valeur et son comportement.

      Par contre faut penser à repasser la variable à false dans le code de ComboBox1_Change.
      0
  4. Seb
     
    J'ai testé avec les points d'arrêt.
    Quand je met une valeur dans une des textbox la variable txt est égale à vide.
    Private Sub TxtBox_Change() 
        txt = True 
    End Sub 
    

    J'ai déclaré ma variable txt dans le module de classe. Faut-il la déclaré autre part?
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Seb
     
    J'ai essayé juste avec une textbox et sa marche bien.
    Je pense avoir trouver le problème, j'ai fais un module de classe pour ne pas être obligé de répéter le code pour chaque textbox et la variable public ne doit pas fonctionner dans les modules de classe.
    Comment remédier à cela?
    Merci.
    0
  7. Bidouilleu_R Messages postés 1209 Statut Membre 296
     
    pour faire simple tu peux utiliser une variable de type boolean
    que tu déclares public au niveau du module

    public Valide_Profil as Boolean
    tu l'initialise sur false dans le module
    puis
    dans le botoun enregistrer
    tu le passe à true
    quand tu choisis ton profil dans le combobox j'imagine
    tu le contrôles si true....
    if not Valide_Profil then
    s= msgbox(.... non sauvegardé !!! ",vbokonly,"Alerte")
    Exit sub ' tu quittes car non sauvegarde
    endif
    Valide_Profil =false

    tu le remets avant de quitter Valide_Profil =false
    0