Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL pour MAC [Mac - Excel - VBA] Problème de saisie semi-automatique dans une ComboBox

Shadufi

XLDnaute Nouveau
Bonjour,
J'ai un souci dans mon formulaire de tableur Excel.
La ComboBox en question est liée à un Dictionnaire (Bien configuré autant pour mac que pour Windows)

- Sur Windows la saisi semi-automatique fonctionne Nikel

- Su Mac, quand on écris 2 lettres, la saisie fonctionne par contre quand on tape une nouvelle lettre, la proposition de la saisie reste dans la CB. Je vous donne un exemple

je tape "Mu" --> Mac me donne "Muriel"
Je continue de taper "MUL" --> Mac me donne "MuLriel". ==> La fin de la saisie auto ne s'efface pas se qui fait que c'est assez embêtant.

Dans un soucis d'avoir une réponse plus rapide et varié, j'ai poster sur plusieurs forum. Si l'une d'entre elle OU moi même ayant trouver une solution, je le posterais dans chacune d'entre elle.
 

job75

XLDnaute Barbatruc
Bonjour Shadufi,

Vous parlez de Dictionnaire (Dictionary) mais à ma connaissance il n'existe pas sur MAC

Cela dit si la liste de base est sans doublon il est inutile, voyez le fichier joint et ce code :
VB:
Private Sub ComboBox1_GotFocus()
Dim tablo, x$, i&, liste$(), n&
tablo = [A1].CurrentRegion.Resize(, 2) 'matrice, plus rapide, au moins 2 éléments
x = LCase(ComboBox1) 'minuscules
For i = 1 To UBound(tablo)
    If LCase(tablo(i, 1)) Like x & "*" Then
        ReDim Preserve liste(n)
        liste(n) = tablo(i, 1)
        n = n + 1
    End If
Next
If n Then ComboBox1.List = liste: ComboBox1.DropDown Else ComboBox1.Clear  'déroule la liste
End Sub

Private Sub ComboBox1_Change()
ComboBox1_GotFocus
End Sub
A+
 

Pièces jointes

  • ComboBox(1).xlsm
    21.5 KB · Affichages: 2

job75

XLDnaute Barbatruc
Une amélioration dans ce fichier (2) :
VB:
If n Then ComboBox1.List = liste: ComboBox1.DropDown Else ComboBox1.Clear: CreateObject("WScript.Shell").SendKeys "~" 'déroule ou ferme la liste
En effet avec le fichier (1) quand la liste est déroulée et qu'on tape "z" la liste ne se ferme pas.
 

Pièces jointes

  • ComboBox(2).xlsm
    21.9 KB · Affichages: 5

Shadufi

XLDnaute Nouveau
Bonjour @job75, Merci pour ta réponse mais c'est pas se que je recherche !
Le module Dictionary n'existe pas pour Mac en effet mais on peux l'importer directement dans ton Tableur (je te met le lien si tu est curieux https://github.com/VBA-tools/VBA-Dictionary )

Mon soucis et cela je pense que c'est un souci avec Mac Directement c'est que quand on commence la saisie (dans une CB) la suite de la saisie devrais rester "invisible" du moins modifiable jusqu'à ce qu'on accepte la saisie semi-automatique.
Sur Windows, cela fonctionne merveilleusement bien mais mac, il considère que c'est se que tu recherche alors que tu n'a pas fini de taper. Ce qui provoque ce que j'ai expliqué ci-dessus !!
 

Shadufi

XLDnaute Nouveau
VB:
'
---------------------------------------------------------------------------------------------
' PARTIE FORMULAIRE
'---------------------------------------------------------------------------------------------

Private Sub UserForm_Initialize()
        
    init_form
    
End Sub


Private Sub CB_Beneficiaire_Change()
    Dim Row_Design As Range
    Dim Row_Categ As Range
    
    CB_Beneficiaire.BackColor = RGB(255, 255, 255)
    CB_Beneficiaire.Text = UCase(CB_Beneficiaire.Text)

    Set Row_Design = Sheet_JDR.Range("I7:I" & Rows.Count).Find(CB_Beneficiaire, LookIn:=xlValues, LookAt:=xlWhole)
    
    If Not Row_Design Is Nothing Then
        Set Row_Categ = Sheet_Glossaire.Range("B5:B21").Find(Row_Design.Offset(, -3), LookIn:=xlValues, LookAt:=xlWhole)
        
        If Not Row_Categ Is Nothing Then
            CB_Categorie.Value = Row_Categ.Offset(, -1)
        Else
            CB_Categorie.Value = ""
        End If
        
        CB_Designation.Value = Row_Design.Offset(, 1)
        
    Else
        CB_Designation.Value = ""
    End If
    
    Update_ChargeFV
End Sub

Public Sub init_liste()

    Dim Dico_Beneficiaires As Object
    Dim Dico_Designation As Object
    
    #If Mac Then
        Set Dico_Beneficiaires = New Dictionary
        Set Dico_Designation = New Dictionary
    #Else
        Set Dico_Beneficiaires = CreateObject("Scripting.Dictionary")
        Set Dico_Designation = CreateObject("Scripting.Dictionary")
    #End If
    
    'Liste Beneficiaires
    For Each c In Range([I7], [I999999].End(xlUp))
        If Not Dico_Beneficiaires.Exists(c.Value) And c.Value <> "" Then Dico_Beneficiaires.Add c.Value, c.Value
    Next c
    CB_Beneficiaire.List = Dico_Beneficiaires.Items
    
    
    'Liste Designation
    For Each c In Range([J7], [J999999].End(xlUp))
        If Not Dico_Designation.Exists(c.Value) And c.Value <> "" Then Dico_Designation.Add c.Value, c.Value
    Next c
    CB_Designation.List = Dico_Designation.Items
End Sub
 

job75

XLDnaute Barbatruc
Vous ne croyez pas qu'il faudrait AUSSI déposer ici le fichier ?

Par ailleurs je constate dans votre code que la macro init_form n'exite pas !

Et comme je l'ai déjà dit s'il n'y a pas de doublon dans les listes les Dictionnary sont inutiles.
 

Shadufi

XLDnaute Nouveau
Malheureusement je ne peux pas vous transmettre le fichier entier car il fait partie des dossiers privés de la société auxquelles je travail avec ou sans les datas ... je ne peux transmettre que la partie du code ratacher au problème.

dans mes liste, il y a des doublons c'est justement pour cela que j'utilise Dictionnary.

Je me suis trompé, c'est Init_Liste au lieux de init form

Je ne pense pas que se soit dans le code qu'il y a une erreur car pour Windows il fonctionne parfaitement !

Seulement Mac a un soucis avec les ComboBox (comme je vous est décrit au dessus et comme dans l'autre forum). Il s'agit sûrement d'un soucis de l'ActiveX.
J'aimerai juste savoir si il y a des personne qui pourrait m'aider pour résoudre ce problème ^^
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…