Controler en cours de saisie la valeur d une cellule

Bonjour à tous

Je commence doucement la programmation sous excel.

Est il possible de controler en cours de saisie la future valeur du texte d'une cellule et donc d'agir de façons différentes en fonction de ce contrôle en cours de saisie (donc avant que l'utilisateur actionne la touche "enter")

Merci d'avance de votre aide.

Alain (Petit Nouveau)

Bonjour,

Pas à ma connaissance...

Bonjour MFERRAND,

Merci d'avoir pris le temps de me répondre.

Peut être en VBA ?

C'était y compris VBA, pas d'évènement et pas de valeur de cellule avant validation saisie...

Je ne dis pas que c'est impossible, mais c'est au niveau système que ça se passe... et je ne sais comment détecter une saisie clavier dans la mémoire tampon...

edit : recherche au niveau des API GetKeyState et GetAsyncKeyState...

merci, je ne connais pas ce que tu m'indiques, mais je vais faire une recherche

A bientôt

Bonjour le forum

Bonjour MFerrand

En effet , pad possible .

La seule chose que tu puisses faire qui se produira dès que l'utilisateur aura quitté le champ,

c'est afterupdate

Par exemple sur TextBox1:

Private Sub TextBox1_AfterUpdate()
     'ton code de contrôle
End Sub

Bye

Bonjour et merci Patty5046 de ta réponse.

" quitter le champ " = valider par un return ?

Dommage que la fonction n'existe pas.

Une demande de saisie avec une tempo, cela existe ?

En fait, je voudrais réaliser un truc un peu comme on utilise tous les jours avec nos téléphones quand nous sommes sur notre répertoire de contacts et que l'on recherche quelqu'un. Dès les premières lettres, il nous propose plusieurs contacts.

Merci de votre attention à tous.

Bonne soirée

Là je vais m'y perdre !

Tu parles au départ de saisie dans une cellule !

Patty arrive avec des procédures de contrôles de userforms !

Et tu embraies sur quelque chose ressemblant à des listes déroulantes !

Quel est donc le sujet au juste ?

Bonjour Le Forum

Bonjour MFERRAND

Je me doutais que je n'avais pas été assez clair.

Voilà, ce que j'aimerai faire, c'est qu'à partir d'une cellule, et dès les premiers caractères saisis, je puisse faire une recherche sur une (des) liste(s) et proposer à l'utilisateur (sur d'autres cellules en listes déroulantes) des choix possibles pour remplir cette cellule qu'il commence à saisir.

J'espère avoir réussi à me faire comprendre dans mon jargon

Bonne journée à tous

Alain

Bonjour à tous,

Personne pour m'aiguiller vers une solution possible ?

En attente de vos suggestions et merci d'avance

Alain

Bonjour

Est-ce que cela peut te convenir ??

Ce n'est pas tout à fait ce que tu veux, mais je n'ai pas trouvé mieux en magasin pour l'instant...

50saisie.xlsm (14.31 Ko)

A+

Bonjour,

Voici une piste afin d'intercepter la saisie dans la cellule sans passer par des Apis. Un TextBox est ajouté par dessus la cellule sélectionnée dans la colonne C (à adapter) et activé afin de recevoir la saisie, il suffit de coder l'événement Change() pour remplir la liste voulue.

A mettre dans le module de la feuille :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    Dim Ctrl As OLEObject
    Dim Txt As MSForms.TextBox

    On Error Resume Next
    ActiveSheet.Shapes("ZoneTexte").Delete
    On Error GoTo 0

    Application.ScreenUpdating = False

    If Target.Count > 1 Then Exit Sub
    If Target.Column <> 3 Then Exit Sub

    Set Ctrl = Me.OLEObjects.Add("Forms.TextBox.1")

    With Target

        Ctrl.Left = .Left
        Ctrl.Top = .Top
        Ctrl.Width = .Width
        Ctrl.Height = .Height

    End With

    Set Txt = Ctrl.Object

    With Txt

        .Name = "ZoneTexte"
        .BorderColor = Target.Borders.Color
        .BorderStyle = fmBorderStyleSingle
        .Activate

    End With

    Application.ScreenUpdating = True

End Sub

Private Sub ZoneTexte_Change()

    'pour le test :
    ActiveCell.Offset(, 1).Value = ZoneTexte.Text

    'ici le code que tu veux pour remplir ta liste validation ou ComboBox...
    '...
    '...
End Sub

