Question aux pros des usf

BenHarber

XLDnaute Occasionnel
Bonjour le forum,
Cela fait un mois que je me suis plongé dans les usf et le pb de cohérence entre leurs contrôles....quelle galère !
Voici mon nouveau pb : j'initialise + affiche un usf qui contient une vingtaine de contrôles (zone de texte + zones déroulantes) piochés dans une feuille base. A l'affichage, cet usf a un bouton 'Valider' dont la propriété Enabled = false et un bouton 'Annuler' dont l'Enabled = true.
Je souhaiterais que le bouton 'Valider' ne puisse recevoir le focus (cad viré à enabled=true) QUE SI JE MODIFIE UNE VALEUR D'UN DE MES CONTRÔLES par rapport aux valeurs d'initialisation à l'affichage.
En d'autres termes, quelle est la procédure standard qui me permette de comparer les valeurs des zones initiales de mes contrôles par rapport aux valeurs affichées dans le usf ?

J'espère avoir été clair....

Merci d'avance aux informaticiens inspirés par ce sujet !!
Cordialement,
BenHarber
 

Dull

XLDnaute Barbatruc
Salut Benharber, Le Forum,

Ci-joint un petit fichier sur ton Problème (Si j'ai bien compris)

Dans mon exemple seules les TextBox et ComboBox sont pris en comptes mais avec les autres objets (ListBox, Label... et autres)ça marche aussi.

n'hesite pas si problèmes

@+ :woohoo: [file name=Benharber.zip size=12635]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/Benharber.zip[/file]
 

Pièces jointes

  • Benharber.zip
    12.3 KB · Affichages: 37
  • Benharber.zip
    12.3 KB · Affichages: 41
  • Benharber.zip
    12.3 KB · Affichages: 33

_Thierry

XLDnaute Barbatruc
Repose en paix
Re: USF Contrôles Verification de Changements

Salut BenHarber, Dull, le Forum

Tout d'abord une remarque sur le sujet choisi, plutôt aguicheur, n'est pas vraiment l'idéal pour retrouver ensuite les informations qui pourraient être échangée dans ce fil.

Sinon je pense que la solution proposée par Dull, pourrait convenir seulement si tu ne veux pas vérifier si les valeurs on changées par rapport à la Feuille 'Base' d'Origine...

Sans voir ton UserForm, mais je me suis souvent sorti de trucs dans ce genre avec une vérification en Boucle sur les Controls pour lesquels j'ai appliqué un Tag dans la fenêtre Propriété... C4est très pratique et c'est Magic tI_ qui m'a montré ce truc...

On peut donc renseigner l'adresse de la Cellule d'origine du Control dans la Propriété Tag du Control... Voici comment faire pour une ribambelle de TextBoxs :

Private Sub MassTestor()
Dim CTRL As Control
Dim Good As Byte, Bad As Byte, Total As Byte
   
   
   
For Each CTRL In Me.Controls
       
If TypeOf CTRL Is MSForms.TextBox Then
             
If Not CTRL.Tag = '' Then
                Total = Total + 1
                   
If CTRL = Range(CTRL.Tag) Then
                        Good = Good + 1
                   
Else
                        Bad = Bad + 1
                   
End If
             
End If
       
End If
   
Next

If Good = Total Then
MsgBox 'good'
    Me.CommandButton1.Enabled =
False
Else
    Me.CommandButton1.Enabled =
True
End If
End Sub


Pour des 'Liste Zones Déroulantes', le problème sera plus complexe mais peut aussi se résoudre de la même manière :

Private Sub UserForm_Initialize()
Dim L As Integer
Dim Plage As Range, Cell As Range

Set Plage = Range(Range('A1'), Range('A500').End(xlUp))

With Me.ComboBox1
   
For Each Cell In Plage
        .AddItem Cell
   
Next
.Tag = Plage.Address
End With
End Sub

Private Sub ComboTestor()
Dim CTRL As Control
Dim Good As Byte, Bad As Byte
Dim Cell As Range
   
   
   
For Each CTRL In Me.Controls
       
If TypeOf CTRL Is MSForms.ComboBox Then
           
If Not CTRL = '' Then
               
If Not CTRL.Tag = '' Then
                   
For Each Cell In Range(CTRL.Tag)
                       
If CTRL = Cell Then
                            Good = Good + 1
                       
End If
                   
Next
                   
If Not Good = 1 Then Bad = Bad + 1
               
End If
           
End If
       
End If
   
Next


If Bad = 0 Then
    Me.CommandButton1.Enabled =
False
Else
   
    Me.CommandButton1.Enabled =
True
End If
End Sub

Mais c'est assez tordu !! lol

Bon aprèm
[ol]@+Thierry[/ol]
 

BenHarber

XLDnaute Occasionnel
Merci Dull pour la rapidité de ta réponse,
Néanmoins, pour repartir de ton exemple, lorsque j'initialise le userform1, mes TextBox1 + ComboBox1 CONTIENNENT DEJA UNE VALEUR.
C'est seulement si je change une de ces valeurs que je souhaite rendre accessible le CommandButton1 'Valider'.
Je précise que mes usf contiennent entre 10 et 20 contrôles modifiables : en fait, je pense qu'il me faudrait une procédure qui compare, à la sortie de n'importe quel contrôle sa valeur initiale avec sa valeur actuelle avec déclenchement de la procédure 'CommandButton1.enabled = true' si elles sont différentes.

Bon c'est vite dit...mais je suis incapable d'en écrire le code !!!

Quelqu'un aurait-il-une suggestion à me donner ??
Merci d'avance,

BenHarber
 

BenHarber

XLDnaute Occasionnel
Thierry...Oupss...je devais rédiger ma réponse pendant que tu présentais la tienne...
En tout cas, je te remercie pour ton coup de main (je subodore que cette procédure est celle que je recherchais, même si je n'en ai pas encore saisi la substantifique moelle...).
A défaut d'être visible, je rends hommage à ta transparence !

Cordialement,

BenHarber ;)
 

Statistiques des forums

Discussions
312 609
Messages
2 090 200
Membres
104 451
dernier inscrit
scp9990