Problème de textbox et d'évènement change

Flo.

XLDnaute Nouveau
Bonjour,
Je suis en train de réaliser un morceau de code dans lequel j'importe des données venant d'un autre classeur et les copies dans une feuille de mon classeur actuel. Pour cela j'ai réalisé une fenêtre userform dans laquelle se trouvent plusieurs éléments. Suite à une importation l'évènement change de mes textbox n'a plus l'air de fonctionner.

Je m'explique, l'importation des données dans le classeur de travail se passe bien. Par contre, lorsque cette opération est terminée j'aimerai que lors d'un changement de valeur dans une textbox celle ci soit traitée. Le programme devrait donc passer dans l'évènement "change" pour vérifier la cohérence de la valeur insérée. Ce n'est visiblement pas le cas puisqu'en mettant une valeur erronée il ne la modifie pas. Si je n'importe pas les données, il me bloque bien ma valeur en conséquence.

J'ai oublié de préciser que l'userform reste afficher tout au long de l'opération de copie et n'ai donc ni ouverte ni fermée, je ne sais pas si ça a son importance ou non.

Merci pour vos réponses

Je rajoute un morceau de code :
Code:
Private Sub Importation_Config_Click()
        Application.ScreenUpdating = False
        
        ' Sauvegarde du nom de fichier actuel
        file_calage = ActiveWorkbook.Name
        ' Récupération du chemin du fichier à importer
        fileToOpen = Application.GetOpenFilename(Title:="Ouvrir une configuration existante", filefilter:="Classeur Excel, *.xls")
        ' Lorsqu'on clique sur "annuler" on sort de cette fonction
        If fileToOpen = "Faux" Then
            Exit Sub
        ' Procédure normal de récupération des données
        Else
            ' Ouverture du fichier à importer
            Workbooks.Open Filename:=fileToOpen
            ' Récupération du nom de fichier *.xls
            file_import = nettoyer_chemin(fileToOpen)
            ' Réalisation du copié collé spécial ne prennant en compte que les valeurs
	      ...            
            ' Fermeture du fichier à importer
	      ...            
            ' Insertions des valeurs récupérées dans les TextBox de l'userform Calage_p1
	      ...            
            With Calage_p2
                .Copie_Donnees
       		' Remise en place des valeurs dans les textbox des userforms
		...
            End With
            Traitement_loi_AAC
	    ' Utilisation d'une fonction d'une autre userform
            Calage_p2.Affectation_Valeurs_Classeur
            Mise_en_Forme_Loi_Levee
            Application.ScreenUpdating = True
            
            ' Message rappellant quelle configuration vient d'être insérée
            MsgBox "Vous avez charger la configuration suivante :" & vbCrLf & vbCrLf & fileToOpen
            
        End If
End Sub
___________________________________________________________________________________________________________________________

Private Sub Levee_Adm_Change()
    ' Test si la valeur insérée est supérieure à la levée max
    LVA_max = Replace(Round(Application.WorksheetFunction.Max(Worksheets("Loi_Levée_Soupapes").Range("B4:B2000").Value), 2), ",", ".", vbTextCompare)
    If Val(Levee_Adm_PMH.Text) > LVA_max Then
        Levee_Adm_PMH.Text = LVA_max
    End If
End Sub
 
Dernière édition:

Gorfael

XLDnaute Barbatruc
Re : Problème de textbox et d'évènement change

Salut Flo. et le forum
L'évènement Change d'une textBox n'est pas le même que celui d'une feuille.
AfterUpDate me semble plus adapté.
Quand a trouver ce que fait une macro, avec des appels à d'autres macros inconnues... Tout ce qui est évident ne l'est que pour ceux qui utilisent ton fichier ! Nous, on ne peut que deviner, avec un chance que ce soit juste.
A+
 

Flo.

XLDnaute Nouveau
Re : Problème de textbox et d'évènement change

Merci pour vos réponses.

AfterUpdate peut être une bonne utilisation, cependant je veux prévenir l'utilisateur dès la première insertion. Il doit rentrer un nombre compris entre 0 et une valeur max que je détermine. Je dois donc refuser le signe - et toutes lettres.

J'ai trouvé mon problème. Il venait de plusieurs choses. D'une part, il y a une déclaration qui n'était pas appropriée. LVA_max était déclaré en variant ce qui posait problème. D'autre part, j'ai voulu simplifier mon code qui fonctionner avant en mettant une variable que j'ai mal remplie. J'ai rajouter le replace alors qu'il n'était pas dans la condition (copier-coller de l'instruction qui suivait). Le replace est seulement utile pour l'utilisation dans la textbox pour ne pas poser de problème dans mon traitement par la suite. J'effectue des conversions pour palier au problème de compatibilité entre les valeurs insérées dans les textbox avec des points et les sng ou dbl qui sont avec des virgules.

Bonne soirée à tous
 

Statistiques des forums

Discussions
312 496
Messages
2 088 980
Membres
103 997
dernier inscrit
SET2A