Liste déroulante dans UserForm : pas de contenu sur Mac

Anonyme
2021-03-12T14:39:34+00:00

Bonjour,

J’ai mis au point un formulaire de saisie sous Windows en utilisant UserForm. Dans ce formulaire j’ai intégré des cellules alimentées par des listes de choix. Ce formulaire fonctionne parfaitement sous Windows mais lorsque le classeur est transféré sur un Mac (Excel 365 Ve 16.46), le formulaire appelle bien une liste déroulante mais le contenu ne s’affiche pas. À part cela le formulaire fonctionne bien sur le Mac.

Une idée de là où il faut chercher ?

 Cdlt

Microsoft 365 et Office | Excel | Pour la maison | Windows

Question verrouillée. Cette question a été migrée à partir de la Communauté Support Microsoft. Vous pouvez voter pour indiquer si elle est utile, mais vous ne pouvez pas ajouter de commentaires ou de réponses ni suivre la question.

0 commentaires Aucun commentaire

Réponse acceptée par l’auteur de la question

Anonyme
2021-03-15T17:56:14+00:00

Je ne vais pas pouvoir répondre à tout ça ! 😱 Je vais faire de mon mieux...

PatriceDURBIN

- faut-il ouvrir une feuille par liste déroulante ?

Non. De toute évidence le code utilise des plages sur deux feuilles distinctes ,dont trois plages sur le deuxième feuille.

PatriceDURBIN

  • le terme nme est-il une variable fourre tout ?

Oui, probablement "inspirée" de name. Mais ça pourrait évidemment être n'importe quoi.

PatriceDURBIN

  • à quel endroit placer ces lignes ? avant les lignes propres à Windows ou à la place ?

Difficile d'être précis dans ce cas, faute de pouvoir faire quelques tests et vérifications. Logiquement, ce serait plutôt à mettre "à la place", par exemple avec de la compilation conditionnelle, genre :

#If Mac then

' code pour la version Mac

#Else (ou #Else If ... Then)

' code pour la version Windows

#End If

PatriceDURBIN

Au pire, pouvez-vous m’indiquer un guide auquel je pourrais me référer pour apprendre à lire la syntaxe ?

Pas très évident, dans la mesure où on n'a pas tous la même façon d'appréhender les choses. On trouve des tas de tutos, des tas de sites traitant des macros VBA. Bon, il y a bien sûr le guide de référence VBA de Microsoft. Ce n'est pas très convivial, mais il est souvent utile de s'y référer. Après, pour le reste, il y a les forums (!), les tutos, je ne saurais pas trop te dire, d'autant que pas mal sont en anglais (ce qui ne me pose pas trop de problème, mais ce n'est pas le cas de tout le monde). Quand je cale sur un point, en général je lance une recherche sur les termes qui me posent problème et je finis toujours par trouver... J'ai conscience que ça ne répond pas vraiment à tes interrogation, désolé...

Cette réponse a-t-elle été utile ?

1 personne a trouvé cette réponse utile.
0 commentaires Aucun commentaire

