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 :

Afficher la valeur d'une cellule dans un Textbox en fonction d'une ComboBox [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Fonctionnaire passionné
    Inscrit en
    Novembre 2014
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Fonctionnaire passionné

    Informations forums :
    Inscription : Novembre 2014
    Messages : 22
    Points : 21
    Points
    21
    Par défaut Afficher la valeur d'une cellule dans un Textbox en fonction d'une ComboBox
    Bonjour à tous,

    Je vous explique mon soucis actuelle.
    Je travaille en milieu hospitalier et je veux recréer une planification murale pour mon service.
    J'ai donc mes N° de chambre dans les cellules C10 à O10.
    Dans les cellules C2 à O2, j'ai le nom des patients.

    Dans un userform, je voudrais par un combobox choisir la chambre en question, et pour vérifier que l'on a bien choisi la bonne chambre, il affiche dans un textbox le nom du patient qui va bien.

    Ce qui marche: la combobox avec le choix des chambre
    Ce qui ne marche pas: mettre dans le textbox le nom du patient

    Voici mon 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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
     
    Option Explicit
        Dim Ws As Worksheet 'Variable pour un Objet Worksheet en PUBLIC pour tous les Controls de cet UserForm
        Dim Col As Variant
     
    Private Sub UserForm_Initialize()
    ' Supprimer l'ancien formulaire
        UserForm4.Hide
     
    ' Affectation de valeur à une variable
        Set Ws = Sheets("Planification")
     
    ' Initialisation des Combobox
        ComboBox1.Column = Ws.Range("C10:L10").Value
     
    ' Afficher le Nom du Patient dans la textbox
    '    TextBox1.Visible = Range(Col & "2")
    End Sub
     
    Private Sub CommandButton2_Click()
     
    ' Choix de la Colonne
        If ComboBox1.Value = "130P" Then Col = "C"
        If ComboBox1.Value = "130F" Then Col = "D"
        If ComboBox1.Value = "129P" Then Col = "E"
        If ComboBox1.Value = "129F" Then Col = "F"
        If ComboBox1.Value = "128P" Then Col = "G"
        If ComboBox1.Value = "128F" Then Col = "H"
        If ComboBox1.Value = "127P" Then Col = "I"
        If ComboBox1.Value = "127F" Then Col = "J"
        If ComboBox1.Value = "126P" Then Col = "K"
        If ComboBox1.Value = "126F" Then Col = "L"
        If ComboBox1.Value = "125P" Then Col = "M"
        If ComboBox1.Value = "125F" Then Col = "N"
        If ComboBox1.Value = "124" Then Col = "O"
     
    ' Bouton Valider
        Range(Col & "2", Col & "8").ClearContents
     
    ' Quitter le formulaire
        Unload Me
     
    ' Sauvegarde automatique
        ThisWorkbook.Save
    End Sub
     
     
    Private Sub CommandButton1_Click()
    'Correspond au programme du bouton Annuler
        Unload Me
    End Sub
    Merci pour vos retours, vos avis et vos conseils.

    Sincèrement,

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 729
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 729
    Points : 28 555
    Points
    28 555
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Tu te compliques la vie avec tous ces IF
    Tu as les noms en ligne 2 et les n° de chambre en ligne 10 donc avec la propriété ListIndex du ComboBox , il te suffit de faire une simple addition avec le n° de colonne
    Exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Option Explicit
    Dim Ws As Worksheet 'Variable pour un Objet Worksheet en PUBLIC pour tous les Controls de cet UserForm
    Private Sub ComboBox1_Click()
     TextBox1.Value = Ws.Cells(2, 3 + Me.ComboBox1.ListIndex)
    End Sub
    Private Sub UserForm_Initialize()
    ' Affectation de valeur à une variable
     Set Ws = Sheets("Planification")
    ' Initialisation des Combobox
     ComboBox1.Column = Ws.Range("C10:F10").Value
    End Sub
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 071
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 071
    Points : 9 850
    Points
    9 850
    Billets dans le blog
    5
    Par défaut
    bonjour,

    un exemple :

    - Un combobox (Combobox1)
    - Un textbox (Textbox1)
    - chambres de C10 à O10
    - patients de C2 à O10

    la procédure travail sur la feuille active, je conseille de préfixer les références de cellules avec la feuille où elles sont situées

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Private Sub ComboBox1_Change()
    With Me
        If .ComboBox1.ListIndex = -1 Then
            .TextBox1.Value = ""
        Else
            .TextBox1.Value = Cells(2, 3 + .ComboBox1.ListIndex)
        End If
    End With
    End Sub
     
     
    Private Sub UserForm_Initialize()
    Me.ComboBox1.List = Application.Transpose(Cells(10, 3).Resize(1, 13))
    End Sub

  4. #4
    Membre à l'essai
    Homme Profil pro
    Fonctionnaire passionné
    Inscrit en
    Novembre 2014
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Fonctionnaire passionné

    Informations forums :
    Inscription : Novembre 2014
    Messages : 22
    Points : 21
    Points
    21
    Par défaut
    Merci pour ces retours très rapides.

    Cela fonctionne maintenant très bien avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Private Sub ComboBox1_Click()
     TextBox1.Value = Ws.Cells(2, 3 + Me.ComboBox1.ListIndex)
    End Sub
    Peux-tu m'expliquer comment fonctionne ce code: Cells(2, 3 + Me.ComboBox1.ListIndex) pour que je comprenne sa logique et que je puisse l'adapter.

    Enfin, tous mes IF sont là pour définir la colonne dans laquelle je dois supprimer des informations (je n'ai pas trouver d'autres logiques quant à cette variable Col (pour colonne)).

    Merci à vous

  5. #5
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 729
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 729
    Points : 28 555
    Points
    28 555
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    ListIndex est une propriété de l'objet ComboBox qui renvoie le numéro d'ordre de l'élément sélectionné dans la liste (0 pour le premier). Cette valeur est égal à -1 quand rien n'a été sélectionné.
    Pour référencer une cellule, on peut indifféremment utiliser Range ou Cells donc Range("C2") ou Cells(2, 3) c'est du pareil au même et pour faire des additions, il est évident que l'on va privilégier Cells dont la syntaxe est Cells(Numéro de ligne, Numéro de colonne)
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  6. #6
    Membre à l'essai
    Homme Profil pro
    Fonctionnaire passionné
    Inscrit en
    Novembre 2014
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Fonctionnaire passionné

    Informations forums :
    Inscription : Novembre 2014
    Messages : 22
    Points : 21
    Points
    21
    Par défaut
    Ok merci, je crois avoir compris la procédure,

    Sinon, des pistes pour identifier plus facilement la colonne active (ce qui m'éviterait tous ces IF).

    Après je passe en résolu.

    Merci

  7. #7
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 729
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 729
    Points : 28 555
    Points
    28 555
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Sinon, des pistes pour identifier plus facilement la colonne active (ce qui m'éviterait tous ces IF).
    Je ne comprends toujours pas la raison de ces IF pour connaître la colonne.
    A partir du moment où la liste des chambres commence à partir de la colonne C, la propriété ListIndex te donne le n° de la colonne de la chambre sélectionnée quel que soit sont numéro. 0 = C, 1 = D, etc.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  8. #8
    Membre à l'essai
    Homme Profil pro
    Fonctionnaire passionné
    Inscrit en
    Novembre 2014
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Fonctionnaire passionné

    Informations forums :
    Inscription : Novembre 2014
    Messages : 22
    Points : 21
    Points
    21
    Par défaut
    J'ai compris le raisonnement avec listindex, il me donne un numéro de colonne.
    Or je souhaite que ma colonne soit identifiée avec une lettre pour pouvoir effectuer: Range (Col & "2", Col & "8").ClearContents
    Ce code n'est pas possible avec un numéro de colonne, ou alors avec Cells ?

  9. #9
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 071
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 071
    Points : 9 850
    Points
    9 850
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cells(2,Col).Resize(7,1).ClearContents

  10. #10
    Membre à l'essai
    Homme Profil pro
    Fonctionnaire passionné
    Inscrit en
    Novembre 2014
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Fonctionnaire passionné

    Informations forums :
    Inscription : Novembre 2014
    Messages : 22
    Points : 21
    Points
    21
    Par défaut
    Merci à vous,

    J'ai enfin compris les commande avec Cells. Vais donc pouvoir alléger mes codes.

    Merci à vous deux pour cette réactivité fort appréciable.

  11. #11
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 729
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 729
    Points : 28 555
    Points
    28 555
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Or je souhaite que ma colonne soit identifiée avec une lettre pour pouvoir effectuer: Range (Col & "2", Col & "8").ClearContents
    Ce code n'est pas possible avec un numéro de colonne, ou alors avec Cells ?
    Si tu avais dit tout de suite qu'il fallait effacer les lignes de la colonne sélectionnée

    Une autre solution avec Range et Cells

    Exemple d'effacement des lignes 2 à 10 de la colonne sélectionnée dans ComboBox1 en cliquant sur le bouton nommé CommandButton1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub CommandButton1_Click()
     With Sht
     .Range(.Cells(2, NumCol), .Cells(10, NumCol)).ClearContents
     End With
    End Sub
    Soit le code complet
    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
    Option Explicit
    Dim Sht As Worksheet, NumCol As Integer
     
    Private Sub ComboBox1_Click()
     NumCol = Me.ComboBox1.ListIndex + 3 ' ( 3 = colonne départ soit C)
     TextBox1.Value = Sht.Cells(2, NumCol)
    End Sub
     
    Private Sub CommandButton1_Click()
     With Sht
     .Range(.Cells(2, NumCol), .Cells(10, NumCol)).ClearContents
     End With
    End Sub
     
    Private Sub UserForm_Initialize()
     Set Sht = ThisWorkbook.Worksheets("Planification")
     ComboBox1.Column = Sht.Range("C10:I10").Value
    End Sub
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

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

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