Comment mettre des variables dans une macro

Résolu
robbybasch Messages postés 101 Statut Membre -  
robbybasch Messages postés 101 Statut Membre -
Bonjour Je veux récupérer des commentaires créés sur un planning de travail ou en abscisses sont les employés (une centaine) et en ordonnées les jours de l'année.
J'ai réussi à lister tous les numéros 9 du mois de janvier de M. TOTO par index etc...

Après de multiples recherches (je n'ai pas fait tout seul.. je débute) j'ai réussi à récupérer un commentaire sur une feuille par cette macro :
Private Sub Worksheet_Calculate()
If Range("L8 ") = 9 Then
Call Commentaire
End If
End Sub

Sub Commentaire()
Sheets("Activités_liste_noms").Range("M8").Value = Sheets("TAV").Range("D16").Comment.Text
End Sub
OU L8 est le code trouvé (ici 9); M8 là ou je place le commentaire; et D16 ou se trouve le commentaire.
Maintenant je voudrais que tous les commentaires trouvés par le code 9 soient publiés. Mais M8 donne M8+1; M8+2 etc.. pour les placements et D16 fait la même chose jour après jour. Je vous présente deux tableaux : le planning et ce que je veux obtenir (pour l'instant stade recherche) :

et


Donc je voudrais que la suite de la macro aille chercher les infos dans le planning : la prochaine valeur 9 et affiche cette valeur dans la ligne 9 janvier (par ex qui est la deuxième valeur trouvé..
ai je été assez claire.
Je vous remercie de votre aide par avance.
CDL
Robby

11 réponses

  1. ccm81 Messages postés 11033 Statut Membre 2 434
     
    Bonjour

    Plutôt qu'une image, peux tu envoyer un bout de ton fichier anonymisé, mais avec la même structure que l'original,sur cjoint.com et joindre le lien obtenu à ton prochain message. N'oublies pas d'y ajouter des explications et des exemples de résultat attendu
    1) Tu vas dans https://www.cjoint.com/
    2) Tu cliques sur [Parcourir] pour sélectionner ton fichier
    3) Tu descends en bas de la page pour cliquer sur [Créer le lien Cjoint]
    4) Au bout de quelques secondes la deuxième page s'affiche, avec le lien
    en bleu souligné ; tu le sélectionnes et tu fais "Copier"
    5) Tu reviens dans ta discussion sur CCM, et dans ton message de réponse tu fais "Coller".

    Cdlmnt
    0
  2. robbybasch Messages postés 101 Statut Membre
     
    Bonjour CCM81
    Je te remercie tout d'abord de ta réponse rapide et de ta proposition. Mais je ne peux pas t'envoyer un bout de tableaux.Il y a dix feuilles dans le classeur et de nombreux TCD. Tout est lié, je change un paramètre tout change. Et il y a des données confidentielles. Ce que j'ai fait, je t'ai recopié deux écrans, le premier le planning et le deuxième la recherche de la solution. Cela fonctionne pour une journée, mais je voudrais que cela lise tous les jours ou la macro trouve le code 9.
    Planning:


    Recherche :

    Si tu prends TOTO sur le planning, il a plusieurs codes à 9 donc plusieurs commentaires qui ne sont pas adjacents. J'arrive à lire le premier et à l'inscrire dans une cellule, mais pas les autres. Je pense que c'est un problème de boucle, mais je ne sais pas faire. Après je choisirai un autre nom et afficherait les commentaires. Peux etre n'est ce pas possible.
    CDL
    Robby
    0
    1. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      Bonjour,

      Pourquoi aurait-on plus de courage que toi pour construire un fichier de travail ?
      Qui en plus sera sûrement bancal par rapport à ton besoin...
      eric
      0
    2. robbybasch Messages postés 101 Statut Membre
       
      comprends pas...
      Je suis novice en VBA et je ne connais pas les boucles. Juste une petite infos sur celleci et sur les variables me ferait progresser.
      CDL
      0
    3. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      Pas de problème : Cours VBA
      0
  3. ccm81 Messages postés 11033 Statut Membre 2 434
     
    Comme dit eric, salut l'ami, au vu de tes explications, il est quasiment impossible de reconstituer le fichier
    Un essai quand même, en reprenant ta tentative, non testé bien sûr
    Private Sub Worksheet_Calculate()
    Dim li As Long, lideb As Long, lifin As Long, lili As Long
    lideb = 8
    lifin = 30
    lili = 8
    For li = lideb To lifin
    If Range("L" & li) = 9 Then
    Sheets("Activités_liste_noms").Range("M" & lili).Value = Sheets("TAV").Range("D16").Comment.Text
    lili = lili + 1
    End If
    Next li
    End Sub

    RQ. Je n'ai pas compris si "D16" devait évoluer

    Cdlmnt
    0
    1. robbybasch Messages postés 101 Statut Membre
       
      Bonjour CCm81
      La macro fonctionne mais me recopie le meme commentaire, alors que je veux les commentaires pour toutes les dates qui sont validées par le code 9..
      Eh oui d16 évolue, puisque c'est la ligne qui va correspondre aux dates. D17 sera le 17 janvier, d18 le 18 janvier ect. Je vais voir et travailler du coté des cells(2,3) pour référencer mes cellules. Si tu vois dans un autre sens je suis preneur. Merci quand même pour ton travail.

      Pour répondre à Eric.
      Je suis retraité et ce travail est pour une association à but non lucratif. Donc tout ce dont je fais est gratuit, normal "but non lucratif".. Donc le commentaire d'eric est un peu déplacé.. Mais hélas les associations ont de plus en plus de mal à trouver des bénévoles. Je pense que l'on est passé dans une autre ère. DOMMAGE
      Robby
      0
  4. robbybasch Messages postés 101 Statut Membre
     
    Re bonjour
    J'essaie avec cells voilà ce que cela donne :
    Private Sub Worksheet_Calculate()
    Dim counter As Long, lideb As Long, lifin As Long, lili As Long
    'lideb = 8
    'lifin = 30
    lili = 8
    For counter = 1 To 31
    If Worksheets("Activités_liste_noms").Cells(12, counter).Value = 9 Then
    Worksheets("Activités_liste_noms").Cells(13, lili).Value = Sheets("TAV").Cells(4, lili).Comment.Text

    'ancienne ligne Sheets("Activités_liste_noms").Range("M" & lili).Value = Sheets("TAV").Range("D16").Comment.Text
    lili = lili + 1
    End If
    Next counter
    End Sub
    Mais une erreur de compilation apparait à cet endroit. Il manque quelque chose avec cette formule :
    Worksheets("Activités_liste_noms").Cells(13, lili).Value = sheets("TAV").Cells(4, lili).Comment.Text
    ou cells(13, lili) est le cellule ou sera recopié le commentaire qui est avec le cellule ("TAV").cells(4,lili).comment.text.
    Quelqu'un pourrait-il me corriger la syntaxe.
    Je vous remercie par avance.
    CDL
    Robby
    0
    1. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      Bonjour,

      une erreur de compilation
      De compilation, tu es sûr ? Quel est le message ??

      Déjà il faut t'assurer de la présence d'un commentaire, sinon erreur :
      If Not sheets("TAV").Cells(4, lili).Comment Is Nothing Then
      ' copier
      End if

      eric
      0
    2. lucien
       
       
      Bonjour Robby,

      ⚠  Tu as inversé : ce n'est pas Cells(colonne, ligne) ; c'est Cells(ligne, colonne) =>

      a) Pour If Range("L" & li) = 9 : remplace .Cells(12, counter) par .Cells(counter, 12)
      b) Pour .Range("M" & lili) : remplace .Cells(13, lili) par .Cells(lili, 13)
      c) Pour .Range("D16") : remplace .Cells(4, lili) par .Cells(lili, 4)

      Lis aussi le message d'eriiic à 15:42

      -------------------------------------------------------

      Je te propose donc ce code VBA :

      
      Option Explicit
      
      Private Sub Worksheet_Calculate()
        Dim counter As Long, lili As Long: lili = 8
        With Worksheets("Activités_liste_noms")
          For counter = 1 To 31
            If .Cells(counter, 12) = 9 Then
              If Not Worksheets("TAV").Cells(lili, 4).Comment Is Nothing Then
                .Cells(lili, 13) = Worksheets("TAV").Cells(lili, 4).Comment.Text
              End If
              lili = lili + 1
            End If
          Next counter
        End With
      End Sub
      
      

      Si ton problème est réglé, n'oublie pas de passer le sujet en résolu.
       
      0
      1. robbybasch Messages postés 101 Statut Membre > lucien
         
        Bonjour Lucien
        Suis de retour, cela fonctionne presque comme je veux. J'ai juste un soucis de boucle. Mais je vais faire fonctionner mes "vieux" neurones. Là je pense pouvoir me débrouiller. Quand la solution est trouvé je passe un message. Merci à tous. Je n'y serai pas arrivé seul, me manque une partie du vocabulaire.
        CDL
        Robby
        0
    3. robbybasch Messages postés 101 Statut Membre
       
      Ca y est j'ai trouvé.. cela fonctionne... Juste un renseignement supplémentaire. Comment fais je pour lancer la macro, je ne peux pas la lancer par un bouton... Il faut que j'aille dans le texte et F5 pour que cela prenne en considération les commentaires.
      CDL
      Robby
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. ccm81 Messages postés 11033 Statut Membre 2 434
     
    Une macro peut être lancée avec un raccourci-clavier
    Pour excel 2003 > Outils/Macro/macros/Sélectionner la macro/Option et définir le raccourci-clavier
    Pour les versions ultérieures voir ici

    RQ. Il te faut changer le "nom" de ta macro actuellement attachée au re-calcul dans la feuille (Worksheet_Calculate)

    Private Sub Kommentaires()
    .....
    End Sub

    Bonne soirée
    0
  7. robbybasch Messages postés 101 Statut Membre
     
    MERCIIIII
    Robby
    0
  8. ccm81 Messages postés 11033 Statut Membre 2 434
     
    De rien

    Bonne soirée
    0
  9. robbybasch Messages postés 101 Statut Membre
     
    Bonjour CCM81
    Un dernier coup de main (enfin je pense.... la suite nous le dira.
    Si je veux récupérer deux variables dans ma feuille commentaire comment dois je m'y prendre. (Ces deux variables vont me permettre de définir mes colonnes dans les boucles) Si je clique sur le bouton 1 cela m'envoie le contenu des variables de la colonne 3 dans ma macro, si je clique sur le bouton 2 le contenu des variables de la colonne 5.
    Est ce possible ?
    Ainsi voir la macro :
    Private Sub Kommentaire()

    Dim counter As Long, lili As Long, Col_commentaire As Long, Col_TAV
    lili = 7
    Col_commentaire = 3 'a recupérer dans feuille commentaires
    Col_TAV = 4 'a récupérer dans feuille commentaire


    With Worksheets("commentaires")
    For counter = 1 To 31

    If .Cells(counter, Col_commentaire) = 9 Then
    If Not Worksheets("TAV").Cells(lili, Col_TAV).Comment Is Nothing Then
    .Cells(counter, Col_commentaire + 1) = Worksheets("TAV").Cells(lili, Col_TAV).Comment.Text
    End If

    End If
    lili = lili + 1
    Next counter
    End With
    End Sub

    Ces deux variables sont ici :


    Merci par avance
    0
  10. ccm81 Messages postés 11033 Statut Membre 2 434
     
    Bonjour

    Toujours pas très clair, je tente quand même avec ce que j'ai compris !
    Tu peux te passer de bouton, et demander au moment de l'exécution quelle colonne tu veux traiter via un inputbox et pour être sûr d'obtenir une bonne colonne, redemander jusqu'à obtenir une réponse satisfaisante (ici 3 ou 5)
    Le bout de code à mettre en début de ta procédure Kommentaire
    à toi ensuite de voir ce que tu veux faire de la variable co
    Private Sub Kommentaire()
    Dim counter As Long, lili As Long, Col_commentaire As Long, Col_TAV
    Dim co As Long
    Do
    co = Val(InputBox("colonne à traiter 3 ou 5", , "3"))
    Loop Until co = 3 Or co = 5
    ...
    End Sub

    Cdlmnt
    0
    1. robbybasch Messages postés 101 Statut Membre
       
      merci ccm81. J'essaie cela et te tiens au courant
      CDL
      Robby
      0
    2. robbybasch Messages postés 101 Statut Membre
       
      Bon et bien cela est parfait.Merci Ccm81. J'ai réussi à integrer mes variables avec tes indications. Le seul point que je n'arrive pas est de lancer la macro par un bouton. Pourtant j'ai noté comme tu me l'as indiqué 'private sub Kommentaire", mais pour l'affectation je ne la trouve pas dans les macros.
      Merci encore de ton aide.
      J'avance un peu dans le vocabulaire et je note au fur et à mesure. Peut etre un jour je ferai cela sans aide..
      CDL
      Robby
      (les neurones sont au rouge)
      0
    3. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      Bonjour,

      il faut enlever Private pour qu'elle soit visible depuis le classeur.
      Ca doit être un reste du Private Sub Worksheet_Calculate() du début.
      eric
      0
  11. robbybasch Messages postés 101 Statut Membre
     
    Bonjour
    Je l'avais fait et la macro ne fonctionnait plus. Je viens de faire ce que tu m'as indiqué et cela fonctionne.. Comprends pas... Mais l'essentiel est que je suis arrivé accompagné de votre aide à ce que je voulais. Merci encore à tous.
    CDL
    Robby
    0
  12. robbybasch Messages postés 101 Statut Membre
     
    Bonjour à tous.
    Je reviens vers vous pour fignoler ma feuille qui fonctionne super bien avec votre aide. d'ailleurs plusieurs personnes m'ont demandé comment j'avais fait et leur ai répondu "comment ca marche"... je m'égare...
    Bref dans la macro à un moment donné, est écrit ".Comment Is Nothing ", s'il ne trouve rien il va à l’occurrence suivante enfin c'est que j'ai compris. J'ai essayé plusieurs trucs mais choux blanc, je voudrais que lorsqu'il trouve une cellule vide (sans texte), soit noté "Pas de commentaire". Une idée ?
    Merci par avance
    CDL
    Robby
    0
    1. lucien
       
       
      Bonjour Robby,

      La ligne VBA complète était celle-ci :

        If Not Worksheets("TAV").Cells(lili, 4).Comment Is Nothing Then
      

      La cellule concernée est celle de la feuille "TAV", ligne lili, colonne D ;
      je l'appelle cellX juste pour simplifier.

      « If cellX.Comment Is Nothing Then » signifie : si la cellule cellX n'a pas
      de commentaire, alors (car Nothing = Rien) ; mais attention, avec Not,
      c'est l'inverse : Not ... Is Nothing = pas ... est rien => signification :
      si la cellule cellX a un commentaire, alors.

      Ce test est obligatoire car essayer de lire le commentaire d'une cellule
      qui n'en n'a pas provoque une erreur ; mais c'est quand même possible,
      heureusement, de tester la présence dudit commentaire sans que ça
      provoque une erreur.  ;)

      Je crois que ce code VBA correspond à ta demande :

      
      Option Explicit
      
      Sub Commentaires()
        Dim counter As Long, lili As Long: lili = 8
        With Worksheets("Activités_liste_noms")
          For counter = 1 To 31
            If .Cells(counter, 12) = 9 Then
              If Worksheets("TAV").Cells(lili, 4).Comment Is Nothing Then
                .Cells(lili, 13) = "Pas de commentaire en feuille TAV, D" & lili
              Else
                .Cells(lili, 13) = Worksheets("TAV").Cells(lili, 4).Comment.Text
              End If
              lili = lili + 1
            End If
          Next counter
        End With
      End Sub
      
      

      Merci de me dire si ça te convient.
       
      0
    2. robbybasch Messages postés 101 Statut Membre
       
      Bonjour Lucien. Parfaitement parfait. Avec quelques modifications qui ne touchaient pas trop à la structure mais pour adapter à mon classeur, trop bien..... Mille mercis Lucien
      CDL
      Robby
      0