Signaler

Comment mettre des variables dans une macro [Résolu]

Posez votre question robbybasch 86Messages postés lundi 14 juillet 2014Date d'inscription 18 juillet 2017 Dernière intervention - Dernière réponse le 12 juil. 2017 à 16:56 par robbybasch
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
Utile
+0
plus moins
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 http://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
Donnez votre avis
Utile
+0
plus moins
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
eriiic 21038Messages postés mardi 11 septembre 2007Date d'inscription ContributeurStatut 20 septembre 2017 Dernière intervention - 8 juil. 2017 à 17:35
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
Répondre
robbybasch 86Messages postés lundi 14 juillet 2014Date d'inscription 18 juillet 2017 Dernière intervention - 8 juil. 2017 à 17:44
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
Répondre
eriiic 21038Messages postés mardi 11 septembre 2007Date d'inscription ContributeurStatut 20 septembre 2017 Dernière intervention - 8 juil. 2017 à 19:55
Pas de problème : Cours VBA
Répondre
Donnez votre avis
Utile
+0
plus moins
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
robbybasch 86Messages postés lundi 14 juillet 2014Date d'inscription 18 juillet 2017 Dernière intervention - 9 juil. 2017 à 14:03
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
Répondre
Donnez votre avis
Utile
+0
plus moins
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
eriiic 21038Messages postés mardi 11 septembre 2007Date d'inscription ContributeurStatut 20 septembre 2017 Dernière intervention - 9 juil. 2017 à 15:42
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
Répondre
lucien- 9 juil. 2017 à 16:22
 
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.
 
Répondre
robbybasch 86Messages postés lundi 14 juillet 2014Date d'inscription 18 juillet 2017 Dernière intervention - 9 juil. 2017 à 18:33
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
Répondre
robbybasch 86Messages postés lundi 14 juillet 2014Date d'inscription 18 juillet 2017 Dernière intervention - 9 juil. 2017 à 19:18
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
Répondre
Donnez votre avis
Utile
+0
plus moins
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
Donnez votre avis
Utile
+0
plus moins
MERCIIIII
Robby
Donnez votre avis
Utile
+0
plus moins
De rien

Bonne soirée
Donnez votre avis
Utile
+0
plus moins
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
Donnez votre avis
Utile
+0
plus moins
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
robbybasch 86Messages postés lundi 14 juillet 2014Date d'inscription 18 juillet 2017 Dernière intervention - 10 juil. 2017 à 10:47
merci ccm81. J'essaie cela et te tiens au courant
CDL
Robby
Répondre
robbybasch 86Messages postés lundi 14 juillet 2014Date d'inscription 18 juillet 2017 Dernière intervention - 10 juil. 2017 à 12:16
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)
Répondre
eriiic 21038Messages postés mardi 11 septembre 2007Date d'inscription ContributeurStatut 20 septembre 2017 Dernière intervention - 10 juil. 2017 à 13:19
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
Répondre
Donnez votre avis
Utile
+0
plus moins
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
Donnez votre avis
Utile
+0
plus moins
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
lucien- 11 juil. 2017 à 14:52
 
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.
 
Répondre
robbybasch 86Messages postés lundi 14 juillet 2014Date d'inscription 18 juillet 2017 Dernière intervention - 12 juil. 2017 à 16:56
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
Répondre
Donnez votre avis

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !