IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Liste déroulante conditionnelle sur plusieurs cellulles [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Ingénieur d'Etudes Mécaniques
    Inscrit en
    Janvier 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur d'Etudes Mécaniques
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2013
    Messages : 8
    Par défaut Liste déroulante conditionnelle sur plusieurs cellulles
    Bonjour!
    Je suis un débutant en VBA. Et j'ai besoin de votre aide.

    Dans le cadre de mon travail, je souhaite créer des listes déroulantes dans toutes les cellules d'une colonne. Jusque là, tout va bien.
    Seulement, je voudrais que le contenu de la liste déroulante varie:
    Le contenue de chaque liste déroulante dépend du remplissage où non d'autres cellules situées sur la même ligne.
    J'ai écrit une macro mais ça ne fonctionne pas du tout...

    Je vous met le fichier avec la macro en pièce jointe.

    Merci d'avance pour votre aide
    Fichiers attachés Fichiers attachés
    • Type de fichier : 7z Test.7z (82,5 Ko, 246 affichages)

  2. #2
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Bonjour,

    Ça serait bien que tu donnes un minimum d'informations. Par exemple où sont les listes déroulantes ? et qu'est-ce que tu veux faire ? Donner une macro qui ne fonctionne pas n'est pas d'un grand secours.

  3. #3
    Membre habitué
    Homme Profil pro
    Ingénieur d'Etudes Mécaniques
    Inscrit en
    Janvier 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur d'Etudes Mécaniques
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2013
    Messages : 8
    Par défaut
    Bonjour,

    Oui en effet, après avoir relu mon post, je m’aperçois que c'est pas très compréhensible.
    Donc en fait ce que je veux faire:

    Les listes déroulantes se situent sur la colonne M "Id Affectation"

    Leur contenu dépend du remplissage du champ "Matériel" dans les colonnes F,G,H,I,J,K,L.

    Si il y a un 1 sur une ligne de la colonne PC CAO, alors la liste de la colonne M n'affiche que des id de PC CAO.

    Pour ça il faut chercher dans la feuille "Park" pour récupérer les id machines.
    Dans la macro il y a aussi un critère de disponibilité "usable" qui ne peut être vérifié dans ce fichier.

    La macro que j'ai écrit devrait fonctionner comme ça:
    Pour toutes les lignes de la feuille PDC
    On regarde quel type de PC il faut affecter (Variable TypePC)
    On fait la liste de tous les PC de type TypePC et "usable" qui sont
    référencés dans la feuille Park, et on les met dans la variable Liste()
    La cellule est affectée d'une liste contenant toutes les valeurs de la
    variable Liste.

    J'espère avoir été clair.
    Merci et Bonne journée

  4. #4
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Bonjour,

    Entre autres erreurs que j'ai corrigées, tu testes la présence de "usable" en colonne C :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("Park").Cells(LigneCourante2, 3).Value = "usable"
    La colonne C de cette feuille est vide. Est-ce une erreur de remplissage de la feuille ou une erreur de la macro ?

  5. #5
    Membre habitué
    Homme Profil pro
    Ingénieur d'Etudes Mécaniques
    Inscrit en
    Janvier 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur d'Etudes Mécaniques
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2013
    Messages : 8
    Par défaut
    Re,

    En effet, il y a un pb dans le fichier.
    C'est un classeur que j'ai allégé. Et un peu trop du coup.
    En fait normalement la colonne C de Park comporte des champs "usable" qui détermine si le PC est utilisable ou non.

    En fait le but c'est d'avoir une liste qui recense tous les PC utilisables d'un type donné.

    Merci

  6. #6
    Membre habitué
    Homme Profil pro
    Ingénieur d'Etudes Mécaniques
    Inscrit en
    Janvier 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur d'Etudes Mécaniques
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2013
    Messages : 8
    Par défaut Nouvelle étape
    Bonjour à tous!
    Ayant dormi_ sur mon problème tout le week-end, je suis arrivé à résoudre une grande partie de mes difficultés.
    Il ne me reste qu'un problème à résoudre et là j'avoue que je sèche.

    Je dois créer une liste de validation sur plusieurs cellulles et je voudrais que le contenu de cette liste soit le champs contenu dans une variable.

    voici le code qui fonctionne avec le fichier que j'ai envoyé précédemment, du moins jusqu’à la création de la liste:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    Option Explicit
        'Variables ListeDeroulante
        Dim NbAffectation As Single
        Dim Ligne As Single
        'Variables DeterminerType
        Dim Colonne As Single
        Dim ColonneFin As Single
        Dim TypePC As String
        'Variables CreerListe
        Dim TaillePark As Single
        Dim Ligne2 As Single
        Dim Liste(65536) As String
        Dim i As Single
        Dim Total As Variant
        Dim List As Variant
     
    Private Sub Worksheet_Activate()
        ListeDeroulante
    End Sub
     
    Sub ListeDeroulante()
        NbAffectation = Sheets("PDC").Range("A65536").End(xlUp).Row + 1
        Ligne = 7
        While Ligne <> NbAffectation
            DeterminerType
            CreerListe
            With Cells(Ligne, 13).Validation
                .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:=List
                .IgnoreBlank = True
                .InCellDropdown = True
                .InputTitle = ""
                .ErrorTitle = ""
                .InputMessage = ""
                .ErrorMessage = ""
                .ShowInput = True
                .ShowError = True
            End With
            Ligne = Ligne + 1
        Wend
    End Sub
     
    Sub DeterminerType()
        Colonne = 6
        ColonneFin = 13
        While Colonne <> ColonneFin
            If Sheets("PDC").Cells(Ligne, Colonne).Value <> "" Then
                TypePC = Cells(4, Colonne).Value
                Exit Sub
            Else
                Colonne = Colonne + 1
            End If
        Wend
    End Sub
     
    Sub CreerListe()
        Ligne2 = 4
        TaillePark = Sheets("Park").Range("A65536").End(xlUp).Row + 1
        i = 1
        While Ligne2 <> TaillePark
            If Sheets("Park").Cells(Ligne2, 5).Value = TypePC And Sheets("Park").Cells(Ligne2, 3).Value = "usable" Then
                Liste(i) = Sheets("Park").Cells(Ligne2, 2).Value
                Ligne2 = Ligne2 + 1
                i = i + 1
            Else
                Ligne2 = Ligne2 + 1
            End If
        Wend
     
        Total = 0
        i = 1
        While Liste(i) <> ""
            Total = Total + 1
            i = i + 1
        Wend
     
        List = ""
        For i = 1 To Total
            List = List & ";" & Liste(i)
        Next
        List = Right(List, Len(List) - 1)
    End Sub

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Liste déroulante automatique sur clic dans cellule
    Par NEC14 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 22/01/2013, 16h18
  2. [AC-97] Liste déroulante basée sur plusieurs champs d'une table
    Par docjo dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 02/01/2012, 17h01
  3. Liste déroulante basée sur un même champ dans plusieurs tables
    Par theclaw dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 29/04/2011, 18h58
  4. Réponses: 1
    Dernier message: 09/09/2008, 09h12
  5. Réponses: 1
    Dernier message: 09/04/2007, 16h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo