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 :

Extraction des commentaires Excel


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 75
    Par défaut Extraction des commentaires Excel
    Bonjour à tous, je voudrais pouvoir extraire les commentaires Excel afin de les copier dans une cellule et qu'ils apparaissent non plus en tant que commentaires mais en format texte.

    J'ai trouvé sur votre forum des codes très intéressant, notamment un permettant d'extraire tous les commentaires vers un fichier word, ici.

    Comment pourrais-je faire la même chose, mais en copiant tous les commentaires d'une feuille sur une autre feuille du même fichier. J'essaie d'être le plus clair possible et vous remercie par avance pour votre aide, mes connaissances VBA étant plus que limitées.

  2. #2
    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
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub test()
    Set plage = Range("A1:F10")
    On Error Resume Next
        For Each Cell In plage
            MsgBox " commentaire de " & Cell.Address & " : " & Cell.Comment.Text
        Next
    On Error GoTo 0
    End Sub
    Avec ça tu obtiens le commentaire et son adresse, reste plus qu'à la placer dans l'autre feuille
    A+

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 75
    Par défaut
    Je te remercie vivement pour ta réponse si rapide. Effectivement le code marche sans problème et je récupère l'adresse dans la textbox. Mais comment puis-je copier dans l'autre feuille ? Je suis vraiment débutant en VBA, c'est pour le boulot forcément (). Est ce que je dois faire un simple paste de la msgbox ?? J'ai testé pas mal de trucs mais pas évident. Je te remercie vraiment de ton aide.

    Je vais essayer d'expliquer plus clairement le truc. J'ai une feuille avec pratiquement 100 colonnes et 120 lignes. On dira que 50% des cellules sont commentées et il faudrait que je récupère sur une autre feuille ces commentaires en format texte pour pouvoir les exploiter.

  4. #4
    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
    Par défaut
    Récupérer les commentaires n'est donc pas le problème. La question est plutôt "comment organiser ça dans l'autre feuille ?" Tu veux les placer sur les même références de cellules ou à la suite l'un de l'autre ? Dans ce cas, ligne après ligne ou à la suite dans une colonne ?
    Tu peux préciser ?
    A+

  5. #5
    Expert confirmé
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Par défaut
    Hello,

    Un autre exemple de code qui ne parcourt que la collection de commentaires :
    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
    Sub SynthComments()
    Dim cmt As Comment
    Dim rT As Range
    Dim r As Range
    Dim WKt As String
    Dim i As Long
     
    Set r = application.InputBox("Sélectionner la plage de synthèse des commentaires :", _
                        "Organisation", Selection.AddressLocal, Type:=8)
     
    Set rT = application.InputBox("Sélectionner la feuille qui contient les commentaires", _
                        "Organisation", , Type:=8)
    WKt = rT.Worksheet.Name
     
    For Each cmt In Sheets(WKt).Comments
        r.Offset(i, 0) = "Commentaire de " & cmt.Author
        r.Offset(i + 1, 0) = "Cellule : " & cmt.Parent.Address(False, False)
        r.Offset(i + 2, 0) = "Valeur : " & cmt.Parent
        r.Offset(i + 3, 0) = "Formule : " & cmt.Parent.FormulaLocal
        r.Offset(i + 4, 0) = "Texte : " & cmt.Text
        i = i + 5
    Next cmt
     
    Set r = Nothing
    Set cmt = Nothing
    Set rT = Nothing
    End Sub

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 75
    Par défaut
    Merci caféine, ce code est tout simplement génial. Je vous remercie vraiment de votre aide, vous êtes vraiment des as.
    Alors je l'ai un peu modifié parce que je n'ai besoin que du texte en fait. L'auteur, la cellule, ne m'est pas de grande utilité.

    Du coup ca donne ceci :

    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
    Sub SynthComments()
    Dim cmt As Comment
    Dim rT As Range
    Dim r As Range
    Dim WKt As String
    Dim i As Long
     
    Set r = Application.InputBox("Sélectionner la plage de synthèse des commentaires :", _
                        "Organisation", Selection.AddressLocal, Type:=8)
     
    Set rT = Application.InputBox("Sélectionner la feuille qui contient les commentaires", _
                        "Organisation", , Type:=8)
    WKt = rT.Worksheet.Name
     
    For Each cmt In Sheets(WKt).Comments
        r.Offset(i, 0) = "Texte : " & cmt.Text
        i = i + 1
    Next cmt
     
    Set r = Nothing
    Set cmt = Nothing
    Set rT = Nothing
    End Sub
    Maintenant, je te demande encore un tout petit d'aide sur la mise en forme. En fait, en faisant cette macro, les commentaires se mettent les uns a la suite des autres. Pense tu qu'avec un if tout bête il soit possible de faire en sorte que les commentaires d'une même ligne soit sur la même ligne et qu'il passe tout seul à la ligne suivante quand ca change ??
    Je te remercie vraiment de ton aide. C'est vraiment très agréable à vous d'aider les newbies comme nous. Mais ou apprenez vous donc tout ca ? lol?

  7. #7
    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
    Par défaut
    Citation Envoyé par willyol3 Voir le message
    Maintenant, je te demande encore un tout petit d'aide sur la mise en forme. En fait, en faisant cette macro, les commentaires se mettent les uns a la suite des autres. Pense tu qu'avec un if tout bête il soit possible de faire en sorte que les commentaires d'une même ligne soit sur la même ligne et qu'il passe tout seul à la ligne suivante quand ca change ??
    C'était la raison de ma question

    J'ai bien une réponse mais elle s'appliquerait à mon code, malheureusement pas au code de Cafeine.

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 75
    Par défaut
    Je suis confus Ouskelnor, je n'avais pas vu ta demande

    Je suis preneur aussi. Ton travail était très bien aussi. Mais un tout petit problème, c'est qu'il m'affiche successivement les commentaires dans une boîte de dialogue et je suis obligé de cliquer sur OK a chaque fois. Je dois avoir pas loin de 2000 commentaires sur ma page et j'avoue que le clic sur le OK risque d'etre un peu long.

    Qu'en penses-tu ?
    Si je mets

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Worksheet (Nom de la feuille) " commentaire de " & Cell.Address & " : " & Cell.Comment
    Worksheet à la place de Textbox, le problème serait résolu ? Je vous remercie en tout cas de ton aide. Et concernant la mise en place dans la feuille, ben je suis tout ouie. Je pense que ca doit être faisable avec un if en déclarant une variable ligne et colonne et tester. Si vrai il suit sur la ligne si faux, un retour. Ca peut être une idée.

  9. #9
    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
    Par défaut
    Pas de problème, si seule la liste t'avait suffi, le code de Cafeine était plus orthodoxe que le mien. Maintenant, si tu veux respecter les lignes, ce sera un peu plus compliqué. Le passage à la ligne écrite suivante ne devra se faire que si la ligne lue n'est pas vide de commentaire. Il te faudra un double compteur, un pour la ligne et un pour la colonne.
    En outre, il te faut connaître la plage de données, soit la dernière ligne et la dernière colonne de cette plage.
    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
    Option Explicit
    Sub test()
    Dim FL1 As Worksheet 'feuille lue
    Dim FL2 As Worksheet 'feuille écrite
    Dim Plage, Commentaire As String, DerCol As Integer, DerLig As Long
    Dim NoLigne As Long, NoCol As Integer, OldLine As Long
    Dim i As Long, j As Integer
        Set FL1 = Worksheets("Feuil1")
        Set FL2 = Worksheets("Feuil2")
        DerLig = FL1.Cells(Columns(1).Cells.Count, 1).End(xlUp).Row
        DerCol = FL1.Cells(1, Rows(1).Cells.Count).End(xlToLeft).Column
        NoLigne = 1
        OldLine = NoLigne
        For i = 1 To DerLig
            For j = 1 To DerCol
                On Error Resume Next
                    Commentaire = FL1.Cells(i, j).Comment.Text
                    If Err = 0 Then
                        If i > OldLine Then
                            NoCol = 0
                            NoLigne = NoLigne + 1
                        End If
                        NoCol = NoCol + 1
                        FL2.Cells(NoLigne, NoCol) = Commentaire
                        OldLine = i
                    End If
                Err.Clear
            Next j
        Next
    End Sub
    Si tu veux ajouter l'adresse de la cellule du commentaire, tu mets
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Commentaire = FL1.name & "!" & FL1.Cells(i,j).address & " : " & FL1.Cells(i, j).Comment.Text
    Voilà.

    Edit
    Une solution plus propre, sur une précision de Fred apportée dans une autre réponse
    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
    Sub test()
    Dim FL1 As Worksheet 'feuille lue
    Dim FL2 As Worksheet 'feuille écrite
    Dim Plage, Commentaire As String, DerCol As Integer, DerLig As Long
    Dim NoLigne As Long, NoCol As Integer, OldLine As Long
    Dim i As Long, j As Integer
        Set FL1 = Worksheets("Feuil1")
        Set FL2 = Worksheets("Feuil2")
        DerLig = FL1.Cells(Columns(1).Cells.Count, 1).End(xlUp).Row
        DerCol = FL1.Cells(1, Rows(1).Cells.Count).End(xlToLeft).Column
        NoLigne = 0
        OldLine = NoLigne
        For i = 1 To DerLig
            For j = 1 To DerCol
                If Not FL1.Cells(i, j).Comment Is Nothing Then
                    If i > OldLine Then
                        NoCol = 0
                        NoLigne = NoLigne + 1
                    End If
                    NoCol = NoCol + 1
                    FL2.Cells(NoLigne, NoCol) = FL1.Cells(i, j).Comment.Text
                    OldLine = i
                End If
            Next j
        Next
    End Sub
    Merci Fred

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 75
    Par défaut
    Je n'arrive pas à faire fonctionner ce code. Bizarrement, il me sort, les commentaires uniquement des deux premières colonnes, et ne respecte pas la mise en place. J'essaye de comprendre ton code mais concernant la définition des variables derlig et dercol, là je suis perdu. Dois je les définir moi même ou le code que tu as mis est censé récupérer toute ma feuille ?

    Je te remercie encore une fois de ta patience,

    Pour t'aider un peu, j'essaie de te montrer graphiquement ce que je voudrais, mais je suppose que tu as complètement compris car le code me semble pas mal.


    Encore merci,
    Cordialement

    Edit:
    Oui effectivement, j'avais cette aide de fred dans un autre sujet. J'ai essayé de l'intégrer sans succès
    Images attachées Images attachées  

  11. #11
    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
    Par défaut
    Effectivement, mon code place les commentaires à la suite, pas à leur place dans feuil1. Si j'eus su ç'eut été beaucoup plus simple
    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
    Sub test()
    Dim FL1 As Worksheet 'feuille lue
    Dim FL2 As Worksheet 'feuille écrite
    Dim DerCol As Integer, DerLig As Long
    Dim i As Long, j As Integer
        Set FL1 = Worksheets("Feuil1")
        Set FL2 = Worksheets("Feuil2")
        DerLig = FL1.Cells(Columns(1).Cells.Count, 1).End(xlUp).Row
        DerCol = FL1.Cells(1, Rows(1).Cells.Count).End(xlToLeft).Column
        For i = 1 To DerLig
            For j = 1 To DerCol
                If Not FL1.Cells(i, j).Comment Is Nothing Then
                    FL2.Cells(i, j) = FL1.Cells(i, j).Comment.Text
                End If
            Next j
        Next
    End Sub
    Mais essaie de comprendre le code
    A+

    Edit
    On peut d'ailleurs encore simplifier
    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
    Sub test2()
    Dim FL1 As Worksheet 'feuille lue
    Dim FL2 As Worksheet 'feuille écrite
    Dim Cell As Range, Adres As String
    Dim DerCol As Integer, DerLig As Long
        Set FL1 = Worksheets("Feuil1")
        Set FL2 = Worksheets("Feuil2")
        DerLig = FL1.Cells(Columns(1).Cells.Count, 1).End(xlUp).Row
        DerCol = FL1.Cells(1, Rows(1).Cells.Count).End(xlToLeft).Column
        For Each Cell In FL1.Range(Cells(1, 1).Address & ":" & Cells(DerLig, DerCol).Address)
            If Not Cell.Comment Is Nothing Then
                Adres = Cell.Address
                FL2.Range(Adres) = Cell.Comment.Text
            End If
        Next
    End Sub
    Pour dercol et derlig, la colonne 1 ni la ligne 1 ne doivent être vides. Sinon, mets les ligne et la colonne les plus longues
    Tu dis

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 75
    Par défaut
    Alors, j'ai essayé les deux codes et les deux fonctionnent correctement et correspondent à ce que j'attendais. Désolé, j'aurais du faire mon petit schéma sur Paint des le début, je t'aurais évité pas mal de travail. J'espère que tu ne m'en veux pas trop.

    J'ai cependant encore un petit problème. Le code semble fonctionner et place très correctement les commentaires de la feuille 1 exactement à la mm adresse dans la feuille 2. Seul souci, il ne fait le travail que pour les trois premières colonnes.

    Ma plage de données commence en B5 et termine et BD116. (c'est te dire l'étendue de mes commentaires, lol).

    Alors j'ai essayé de changer le code pour pouvoir insérer une plage de données en calant un bon vieux range a la suite.

    Du style :
    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
    Sub test2()
    Sub test2()
    Dim FL1 As Sheets 'feuille lue
    Dim FL2 As Sheets 'feuille écrite
    Dim Cell As Range, Adres As String
    Dim DerCol As Integer, DerLig As Long
        Set FL1 = Sheets("Feuil1").Range("B5:BD116")
        Set FL2 = Sheets("Feuil2").Range("B5:BD116")
        DerLig = FL1.Cells(Columns(1).Cells.Count, 1).End(xlUp).Row
        DerCol = FL1.Cells(1, Rows(1).Cells.Count).End(xlToLeft).Column
        For Each Cell In FL1.Range(Cells(1, 1).Address & ":" & Cells(DerLig, DerCol).Address)
            If Not Cell.Comment Is Nothing Then
                Adres = Cell.Address
                FL2.Range(Adres) = Cell.Comment.Text
            End If
        Next
    End Sub
    Mais bon, du coup, la fonction FL1Cells n'est pas reconnue.
    Et désolé mon ignorance reprend vraiment le dessus, tu me disais d'essayer de comprendre les définition de derlig et dercol, mais j'avoue etre dépasser par les évènements (non ne me déteste pas, lol). Encore merci à toi pour cette aide précieuse.

  13. #13
    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
    Par défaut
    Citation Envoyé par ouskel'n'or
    Pour dercol et derlig, la colonne 1 ni la ligne 1 ne doivent être vides. Sinon, mets les ligne et colonne les plus longues
    Si tu ne connais pas la ligne la plus longue, non plus que la colonne, utilise
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For Each Cell In FL1.Range("A1:" & Range("A1").SpecialCells(xlCellTypeLastCell).Address)
    Tu peux supprimer les deux lignes Dercol et derlig ainsi que les déclarations correspondantes
    A+

    (AlainTech va m'eng....ler )

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 75
    Par défaut
    Ca y'est, je l'ai testé, et ca marche nickel. Je te remercie vraiment de ton aide.
    De plus, j'ai testé pour pouvoir ajouter mes en-tetes de colonnes pour savoir a quoi correspondent mes commentaires et le IsNothing me le garde, donc c'est tout simplement génial.

    Merci à toi, et longue vie au site...

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

Discussions similaires

  1. Extraction des commentaires
    Par thtfr dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 20/03/2009, 16h38
  2. extraction des données de MySQL vers excel
    Par wiama dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 03/05/2007, 12h37
  3. erreur sur l'insertion des commentaires dans excel
    Par fulgaro dans le forum Excel
    Réponses: 1
    Dernier message: 19/02/2007, 09h09
  4. Réponses: 7
    Dernier message: 15/02/2007, 14h32
  5. Extraction de données sur des fichiers excel
    Par iupgeii dans le forum MFC
    Réponses: 3
    Dernier message: 23/01/2004, 14h53

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