Merci Theze,

J'étais justement en recherche avec un TextBox ou/et avec une ComboBox car je ne connaissais pas les événements associable ( connaitrais tu un site qui pourrais m'expliquer tout cela ?).

Je vais tester ce que tu me proposes et t'en tiendrais au courant.

Au premier coup d'oeuil, cela devrait me convenir, il faudra ajuster le TextBox à la cellule.

Encore merci de ton investigation.

Bonne journée

Alain

Bonjour Patty5046,

Je n'ai rien trouvé dans ton fichier joint, sauf des données en Feuil2 que tu as rassemblé dans une zone de liste (MaListe)

La Feuil1 est vierge ainsi que le code VBA.

Pourrais tu vérifier Stp

Merci d'avance et bonne journée.

Alain

Bonjour,

Pour le test, la liste des mots en colonne A de la feuille "Feuil2" et sur la feuille où se trouve l'événement "SelectionChange()", mettre non pas un ComboBox mais une ListBox afin de voir directement le chargement en fonction de la saisie et si ça convient, remplacer la ListBox par un ComboBox :

Private Sub ZoneTexte_Change()

    Dim Plage As Range
    Dim Cel As Range

    With Worksheets("Feuil2"): Set Plage = .Range(.Cells(1, 1), .Cells(.Rows.Count, 1).End(xlUp)): End With

    Me.ListBox1.Clear

    If Me.ZoneTexte.Text = "" Then Exit Sub

    For Each Cel In Plage

        If Cel.Value Like Me.ZoneTexte.Text & "*" Then Me.ListBox1.AddItem Cel.Value

    Next Cel

End Sub

Si tu veux que la casse n'est pas d'importance (D = d), en tête de module tu colles cette ligne :

Option Compare Text

Merci Theze,

Cela ne va pas etre simple, mais je vais m y atteler.

Je te tiens au courant dès que j 'ai un semblant de quelque chose

Merci encore

A bientôt

Alain

Bonjour

Pas de macro en effet

Feuil2 la liste de mots ,

feuil1, en A1 une liste déroulante, tu tapes ta , tu as tous les mots qui commencent par ta qui s'affichent dans ta liste

(liste déroulante avec validation de données)

A+

Bonjour PATTY5046 et merci, mais ce n'est pas vraiment cela que je voudrais en final.

Je voudrais pouvoir ainsi récupérer dans une liste les choix fait sur cette liste déroulante.

Je vais essayer de potasser la solution donnée par Theze

mais comment aurais je pu trouver tout ce que tu as mis dans les propriétés de la liste déroulante (=DECALER(MaListe;EQUIV(A1&"*";MaListe;0)-1;0;NB.SI(MaListe;A1&"*")))

A+

13encourstheze.xlsm (42.99 Ko)

Bonjour Theze,

Merci pour tes solutions.

La premiere, cela fonctionne ( quand on tape , on voit sa phrase sur cellule à coté)

Par contre pour la deuxieme ( celle qui est en recopie apres mon message), il ne se passe rien.

D'où peut venir le probleme ??

Merci d 'avance

Bonne journée

Alain

13encourstheze.xlsm (42.99 Ko)

Bonjour,

Pour le test, la liste des mots en colonne A de la feuille "Feuil2" et sur la feuille où se trouve l'événement "SelectionChange()", mettre non pas un ComboBox mais une ListBox afin de voir directement le chargement en fonction de la saisie et si ça convient, remplacer la ListBox par un ComboBox :

Private Sub ZoneTexte_Change()

    Dim Plage As Range
    Dim Cel As Range

    With Worksheets("Feuil2"): Set Plage = .Range(.Cells(1, 1), .Cells(.Rows.Count, 1).End(xlUp)): End With

    Me.ListBox1.Clear

    If Me.ZoneTexte.Text = "" Then Exit Sub

    For Each Cel In Plage

        If Cel.Value Like Me.ZoneTexte.Text & "*" Then Me.ListBox1.AddItem Cel.Value

    Next Cel

End Sub

Si tu veux que la casse n'est pas d'importance (D = d), en tête de module tu colles cette ligne :

Option Compare Text

Bonjour,

Voici ton classeur en retour. Comme dit dans mon précédant message, il te faut mettre "Option Compare Text" en tête de module pour ne pas tenir compte de la casse :

33encourstheze.xlsm (37.12 Ko)
Rechercher des sujets similaires à "controler cours saisie valeur"