Macro qui va lire dans les commentaires

salsitawapa

XLDnaute Occasionnel
Bonjour à tous, je veux transformer ma macro XL4 en VB. Le problème est que en XL4, je disais a ma macro d'aller lire dans le commentaire et s'il voyait par exemple s.m.o. en 1ère place, alors fallait qu'il inscrive le nom dans la colonne des s.m.o. (Secours en MOntagne).
Dans les commentaires il y a inscrit au maximum tous sa (et toujours dans cet ordre en sachant que si on renseigne greg cela va s'inscrire dans eps ; plong dans canyon...) :
s.mo./plong/cmir/cmic/greg/s.d./2/2E/imp/spel/3/EPA

Je vous remercie de vos suggestions.



Ce lien n'existe plus
 

Hervé

XLDnaute Barbatruc
Re : Macro qui va lire dans les commentaires

bonjour salsitawapa

si si, on sait lire les commentaires en vba :

lit commentaire de la cellule A1 :

PHP:
With Range("a1")
    If Not .Comment Is Nothing Then MsgBox .Comment.Text
End With

par contre de là a pouvoir t'aider concernant ton fichier, y'a du chemin, chemin que tu pourrais surement éclairer en nous donnant plus d'information pratique :)

salut

85
85
 

salsitawapa

XLDnaute Occasionnel
Re : Macro qui va lire dans les commentaires

Bonjour et merci. Voila en fait j'ai un fichier excel : Ce lien n'existe plus et j'aimerai enlever la macro XL4 pour la passer en VB. Cette macro se trouve sur la feuil macro1 et colonne D.
Sur la feuille "Jour", en colonne K et N j'ai des noms avec des commentaires pour les personnes qui travaillent le jour affiché en E5.
Ces commentaires servent en faite a inscrire les noms présent en K et N dans les colonnes spécialités (que j'ai mis en jaune pour l'exemple).
En quelque sorte je veux dire si le nom en K20 contient dans le commentaire canyon, alors il faut le mettre dans la case canyon a partir de E50. Mais en même tant, je veux que le n° qu'il y a en J20 reste avec cette personne et donc s'incrive en D50. Et sa pour autant de nom (colonnes K et N) et de spécialité qui existe (CMIR, CMIC, Secours en MOntagne, Spéléo, Canyon, EPS, Conducteur EPC/FMO). Est-ce que j'ai bien expliqué ? Car je commence a m'embrouiller... Merci
 

salsitawapa

XLDnaute Occasionnel
Re : Macro qui va lire dans les commentaires

Re-Bonjour, voila j'ai essayé mais je n'arrive pas a commencer. Est-ce que quelqu'un peut m'aider ?
L'idée est que je garde mon commentaire comme je l'ai déjà c'est à dire avec tout ça au maximum :
s.mo./canyon/cmir/cmic/eps/s.d./2/2E/imp/spel/3/EPA
Ensuite, je pense que je dois créer un tableau du genre :

Dim Tab_Spécialités()
Dim X As Integer
Dim Y As Integer
Dim Fonct As Integer
Dim Fonct_L As Integer

Dim Cel As Range

Dim Var_Test As String
Dim Fonct_Nom As String
Dim Fonct_Adr As String

ReDim Tab_Spécialités(1 To 3, 0)

Sheets("Jour").Select
For X = 20 To 57
Select Case UCase(Range("K" & X))
With Range("K")
If Not .Comment Is Nothing Then MsgBox .Comment.Text
End With

Mais voila je ne sais pas si je commence bien (je pense que non puisque je ne suis pas très doué et qu'il m'a fallu énormément de temps à le faire)
Et en plus, je ne sais pas comment dire que s'il y a d'inscrit s.m.o (par exemple), qu'il le copie et qu'il le colle a l'endroit prévu.
Est-ce que je suis sur la bonne voit ou j'en suis très loin ? Merci de vos aides
 

Hervé

XLDnaute Barbatruc
Re : Macro qui va lire dans les commentaires

re

je t'ai préparé un code à compléter, juste pour te donner une piste, je ne l'ai pas testé :

ceci reste une piste de travaille

PHP:
Sub Bouton5708_QuandClic()
Dim c As Range, cellule As Range
Dim i As Byte
Dim tablosplit

'pour chaque cellule dans la plage ("K20:K28,N20:N28")
For Each c In Range("K20:K28,N20:N28")
    'si la cellule contient un commentaire
    If Not c.Comment Is Nothing Then
    'déconcatene le commentaire dans la variable tablosplit
        tablosplit = Split(c.Comment.Text, "/")
            'pour chaque élément de la variable tablosplit
        For i = 0 To UBound(tablosplit)
        'si l'élément n'est pas vide
            If tablosplit(i) <> "" Then
                'suivant la valeur de l'élément
                Select Case tablosplit(i)
                'affecte à la valeur cellule sa cellule de destination
                Case "SMO": Set cellule = Range("b50")
                Case "plong": Set cellule = Range("e41")
                Case "cmic": Set cellule = Range("b59")
                'etc....
                Exit For 'sort de la boucle
            End If
        Next i
        cellule = c 'copie la valeur de c dans la cellule de destination
    End If
Next c

End Sub

salut
 

Hervé

XLDnaute Barbatruc
Re : Macro qui va lire dans les commentaires

re

le meme code corrigé, mais loin d'etre fini :

Code:
Sub Bouton5708_QuandClic()
Dim c As Range, cellule As Range
Dim i As Byte
Dim tablosplit

'pour chaque cellule dans la plage ("K20:K28,N20:N28")
For Each c In Range("K20:K28,N20:N28")
    'si la cellule contient un commentaire
    If Not c.Comment Is Nothing Then
    'déconcatene le commentaire dans la variable tablosplit
        tablosplit = Split(c.Comment.Text, "/")
            'pour chaque élément de la variable tablosplit
        For i = 0 To UBound(tablosplit)
        'si l'élément n'est pas vide
            If Trim(tablosplit(i)) <> "" Then
                'suivant la valeur de l'élément
                Select Case tablosplit(i)
                'affecte à la valeur cellule sa cellule de destination
                Case "SMO": Set cellule = Range("b50")
                Case "plong": Set cellule = Range("e41")
                Case "cmic": Set cellule = Range("b59")
                'etc....
                
                End Select
                Exit For 'sort de la boucle
            End If
        Next i
        cellule = c 'copie la valeur de c dans la cellule de destination
    End If
Next c

End Sub

salut
 

salsitawapa

XLDnaute Occasionnel
Re : Macro qui va lire dans les commentaires

Re bonsoir, et une petite question, pour les commentaire, je dois laisser l'ordre que j'ai mis dans un message que j'ai posté un peu plus haut ou est-ce qu'il n'y a plus d'ordre ? J'ai testé, il fonctionne que pour un nom. Je regarderai sa et je te dirais. En tout cas merci de m'avoir aidé...
 
Dernière édition:

salsitawapa

XLDnaute Occasionnel
Re : Macro qui va lire dans les commentaires

Bonjour à tous, voila j'ai avancé la macro de Hervé et j'obtiens ceci :
Sub Macro_Spécialités()
Dim c As Range, cellule As Range
Dim i As Byte
Dim tablosplit

'pour chaque cellule dans la plage ("K20:K28,N20:N28,K30:K34,N30:N34,K36:K41,N36:N41,K43:K50,N43:N50,K52:K57,N52:N57")
For Each c In Range("K20:K28,N20:N28,K30:K34,N30:N34,K36:K41,N36:N41,K43:K50,N43:N50,K52:K57,N52:N57")

'si la cellule contient un commentaire
If Not c.Comment Is Nothing Then

'déconcatene le commentaire dans la variable tablosplit
tablosplit = Split(c.Comment.Text, "/")

'pour chaque élément de la variable tablosplit
For i = 0 To UBound(tablosplit)

'si l'élément n'est pas vide
If Trim(tablosplit(i)) <> "" Then
'suivant la valeur de l'élément
Select Case tablosplit(i)
'affecte à la valeur cellule sa cellule de destination
Case "SMO": Set cellule = Range("b50")
Case "canyon": Set cellule = Range("e50")
Case "cmic": Set cellule = Range("b59")
Case "cmir": Set cellule = Range("b44")
Case "speoleo": Set cellule = Range("e41")
Case "EPS": Set cellule = Range("e59")
Case "IMP": Set cellule = Range("h48")
Case "EPA": Set cellule = Range("h39")



End Select
Exit For 'sort de la boucle
End If
Next i
cellule = c 'copie la valeur de c dans la cellule de destination
End If
Next c

End Sub


Le problème est que lorsque j'exécute la macro, il me copie 1 seul nom par spécialités et juste sur les spécialités : secours en montagne, CMIC, canyon et EPS.
Pour régler le problème ou il me mets qu'un seul nom sur les spécialités, est-ce qu'il faut ajouter une fonction range ou quelque chose du même genre ? et pour les spécialités ou il ne me copie pas les noms est-ce que sa vient du fait que les noms comporte plusieurs spécialités ? Car il faut que tous les noms se mettent dans toutes leurs spécialités (même si une personne est à 4 endroit différent !). Merci de vos réponses
 

Hervé

XLDnaute Barbatruc
Re : Macro qui va lire dans les commentaires

bonjour

en piece jointe, une proposition.

n'utilise pas de cellules fusionnées, j'ai corrigé ton fichier.
attention concernant la casse dans les commentaires, en vba IMP et imp ce ne sont pas les memes choses.

il te faut compléter les cas possibles dans le select case, fait attention, tout en minuscule.

le fichier etant trop gros pour le forum, j'ai supprimé des modules.

salut
 

Pièces jointes

  • exemple-1.zip
    34.6 KB · Affichages: 38
  • exemple-1.zip
    34.6 KB · Affichages: 38
  • exemple-1.zip
    34.6 KB · Affichages: 31
Dernière édition:

salsitawapa

XLDnaute Occasionnel
Re : Macro qui va lire dans les commentaires

Salut, je te remercie sa marche super bien !!!
une petite question, est-ce qu'il faut respecter l'ordre dans les commentaires ou pas ? J'ai modifié un peu pour que avant de coller sur les spécialités, il efface les noms déjà inscrit.

voici se que sa donne :
Sub Macro_Spécialités()
Dim c As Range, cellule As Range
Dim i As Byte
Dim tablosplit

'effacement anciennes spécialités
Range("A44:B48").Select
ActiveWindow.SmallScroll Down:=6
Range("A44:B48,A50:B57,A59:E71,D41:E48,D50:E56,G39:H46,G48:H57").Select
Range("G48").Activate
ActiveWindow.SmallScroll Down:=9
Range("A44:B48,A50:B57,A59:E71,D41:E48,D50:E56,G39:H46,G48:H57,G61:H63").Select
Range("G61").Activate
Selection.ClearContents
Selection.ClearComments

En tout cas merci bcp
 

Hervé

XLDnaute Barbatruc
Re : Macro qui va lire dans les commentaires

re

non l'ordre importe pas

tu peux remplacer ton code d'effacement par celui là :

'effacement anciennes spécialités
Range("A44:B48,A50:B57,A59:E71,D41:E48,D50:E56,G39 :H46,G48:H57,G61:H63").ClearContents

salut
 

salsitawapa

XLDnaute Occasionnel
Re : Macro qui va lire dans les commentaires

Dernière petite question, a côté des noms il y a des n° en colonne J et M. Comment est-ce que je peut marquer dans la macro qu'il me le colle dans les spécialités à côté de leurs noms en colonne A, D et G ? Merci de la réponse
 

Hervé

XLDnaute Barbatruc
Re : Macro qui va lire dans les commentaires

re :)

comme ca :

extrait du code seulement
Code:
If Not cellule Is Nothing Then
                     Do
                         Set cellule = cellule.Offset(1, 0)
                     Loop Until cellule = ""
                     cellule = c
[COLOR=Red]                      cellule.Offset(0, -1) = c.Offset(0, -1)[/COLOR]
                     Set cellule = Nothing
                 End If
salut