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