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 :

Copie commentaire présent sur liste déroulante vers une autre feuille


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Homme Profil pro
    employé
    Inscrit en
    Février 2017
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : employé

    Informations forums :
    Inscription : Février 2017
    Messages : 15
    Points : 3
    Points
    3
    Par défaut Copie commentaire présent sur liste déroulante vers une autre feuille
    Bonjour,

    Ne connaissant pas le VBA et n'ayant pas le choix de passer par la pour faire ce qu'on me demande, je m'en remet à vous

    Je vous explique

    J'ai un document excel avec plusieurs feuilles.
    Dans la feuille "List" j'ai des cellules qui servent de Liste dans une autre feuille. Cette liste possède de commentaires. Mes données de liste sont des cellules L3 à L30
    Dans la feuille "2k17 - Year", j'ai en colonne N des cellules à remplir (déroulant) faisant appel à la list de la feuille "List" (L3 à L30)

    Je souhaiterais qu'en choississant un des éléments de la liste déroulante, il m’insère également le commentaire présente dans la "List"

    Je sais pas si je suis très explicite

    J'ai testé différents codes mais cela ne marche pas (mon niveau en VBA étant peut être aussi la cause :p )

    En tout cas merci pour votre retour

  2. #2
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Bonjour
    Quel(s) code(s) as tu testé.
    Pour être clair, sans retrousser ses manches et commencer par apprendre, tu n'aurais ici aucun de disponible pour sous-traiter ton travail.

    Par contre, tu trouvera sûrement beaucoup qui vont te guider vers TA solution.
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  3. #3
    Candidat au Club
    Homme Profil pro
    employé
    Inscrit en
    Février 2017
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : employé

    Informations forums :
    Inscription : Février 2017
    Messages : 15
    Points : 3
    Points
    3
    Par défaut
    Merci de ton retour.

    Je me doute bien mais je ne suis aps convaincu que je commence par le bon bout
    un truc plus facile est quand même mieux pour apprendre
    C'est un peu comme si je venais d'apprendre à conduire et que je faisais directement les 24h du Mans

    J'ai trouvé ce 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
    Private Sub Worksheet_Activate()
      maj
    End Sub
     
    Private Sub Worksheet_Change(ByVal Target As Range)
      maj
    End Sub
     
    Sub maj()
      For Each c In [a2:a100]
        p = Application.Match(c, Application.Index([base], , 1), 0)
        If Not IsError(p) Then
           temp = Sheets("bd").Range("base").Cells(p, 2)
           If c.comment Is Nothing Then c.AddComment
           c.comment.Text Text:=temp
           c.comment.Shape.TextFrame.AutoSize = True
         End If
      Next c
    End Sub
    Mais je ne sais trop comment l’interpréter
    J'ai modifié
    [a2:a100]
    pour correspondre à ma liste de la feuille "List" et le
    Sheets("bd")
    "List"

    Mais ne comprenant pas la logique de fonctionnement c'est vraiment pas simple

    Amicalement

  4. #4
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Citation Envoyé par Petit_Jedi Voir le message
    un truc plus facile est quand même mieux pour apprendre
    Il ne tient qu'à toi de passer par là : http://bidou.developpez.com/article/VBA/
    Comme disait Jonathan Livingstone le goéland : Avant de se lancer dans les looping, étudions le vol à l'horizontale.

    Il faut commencer par un évènement déclencheur de ta macro.
    Se sera la modification de ton choix dans la cellule où se trouve la liste déroulante.
    Pour ça, tu as besoin de la macro évènementielle WorkSheet_Change.
    https://msdn.microsoft.com/fr-fr/lib.../ff839775.aspx
    http://silkyroad.developpez.com/VBA/EvenementsFeuille/

    Tu commences par vérifier si la cellule qui l'a déclenché est bien celle où se trouve ta liste déroulante.

    Si c'est le cas, tu utilises la méthode Find pour chercher la valeur retenue (dans la cellule de la liste déroulante) dans ta liste source.
    https://msdn.microsoft.com/fr-fr/lib.../ff839746.aspx

    Si le Find ne renvoie pas Nothing, tu as la cellule correspondante.
    Tu peux donc copier le commentaire de cette cellule vers la cellule de ta liste déroulante.
    https://msdn.microsoft.com/fr-fr/lib.../ff836191.aspx
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  5. #5
    Candidat au Club
    Homme Profil pro
    employé
    Inscrit en
    Février 2017
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : employé

    Informations forums :
    Inscription : Février 2017
    Messages : 15
    Points : 3
    Points
    3
    Par défaut
    Plus précisément voila les différents éléments que j'ai récupéré (non modifié):

    sur Feuille (BD) (la mienne s'appelera (Liste))
    Sur Feuil2 (Commande) (la mienne s'appelera (2k17 - Year))
    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
    Private Sub Worksheet_Activate()
      maj
    End Sub
    Private Sub Worksheet_Change(ByVal Target As Range)
      maj
    End Sub
    Sub maj()
      For Each c In [a2:a100]
        p = Application.Match(c, Application.Index([base], , 1), 0)
        If Not IsError(p) Then
          temp = Sheets("bd").Range("base").Cells(p, 2)
          If c.comment Is Nothing Then c.AddComment
          c.comment.Text Text:=temp
          c.comment.Shape.TextFrame.AutoSize = True
        End If
      Next c
    End Sub
    sur ThisWorkbook
    et dans Module1
    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
    Option Explicit
     
    Public Sub majCommentaires()
    Dim curCell As Range, lastLineSearch As Integer, i As Integer
    ThisWorkbook.Sheets("Suivi").Columns(3).ClearComments
    Set curCell = ThisWorkbook.Sheets("Suivi").Range("C2")
    With ThisWorkbook.Sheets("Liste question")
        lastLineSearch = .Cells(.Rows.Count, 1).End(xlUp).Row
        While curCell.Value <> vbNullString
            For i = 3 To lastLineSearch
                If .Cells(i, 1).Value = curCell.Text Then
                    If curCell.comment Is Nothing Then curCell.AddComment
                    curCell.comment.Text Text:=.Cells(i, 2).Value
                End If
            Next i
            Set curCell = curCell.Offset(1, 0)
        Wend
    End With
    End Sub
    Ce qui me chagrine, c'est que dans le fichier que j'ai télécharger avec ces codes, il fait référence à des éléments tel que
    Suivi
    Liste question
    et
    base
    que je n'ai pas (j'ai regardé si un regroupement de cellules portait les noms mais rien trouvé)
    Le seul truc que je trouve faisant référence à base est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Nom de champ	
    Base	=BD!$A$3:$C$8
    qui est "en dure" et bizarrement sans caractère d’échappement pour afficher la formule

    Cordialement

  6. #6
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    On va partir pas à pas

    dans le module de ta feuille 2k17 - Year, mets ce code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub Worksheet_Change(ByVal Target As Range)
     
    If Target.Column = 14 And Target.Count = 1 Then
        MsgBx Target.value
    End If
    End Sub
    Et choisi n'importe quel item de tes listes de validation de la colonne N

    Qu'as tu comme résultat?
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  7. #7
    Candidat au Club
    Homme Profil pro
    employé
    Inscrit en
    Février 2017
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : employé

    Informations forums :
    Inscription : Février 2017
    Messages : 15
    Points : 3
    Points
    3
    Par défaut
    Merci pour ton aide (je prendrais le temps de lire les liens communiqué aussi pour mieux comprendre)

    J'ai mis ton code
    Je suis allé sur la colonne N pour sélectionner une cellule qui m'affiche le menu déroulant Je choisi un élément (par exemple "BESOIN")
    Il me place bien la valeur sélectionner dans ma cellule (BESOIN)
    Erreur de compilation: Sub ou Function non définie
    et la ligne surligné en jaune est la 1ere à savoir
    Private Sub Worksheet_Change(ByVal Target As Range)

  8. #8
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Oups

    re test ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub Worksheet_Change(ByVal Target As Range)
     
    If Target.Column = 14 And Target.Count = 1 Then
        MsgBox Target.Value
    End If
    End Sub
    A mettre dans le module de la feuille 2k17 - Year
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  9. #9
    Candidat au Club
    Homme Profil pro
    employé
    Inscrit en
    Février 2017
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : employé

    Informations forums :
    Inscription : Février 2017
    Messages : 15
    Points : 3
    Points
    3
    Par défaut
    Donc je l'ai supprimé de l'autre
    et je l'ai placé dans "Module1"
    Mon champs ce remplis avec la valeur choisi de ma liste

  10. #10
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Je parle dans le module de Ta feuille (C'était en écris en gras)
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  11. #11
    Candidat au Club
    Homme Profil pro
    employé
    Inscrit en
    Février 2017
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : employé

    Informations forums :
    Inscription : Février 2017
    Messages : 15
    Points : 3
    Points
    3
    Par défaut
    oupsss
    désolé.. à vouloir faire trop vite

    donc c'est ok
    il m'ouvre un popup avec la valeur que j'ai choisi de ma liste déroulante

  12. #12
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Donc Target contient la valeur choisie (inscrite dans l'une des cellules de la colonne N)
    Maintenant on va chercher la valeur dans la feuille List

    Remplace ton code par celui là
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim c As Range
     
    If Target.Column = 14 And Target.Count = 1 Then
        Set c = Worksheets("List").Range("L3:L30").Find(Target, LookIn:=xlValues, LookAt:=xlWhole)
        If Not c Is Nothing Then MsgBox c.Comment.Text
    End If
    End Sub
    PS. Regarde l'aide sur la méthode Range.Find
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  13. #13
    Candidat au Club
    Homme Profil pro
    employé
    Inscrit en
    Février 2017
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : employé

    Informations forums :
    Inscription : Février 2017
    Messages : 15
    Points : 3
    Points
    3
    Par défaut
    ok,
    donc la on récupère bien dans le popup la le commentaire de la cellule correspondante dans List

  14. #14
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Citation Envoyé par Petit_Jedi Voir le message
    Merci pour ton aide (je prendrais le temps de lire les liens communiqué aussi pour mieux comprendre)

    J'ai mis ton code
    Je suis allé sur la colonne N pour sélectionner une cellule qui m'affiche le menu déroulant Je choisi un élément (par exemple "BESOIN")
    Il me place bien la valeur sélectionner dans ma cellule (BESOIN)

    et la ligne surligné en jaune est la 1ere à savoir
    C'était à mon message que tu répondais ?
    Si c'est le cas, je ne vois pas de quel code tu parles.
    Les liens que j'ai donnés fournissent juste l'aide des différents éléments que j'ai évoquer avec, éventuellement, des exemples d'utilisation.
    Il ne s'agit nullement de code adapté à ton cas et à reprendre tel quel.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  15. #15
    Candidat au Club
    Homme Profil pro
    employé
    Inscrit en
    Février 2017
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : employé

    Informations forums :
    Inscription : Février 2017
    Messages : 15
    Points : 3
    Points
    3
    Par défaut
    non c'était au tout début de ton aide
    la je suis au popup qui récupère bien mon commentaire
    et en attendant ton prochain post je suis sur Range.Find pour essayer de le comprendre

  16. #16
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Il suffit d'inscrire le commentaire de la cellule trouvée dans la cellule voisine.


    Pour t'aider:
    Target est la cellule changée
    Target.offset(,1) est la cellule juste à droite

    Attention, le code est incomplet et ne gère pas le cas absence de commentaire. (que je développerai plus tard)

    PS. Tu vas vite et en attendant que tu comprennes ce que tu fais en envoyant des signes d'apprentissage et non de copiage
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  17. #17
    Candidat au Club
    Homme Profil pro
    employé
    Inscrit en
    Février 2017
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : employé

    Informations forums :
    Inscription : Février 2017
    Messages : 15
    Points : 3
    Points
    3
    Par défaut
    merci de me faire bosser un peu

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim c As Range
     
    If Target.Column = 14 And Target.Count = 1 Then
        Set c = Worksheets("List").Range("L3:L30").Find(Target, LookIn:=xlValues, LookAt:=xlWhole)
        ' If Not c Is Nothing Then MsgBox c.Comment.Text
        If Not c Is Nothing Then Target.Offset(, 1).Value = Target.Value
     
    End If
    End Sub
    Mais ce n'est pas encore mon commentaire que je met dans la colonne d'après

    La c'est mieux

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim c As Range
     
    If Target.Column = 14 And Target.Count = 1 Then
        Set c = Worksheets("List").Range("L3:L30").Find(Target, LookIn:=xlValues, LookAt:=xlWhole)
        ' If Not c Is Nothing Then MsgBox c.Comment.Text
        If Not c Is Nothing Then Target.Offset(, 1).Value = c.Comment.Text
     
     
    End If
    End Sub

  18. #18
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Brvao
    Un premier problème néanmoins

    Si tu n'as pas de commentaire dans l'une des cellules de List choisie, tu auras un bug

    Il faudra d'abord tester si un commentaire existe

    Version 2 (toujours incomplète)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim c As Range
     
    If Target.Column = 14 And Target.Count = 1 Then
        Set c = Worksheets("List").Range("L3:L30").Find(Target, LookIn:=xlValues, LookAt:=xlWhole)
        If Not c.Comment Is Nothing Then Target.Offset(, 1) = c.Comment.Text
    End If
    End Sub
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  19. #19
    Candidat au Club
    Homme Profil pro
    employé
    Inscrit en
    Février 2017
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : employé

    Informations forums :
    Inscription : Février 2017
    Messages : 15
    Points : 3
    Points
    3
    Par défaut
    Dans l'absolu j'ai toujours un commentaire.
    Cependant, je vais continuer dans ton sens pour comprendre le process
    je re avec un code...

  20. #20
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Encore il faudra tenir en compte lorsque tu efface une cellule de ta colonne N, le commentaire reste.
    Et aussi quand tu modifie plusieurs cellules à la fois (suite à un copier coller par exemple).
    Tu es sur la bonne voie quitte à analyser et faire évoluer le code
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

Discussions similaires

  1. Réponses: 16
    Dernier message: 23/06/2016, 17h17
  2. Réponses: 1
    Dernier message: 22/04/2014, 17h32
  3. [XL-2007] Liste déroulante d'une autre feuille
    Par itwgreg dans le forum Excel
    Réponses: 5
    Dernier message: 31/07/2013, 12h48
  4. Réponses: 3
    Dernier message: 24/11/2008, 15h09
  5. Griser 1 liste déroulante liée à une autre, pb de concaténat
    Par linou dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 29/03/2005, 17h45

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