Saisi semi automatique

Bonjour a tous,

Voila ce qui m'amène sur ce forum.

je travail sur un tableau avec 2 onglets.

la première est ma feuille de travail , le second onglet est une base de donné que j'utilise via des macros.

Il existe une saisie semi-automatique sur Excel qui permet d'afficher des valeurs de cellule sur fond noir lorsque ces valeurs appartiennent a une cellule de la même colonne.

De mon coté je cherche a faire la même chose sur ma feuille de travail, avec la différence suivante:

les valeurs sur fond noir devront être des valeurs saisie dans une colonne de mon onglet base de donnée.

Dans les différents Forum j'ai trouvé une solution alternative avec un menu déroulant, mais celle ci ne me convient pas....

Alors si quelqu'un a un solution, ou un conseil, je suis preneur

j'espère avoir été clair dans mes explications. sinon n’hésitez pas pour plus de précisions

Merci d'avance

Bonjour,

Il n'est pas possible d'intercepter la saisie dans une cellule mais seulement au moment de sortir (Worksheet_Change). Dans ce cas, il faut avoir recours à du "bricolage" comme ce que je te propose ici !

En colonne A de la feuille où tu mets le code ci-dessous, un TextBox est créé dans la cellule sélectionnée et prêt pour la saisie. Une recherche est faite sur la plage en colonne A de la feuille "Feuil2" (à adapter bien sûr !) le premier mot qui correspond est entré dans le TextBox avec sélection de la partie du mot non encore saisie. Un appui sur la touche Entrée ou Tab sort du TextBox et sélectionne la cellule de droite ce qui a pour effet de valider la saisie. Teste et adapte si ça te convient. Code à mettre dans le module de la feuille. Attention, si tu modifie le nom de la TextBox (ici ZoneDeTexte) il te faut adapter les deux sub "pré-écrites" "ZoneDeTexte_KeyDown" et "ZoneDeTexte_Change" :

Option Compare Text 'pour ne pas différencier les minuscules/majuscules

Private Sub ZoneDeTexte_Change()

    Dim Plage As Range
    Dim Cel As Range
    Dim LgMot As Integer

    'définie la plage de recherche ici, en colonne A de feuille "Feuil2", à adapter...
    With Worksheets("Feuil2")

        Set Plage = .Range(.Cells(1, 1), .Cells(.Rows.Count, 1).End(xlUp))

    End With

    With ZoneDeTexte

        'effectue la recherche et sélectionne la fin du mot en fonction...
        For Each Cel In Plage

            If Cel.Value Like .Text & "*" Then

                LgMot = Len(.Text)
                .Text = Cel.Value
                .SelStart = LgMot
                .SelLength = Len(.Text)
                .TopLeftCell.Value = .Text
                Exit For

            End If

        Next Cel

    End With

End Sub

Private Sub ZoneDeTexte_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)

    'si appui sur Entrée ou Tab
    If KeyCode = 9 Or KeyCode = 13 Then ZoneDeTexte.TopLeftCell.Offset(, 1).Select

End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    Dim Ctrl As OLEObject

    'supprime l'objet si il existe sur la feuille
    On Error Resume Next
    Worksheets("Feuil1").OLEObjects("ZoneDeTexte").Delete
    On Error GoTo 0

    'seulement sur la colonne A
    If Target.Column <> 1 Then Exit Sub
    If Target.Count > 1 Then Exit Sub

    'création tu TextBox
    Application.ScreenUpdating = False
    With Target

        Set Ctrl = Worksheets("Feuil1").OLEObjects.Add("Forms.TextBox.1")
        Ctrl.Left = .Left
        Ctrl.Top = .Top
        Ctrl.Width = .Width
        Ctrl.Height = .Height

    End With
    Application.ScreenUpdating = True

    Ctrl.Name = "ZoneDeTexte"
    Ctrl.Object.SpecialEffect = 0
    Ctrl.Activate 'prêt pour la saisie...

End Sub
Rechercher des sujets similaires à "saisi semi automatique"