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 :

[VBA-E] [Débutant] selection dans une combobox


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Inscrit en
    Novembre 2006
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 41
    Points : 31
    Points
    31
    Par défaut [VBA-E] [Débutant] selection dans une combobox
    salut à tous, j'aimerais savoir comment faire pour que lorsque je choisis une donnée dans une combobox celle-ci se met de couleur rouge.

    Voilà ce que j'ai fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     Sub valider()
    Call init_tp
    Dim i As Integer
    For i = 1 To nb_dates
    ComboBox.Range(debut_tableau.Offset(i - 1, 0), debut_tableau.Offset(i - 1, 5)).Interior.Color = RGB(255, 0, 0)
    End Sub
    Je dois mettre en rouge les données des 5 colonnes que j'ai selectionner via la combobox.
    nb_dates est ma variable qui sert à compter le nombre d'élement du tableau.
    debut_tableau correspond au debut du tableau qui ne varie pas.

    J'espére que c'est assez clair

  2. #2
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    bonjour, ...j'ai pas bien compris ce que tu désirai mettre en rouge...? pourrai tu être plus clair... ?avec quel logiciel travaille tu...

  3. #3
    Nouveau membre du Club
    Inscrit en
    Novembre 2006
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 41
    Points : 31
    Points
    31
    Par défaut
    Je travaille sous excel, ce que je voudrais faire c'est : Lorsque je choisis une donnée dans la combobox (la liste déroulante me propose des dates que j'ai entrée precedemment, et que je choisis ex: "06/04/2006") et bien je veux que lorsque j'appuie sur le bouton OK la date que j'ai choisis (ici "06/04/2006") se mette en rouge.

  4. #4
    Membre régulier
    Avatar de mortalino
    Inscrit en
    Janvier 2007
    Messages
    72
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Janvier 2007
    Messages : 72
    Points : 116
    Points
    116
    Par défaut
    Salut,

    ce qui n'est pas clair c'est ce qui doit être en rouge : est-ce le mot dans la feuille (qui correspond donc à l'item sélectionné) ?
    Si oui, y'en a t-il plusieurs ?
    Dans quelle plage de données se situe cette liste ?

    Pour info, un combobox n'a pas de propriété / méthode Range
    ~Mortalino~ "Le mystérieux Chevalier : Provençal, le Gaulois"

  5. #5
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 921
    Points
    55 921
    Billets dans le blog
    131
    Par défaut
    Salut

    Si j'ai bien compris, et en considérant que la combobox s'appuie sur une plage (propriété rowsource), tu pourrais utiliser ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private Sub ComboBox1_Change()
        Dim i As Integer
     
        For i = 0 To ComboBox1.ListCount - 1
            If ComboBox1.List(i) = ComboBox1.Value Then
                ' Effacement des couleurs dans la zone
                Range(Range(ComboBox1.RowSource), Range(ComboBox1.RowSource)(ComboBox1.ListCount, 5)).Interior.Color = xlAutomatic
                ' Mise de la zone en rouge
                Range(Range(ComboBox1.RowSource)(i + 1), Range(ComboBox1.RowSource)(i + 1, 5)).Interior.Color = vbRed
            End If
        Next i
     
    End Sub
    Fonctionnement:
    On passe les items de la liste en revue pour déterminer lequel est sélectionné. Un item est sélectionné lorsque sa valeur est égale à celle du combobox.

    Dès lors, on sélectionne la cellule de cet item. Pour cela, en sachant que le premier item a l'index 0, la cellule de l'item sélectionné se trouve à i + 1 de la première cellule de la plage source du combobox ( en comptant la première cellule à 1).
    On utilise alors un objet Range en fonction de ce décalage, et en décalant de 5 vers la droite pour sélectionner les 5 cellules à mettre en rouge.

    Juste avant la mise en rouge, on remet toutes les cellules des 5 colonnes de la plage source en couleur automatique (optionnel)...

    Ok pour toi?
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  6. #6
    Nouveau membre du Club
    Inscrit en
    Novembre 2006
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 41
    Points : 31
    Points
    31
    Par défaut
    C'est pour un projet d'école, je dois réaliser un programme en VBA sous Excel qui gere un compte en banque. Je suis arriver à la derniere étape celle ou pour valider son choix l'utilisateur selectionne la date, l'intitulé, le débit, le crédit et le libellé via la combobox et ce choix apparait en rouge dans la feuille.

    Pour répondre à mortalino : Oui, la date, l'intitulé, le débit, le crédit et le libellé sélectionner doit apparaitre en rouge dans la feuille ce qui correspond à l'item selectionner via la combobox.

    y'en a t-il plusieurs ? : cela dépend de l'utilisateur. toutes les dates, l'intitulé, le débit, le crédit et le libellé qu'il aura saisie seront dans la combobox, il peut y'en avoir un seul comme 500 !!

    plage de données :cela depend du nombre de date, d'intitulé, de débit, de crédit et le dibellé entré par l'utilisateur.

    Voilà ce que j'ai fait pour ajouter les saisies de l'utilisateur dans la combobox.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub UserForm_Activate()
    Call init_tp
    Dim i As Integer
    For i = 1 To nb_dates
    ' on ajoute a la combobox la date, l'intitulé, le débit, le crédit et le libellé
        ComboBox.AddItem (debut_tableau.Offset(i - 1, 0).Value & " " & debut_tableau.Offset(i - 1, 1).Value & " " & debut_tableau.Offset(i - 1, 2).Value & " " & debut_tableau.Offset(i - 1, 3).Value & " " & debut_tableau.Offset(i - 1, 4).Value)
    Next i
    End Sub
    Il faut donc que la date, l'intitulé, le débit, le crédit et le libellé selectionné par l'utilisateur via la combobox apparaisse en rouge dans la feuille.

    Pour Pierre : Je suis d'accord avec ton code, c'est la solution mais j'ai un soucis avec "rowsource" : comment je le définis

  7. #7
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 921
    Points
    55 921
    Billets dans le blog
    131
    Par défaut
    Ton combobox est-il sur une userform ou sur une une feuille excel?

    Sélectionne le module du parent du combobox. dans la fenêtre des propriétés, tu peux sélectionner le combobox (ou cliquer dessus s'il est dans un userform) puis tu cherches la propriété Rowsouce du contrôle. La syntaxe de cette propriété correspond à la syntaxe Excel, par exemple
    Ok?
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  8. #8
    Membre régulier
    Avatar de mortalino
    Inscrit en
    Janvier 2007
    Messages
    72
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Janvier 2007
    Messages : 72
    Points : 116
    Points
    116
    Par défaut
    Et voici un exemple afin de colorier les lignes en rouge :
    (pour cet exemple, les données correspondant aux données du ComboBox se trouvent dans la colonne A)

    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
     
    Private Sub ComboBox1_Change()
        Dim i As Integer
     
    For i = 1 To DerLigne
        If Range("A" & i).Text = ComboBox1.Text Then
            Rows(i).Select
            Selection.Interior.ColorIndex = 3
        End If
    Next i
    End Sub
     
    Private Sub UserForm_Initialize()
        ComboBox1.RowSource = "Feuil1!A1:A" & DerLigne
    End Sub
     
     
    Private Function DerLigne() As Integer
        DerLigne = Columns(1).Find("", [A1], , , xlByRows, xlNext).Row - 1
    End Function
    ~Mortalino~ "Le mystérieux Chevalier : Provençal, le Gaulois"

  9. #9
    Nouveau membre du Club
    Inscrit en
    Novembre 2006
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 41
    Points : 31
    Points
    31
    Par défaut
    Mon Combobox est sur une Userform.

    Est ce que le rowsource fonctionne avec plusieurs feuilles : j'en ai 12 représentant les 12 mois de l'année.

    Les données correspondant aux données du ComboBox se trouvent dans les colonnes C, D, E, F et G.

    ça sert à quoi la fonction "Derligne" ? (Je suis debutant )

    En tout cas merci beaucoup de vous y attarder, c'est un excellent forum.

  10. #10
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 921
    Points
    55 921
    Billets dans le blog
    131
    Par défaut
    Salut Mortalino

    La dernière ligne de A peut être obtenue directement avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("a65536").End(XlUp).Row
    Car ta fonction renverra la ligne de la cellule précédant la première cellule vide de A, ce qui n'est pas toujours la dernière ligne utilisée.

    De plus, note que ton code est directement dépendant de la colonne A de ta feuille.

    Je pense qu'il est préférable de considérer le décalage à effectuer au départ de la plage source, ce qui permet de définir celle-ci dans le Initialize du formulaire, de façon indépendante au code de l'évènement combobox1_change... Ainsi, le code gagne en portabilité.

    De plus, note que ton code sélectionne la cellule dans la feuille, ce qui n'est pas toujours souhaitable. Je préfère pour ma part éviter autant que possible de modifier par code les plage et cellule actives, car cela peut dérouter l'utilisateur.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  11. #11
    Membre régulier
    Avatar de mortalino
    Inscrit en
    Janvier 2007
    Messages
    72
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Janvier 2007
    Messages : 72
    Points : 116
    Points
    116
    Par défaut
    Salut Pierre,

    oui, merci pour le code avec .End (je l'avais oublié celui-là) qui est effectivement plus rapide à l'exécution, (et plus simple, syntaxiquement parlant)

    Concernant la selection, je suis d'accord qu'il ne faut pas interférer sur la selection de l'utilisateur.

    Merci pour les conseils.
    ~Mortalino~ "Le mystérieux Chevalier : Provençal, le Gaulois"

  12. #12
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Un petit truc en plus à cette intéressante discussion :
    Eviter au maximum les "Select" qui ralentissent le code et provoquent des mouvements de feuilles si on ne connaît pas "Application.screenupdating = false" et donc, à la place de
    Rows(i).Select
    Selection.Interior.ColorIndex = 3
    lui préférer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Rows(i).Interior.ColorIndex = 3
    Je m'en vais

  13. #13
    Nouveau membre du Club
    Inscrit en
    Novembre 2006
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 41
    Points : 31
    Points
    31
    Par défaut
    Suite à vos réponse (encore merci), j'ai fait comme vous me l'aviez dit et j'ai maintenant un nouveau probléme. Il me refuse l'accés pour ajouter des données à la combobox (pour rappel , celle-ci est dans un userform). Voici le code :

    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
    Private Sub annuler_Click()
    ' on réinitialise le userform
    Unload valider
    End Sub
     
    Private Sub ok_Click()
     
        Dim i As Integer
     
        For i = 0 To ComboBox.ListCount - 1
            If ComboBox.List(i) = ComboBox.Value Then
                ' Effacement des couleurs dans la zone
                Range(Range(ComboBox.RowSource), Range(ComboBox.RowSource)(ComboBox.ListCount, 5)).Interior.Color = xlAutomatic
                ' Mise de la zone en rouge
                Range(Range(ComboBox.RowSource)(i + 1), Range(ComboBox.RowSource)(i + 1, 5)).Interior.Color = vbRed
            End If
        Next i
     
    End Sub
     
    Private Sub UserForm_Activate()
    Call init_tp
    Dim i As Integer
        For i = 1 To nb_dates
    ' on ajoute a la combobox la date, l'intitulé, le débit, le crédit et le libellé
        ComboBox.AddItem (debut_tableau.Offset(i - 1, 0).Value & " " & debut_tableau.Offset(i - 1, 1).Value & " " & debut_tableau.Offset(i - 1, 2).Value & " " & debut_tableau.Offset(i - 1, 3).Value & " " & debut_tableau.Offset(i - 1, 4).Value)
        Next i
    End Sub
     
    Private Sub UserForm_Initialize()
        ComboBox.RowSource = "Janvier!c6:g65536"
    End Sub
    Je pense que j'ai un probléme avec le "rowsource", je ne sais pas le définir.
    Vu que j'ai 12 feuilles à gérer, j'avais pensé à faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Private Sub UserForm_Initialize()
        ComboBox.RowSource = "Activesheet!c6:g65536"
    mais il me dit propriété incorrect.

    Peut-on définir plusieurs feuilles pour le row source ? du genre :

    ComboBox.RowSource = "Janvier,Février,Mars,...!c6:g65536"

    Merci de m'éclairer

  14. #14
    Membre régulier
    Avatar de mortalino
    Inscrit en
    Janvier 2007
    Messages
    72
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Janvier 2007
    Messages : 72
    Points : 116
    Points
    116
    Par défaut
    Il ne faut pas mettre ActiveSheet comme ceci, sinon, il cherche une feuille portant ce nom.

    Voici comment procéder :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ComboBox.RowSource = Activesheet.Name & "!c6:g65536"
    Sinon, pour le coup de la source sur plusieurs feuilles, voici un code mais sans garantie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ComboBox.RowSource = "Janvier!c6:g65536, Février!c6:g65536"  'etc...
    ~Mortalino~ "Le mystérieux Chevalier : Provençal, le Gaulois"

  15. #15
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 921
    Points
    55 921
    Billets dans le blog
    131
    Par défaut
    Bonjour

    Activesheet n'est pas un mot "Excel", mais un mot "VBA". Or , RowSource est une propriété qui reçoit une valeur dont la syntaxe DOIT correspondre à une syntaxe de plage valide dans Excel.

    Dès lors, utilise ceci, qui inclut le nom de la feuille active dans une chaine de caractères:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ComboBox1.RowSource = "'" & ActiveSheet.Name & "'!c6:g65536"
    Dans ce code, je mets activesheet.name entre des signes ', pour éviter une erreur si la feuille active possède un nom avec espaces...

    De plus, il ne me semble pas utile d'aller jusqu'à la cellule g65536, car cela te fait une liste déroulante de 65531 lignes...

    Dès lors, je te propose d'utiliser le code suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ComboBox1.RowSource = "'" & ActiveSheet.Name & "'!c6:g" & Range("g65536").End(xlUp).Row
    Question: Es-tu certain que tu dois définir une plage reprenant les colonnes C
    à G ?

    Si tu dois reprendre uniquement les données de la colonne C jusqu'à la dernière ligne utilisée en G, tu utiliseras:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ComboBox1.RowSource = "'" & ActiveSheet.Name & "'!c6:c" & Range("g65536").End(xlUp).Row
    Ok?
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  16. #16
    Nouveau membre du Club
    Inscrit en
    Novembre 2006
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 41
    Points : 31
    Points
    31
    Par défaut
    Effectivement je dois reprendre uniquement les données de la colonne C jusqu'à la dernière ligne utilisée en G. Lorsque j'applique ton code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ComboBox1.RowSource = "'" & ActiveSheet.Name & "'!c6:c" & Range("g65536").End(xlUp).Row
    il me met une erreur "Accés refusé" et pointe vers cette ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ComboBox.AddItem (debut_tableau.Offset(i - 1, 0).Value & " " & debut_tableau.Offset(i - 1, 1).Value & " " & debut_tableau.Offset(i - 1, 2).Value & " " & debut_tableau.Offset(i - 1, 3).Value & " " & debut_tableau.Offset(i - 1, 4).Value)
    et refuse donc de faire la commande

    PS: ça fait la même chose avec l'autre code proposé.

  17. #17
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 921
    Points
    55 921
    Billets dans le blog
    131
    Par défaut
    Ce n'est pas mon code qui pose problème , mais le fait que tu tentes d'ajouter une ligne à un combobox basé sur une plage de données.

    Soit tu ajoutes chaque item à la main, et dans ce cas la propriété RowSource ne doit pas être définie

    Soit tu définis une propriété Rowsource, mais alors tu ne peux pas ajouter des items par la suite.

    Je ne comprends pas pourquoi tu veux ajouter des items si tu bases ton combobox sur une plage.

    Peux-tu expliquer ce que tu souhaites réaliser?
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  18. #18
    Nouveau membre du Club
    Inscrit en
    Novembre 2006
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 41
    Points : 31
    Points
    31
    Par défaut
    ok, je vais tout reprendre depuis le début.

    Je dois réaliser un userform "Fonction Valider" dans lequel il y'aura un combobox et deux boutons "Valider" et "Annuler".
    Lorsque je saisie une donnée(via un autre userform) celle-ci doit apparaitre dans la combobox de "Fonction Valider".
    Ensuite dans l'userform "Fonction Valider", je choisis dans la combobox (qui me propose donc ce que j'ai saisie auparavant) la ligne que je veux mettre en rouge.
    Je clique sur le bouton "Valider" et hop la ligne selectionner via la combobox devient rouge dans la feuille concerné.
    Car il y a 12 feuilles, pour appeller mes macro je le fait grâce à une barre d'outil personnalisé.
    En ce qui concerne la donnée, il s'agit en fait d'entrer une date (colonne C), un intitulé (colonne D), un débit(colonne E), un crédit (colonne F) et un libellé(colonne G). (5 colonnes donc)
    On ne sait pas par avance la longueur de la plage de donnée, car on peut très bien saisir une seule date.... comme une centaine !!!

    Voilà, j'ai fait du mieux que j'ai pu pour expliquer. Ceci est mon 1er TP, je n'ai jamais fait de VBA avant, je le pratique depuis fin novembre donc merci de votre compréhension.

    PS: Si vous désirez voir ce TP, je peux vous le fournir sans probléme, ce serait peut etre plus évident à comprendre pour vous.

    Merci encore.

  19. #19
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 921
    Points
    55 921
    Billets dans le blog
    131
    Par défaut
    Comme c'est un TP, je vais te mettre sur la voie, mais il faudra que tu travailles... ( ou bien , c'est selon ton état d'esprit..)

    Si j'ai bien compris, tu as un premier userform pour saisir les données, avec probablement un bouton qui permet de transférer les données vers une feuille de données.
    Lorsque tu as saisis les infos, tu ouvres le deuxième userform pour sélectionner une ligne de données et la mettre en rouge.

    Au vu de tes messages, tu n'as pas de problèmes majeurs pour la saisie des données et le transfert sur une feuille.

    Dès lors, à l'ouverture du deuxième userform pour mettre la ligne en rouge, le problème réside dans la définition de la propriété rowsource du combobox.
    A priori, tu dois définir la propriété rowsource (je t'ai donné un code tout à l'heure pour la feuille active), et ton combobox se remplit automatiquement avec toutes les données préalablement saisies.

    Antérieurement, je t'avais donné un code pour déterminer comment mettre les cellules sélectionnées en rouge.

    Je pense donc que tu as maintenant tous les éléments pour réaliser ton tp. Vas-y calmement en tâchant de comprendre chaque étape à réaliser, et à relier chaque étape au code correspondant.

    Bon travail
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  20. #20
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Pierre relève que c'est un TP, je vais me limiter à t'évoquer une autre façon de procéder pour renseigner ton combo. Comme je préfère utiliser RowSource à un fastidieux additem, quand j'ajoute des données sur les lignes suivant la plage précédemment définie pour le RowSource, je redéfinis la plage avec la/les nouvelle(s) lignes et réinitialise le combo après l'avoir vidé (Combo.clear)
    Ensuite, comme je n'aime pas utiliser des syntaxes Excel dans VBA, je me contente d'utiliser la syntaxe que VBA me fournit pour désigner une plage, d'autant que tu utilises ActiveSheet.name qui n'est pas utile, puisque c'est... la feuille active. T'as pas à la désigner ^^

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        ComboBox1.Clear
        NoColDernièreLigne = 7 ' Colonne G
        NoColDonnées = 3  ' Colonne C
        DernièreLigne = Cells(1,NoColDernièreLigne).SpecialCells(xlCellTypeLastCell).Row
        maplage = Range(Cells(2, NoColDonnées), Cells(DernièreLigne, NoColDonnées)).Address 'Je ne prends pas la ligne de titre
        ComboBox1.RowSource = maplage
    Pour le principe seulement, les variables sont là pour la comprehension, tout, à part le clear, pouvant être écrit sur une seule ligne de commande
    A+ et bon courage

Discussions similaires

  1. Multi-selection dans une ComboBox ?
    Par Moloko dans le forum MFC
    Réponses: 5
    Dernier message: 07/07/2021, 17h26
  2. Selection dans une combobox
    Par Petugnia dans le forum Tkinter
    Réponses: 0
    Dernier message: 10/07/2009, 13h27
  3. [Débutant] Select dans une autre db en transact-sql
    Par vilveq dans le forum Développement
    Réponses: 5
    Dernier message: 29/10/2008, 10h58
  4. [VBA] Champs par défaut dans une comboBox
    Par titelou dans le forum Général VBA
    Réponses: 2
    Dernier message: 09/05/2007, 15h18
  5. [C#] Selection dans une comboBox
    Par ShinS16 dans le forum Windows Forms
    Réponses: 8
    Dernier message: 03/01/2006, 01h58

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