4 réponses supplémentaires

  1. Anonyme
    2021-03-15T14:22:29+00:00

    Bonjour,

    J’avoue que mes connaissances en VBA sont très minces.

    Comment interpréter le code suivant :

    - faut-il ouvrir une feuille par liste déroulante ?

    • le terme nme est-il une variable fourre tout ?
    • à quel endroit placer ces lignes ? avant les lignes propres à Windows ou à la place ?

    Je crains que cela ne vous soit pas facile de répondre. 

    A tout hasard, je mets ci-dessous le code que vous m’avez conseillé et en dessous le code qui me permet de saisir dans la table.

    Au pire, pouvez-vous m’indiquer un guide auquel je pourrais me référer pour apprendre à lire la syntaxe ?

    Code conseillé : 

    Le code de ma saisie :

    'Procédure permettant de sauvegarder l'ajout d'un nouvel enregistrement

    Private Sub btnValider_Click()

        'On teste que les contrôles ont bien été saisis

        If Len(Me.Txtnumero) = 0 Then

            Me.Lblmessage = "Veuillez saisir le numéro de l'enregistement"

            Me.Txtnumero.SetFocus

        ElseIf Len(Me.Txtlien) = 0 Then

            Me.Lblmessage = "Veuillez saisir le lien avec un précédent enregistement, sinon mettre le même numéro"

            Me.Txtlien.SetFocus

        ElseIf Len(Me.Txtdate) = 0 Then

            Me.Lblmessage = "Veuillez saisir la date"

            Me.Txtdate.SetFocus

       Private Sub UserForm_Activate()

            Dim nme As Range

            Dim ws As Worksheet

            Setws = Sheets("Lieu1")

                Me.UserName_Insert.AddItem nme.Value

                Next nme

        End Sub

        ElseIf Len(Me.Cbolieu1) = 0 Then

            Me.Lblmessage = "Veuillez saisir le bâtiment"

            Me.Cbolieu1.SetFocus

        ElseIf Len(Me.Txtlieu2) = 0 Then

            Me.Lblmessage = "Veuillez saisir le lieu plus précis"

            Me.Txtlieu2.SetFocus

        ElseIf Len(Me.Cboetage) = 0 Then

            Me.Lblmessage = "Veuillez sélectionner l'étage"

            Me.Cboetage.SetFocus

        ElseIf Len(Me.Cbocategorie) = 0 Then

            Me.Lblmessage = "Veuillez sélextionner la catégorie d'enregistrement"

            Me.Cbocategorie.SetFocus

        ElseIf Len(Me.Cbourgence) = 0 Then

            Me.Lblmessage = "Veuillez sélectionner l'urgence de la demande"

            Me.Cbourgence.SetFocus

        ElseIf Len(Me.Cboetat) = 0 Then

            Me.Lblmessage = "Veuillez sélectionner l'état d'avancement de la demande"

            Me.Cboetat.SetFocus

        ElseIf Len(Me.Txtdescription) = 0 Then

            Me.Lblmessage = "Veuillez saisir la description de la demande"

            Me.Txtdescription.SetFocus

        ElseIf Len(Me.Cboentreprise) = 0 Then

            Me.Lblmessage = "Veuillez sélectionner le nom de l'entreprise s'il est connu"

            Me.Cboentreprise.SetFocus

        Else

            'Si tous les champs sont alimentés on peut sauvegarder la source

                'On cherche la prochaine ligne vide de la source

                Feuil1.Activate

                Feuil1.Range("A1048576").End(xlUp).Offset(1, 0).Select

                'On affecte les données du formulaire dans la source

                ActiveCell = ActiveCell.Offset(-1, 0) + 1

                ActiveCell.Offset(0, 1) = Me.Txtlien

                ActiveCell.Offset(0, 2) = CDate(Me.Txtdate)

                ActiveCell.Offset(0, 3) = Me.Cbolieu1

                ActiveCell.Offset(0, 4) = Me.Txtlieu2

                ActiveCell.Offset(0, 5) = Me.Cboetage

                ActiveCell.Offset(0, 6) = Me.Cbocategorie

                ActiveCell.Offset(0, 7) = Me.Cbourgence

                ActiveCell.Offset(0, 8) = Me.Cboetat

                ActiveCell.Offset(0, 9) = Me.Txtdescription

                ActiveCell.Offset(0, 10) = Me.Cboentreprise

                'On vide le formulaire pour une prochaine sisie

                Call btnannuler_Click

        End If

    End Sub

    Merci de votre aide !

    Cdlt

    Cette réponse a-t-elle été utile ?

    0 commentaires Aucun commentaire
  2. Anonyme
    2021-03-12T17:46:35+00:00

    Oui, c'est plus probablement l'absence de RowSource dans les versions pour Mac qui doit poser problème. Tu trouveras dans l'exemple cité ici une piste de contournement. En espérant que ça t'aide à t'en sortir. Comme vu, je ne peux pas trop tester, faute de UserForm dans les versions actuelles pour Mac (et d'une compatibilité "hésitante" avec ce qu'on peut faire dans Excel 2011).

    Cette réponse a-t-elle été utile ?

    0 commentaires Aucun commentaire
  3. Anonyme
    2021-03-12T16:27:10+00:00

    Merci de votre réponse rapide.

    Voici la partie alimentation du formulaire. Je pense que le problème est peut-être au niveau « cbo » ?
    Je me suis aussi demandé s’il n’y avait pas un problème de chemin pour atteindre les listes ?

    Si comme vous le dites il s’agit d’une fonctionnalité qui n’existe pas dans la version pour Mac y aurait-il un moyen de contourner ?

    Merci à l'avance

    Cdlt

    'Procédure permettant de sauvegarder l'ajout d'un nouvel enregistrement

    Private Sub btnValider_Click()

        'On teste que les contrôles ont bien été saisis

        If Len(Me.Txtnumero) = 0 Then

            Me.Lblmessage = "Veuillez saisir le numéro de l'enregistement"

            Me.Txtnumero.SetFocus

        ElseIf Len(Me.Txtlien) = 0 Then

            Me.Lblmessage = "Veuillez saisir le lien avec un précédent enregistement, sinon mettre le même numéro"

            Me.Txtlien.SetFocus

        ElseIf Len(Me.Txtdate) = 0 Then

            Me.Lblmessage = "Veuillez saisir la date"

            Me.Txtdate.SetFocus

        ElseIf Len(Me.Txtlien) = 0 Then

            Me.Lblmessage = "Veuillez saisir le lien avec un précédent enregistement, sinon mettre le même numéro"

            Me.Txtlien.SetFocus

        ElseIf Len(Me.Cbolieu1) = 0 Then

            Me.Lblmessage = "Veuillez saisir le bâtiment"

            Me.Cbolieu1.SetFocus

        ElseIf Len(Me.Txtlieu2) = 0 Then

            Me.Lblmessage = "Veuillez saisir le lieu plus précis"

            Me.Txtlieu2.SetFocus

        ElseIf Len(Me.Cboetage) = 0 Then

            Me.Lblmessage = "Veuillez sélectionner l'étage"

            Me.Cboetage.SetFocus

        ElseIf Len(Me.Cbocategorie) = 0 Then

            Me.Lblmessage = "Veuillez sélextionner la catégorie d'enregistrement"

            Me.Cbocategorie.SetFocus

        ElseIf Len(Me.Cbourgence) = 0 Then

            Me.Lblmessage = "Veuillez sélectionner l'urgence de la demande"

            Me.Cbourgence.SetFocus

        ElseIf Len(Me.Cboetat) = 0 Then

            Me.Lblmessage = "Veuillez sélectionner l'état d'avancement de la demande"

            Me.Cboetat.SetFocus

        ElseIf Len(Me.Txtdescription) = 0 Then

            Me.Lblmessage = "Veuillez saisir la description de la demande"

            Me.Txtdescription.SetFocus

    ElseIf Len(Me.Cboentreprise) = 0 Then

            Me.Lblmessage = "Veuillez sélectionner le nom de l'entreprise s'il est connu"

            Me.Cboentreprise.SetFocus

        Else

            'Si tous les champs sont alimentés on peut sauvegarder la source

                'On cherche la prochaine ligne vide de la source

    Cette réponse a-t-elle été utile ?

    0 commentaires Aucun commentaire
  4. Anonyme
    2021-03-12T15:38:36+00:00

    Il va être difficile de te répondre, dans la mesure où les dernières versions pour Mac ne permettent pas d'avoir accès aux UserForm dans l'éditeur VBA. Le plus probable, à mon avis, c'est que ta liste déroulante fait appel à des fonctionnalités "Windows only" (par exemple un contrôle ActiveX). 

    Est-ce que tu peux donner un extrait du code utilisé pour l'alimentation de la liste ?

    Cette réponse a-t-elle été utile ?

    0 commentaires Aucun commentaire