Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

macros pour trouver les celulle commenté dans une plage

  • Initiateur de la discussion Initiateur de la discussion fredh
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

fredh

XLDnaute Occasionnel
Bonsoir a tous

* Voila je cherche a tester une plage de celulle : si la plage a un contenu alors teste de la feuille suivante, si la plage ne ccntient rien alors effacement de la feuille. J'ai plusieurs classeur de "feuille 1" a "feuille 5"

* voila je chercher a trouver les celulle qui ont un commentaires dans une plage de celulle, et sur plusieurs claseur. Les classeurs peuvent varier de "feuille 1" a "feuille 5" mais ne sont pas toujours au nombre de 5 (il se peut que je n'ai que feuille 1 et feuille 2).


PS j'ai laisser mon fichier au taf je vous le mettrait en piece jointe demain.
Mais si vous avez des idées n'hesitez pas
Merci a tous
 
Re : macros pour trouver les celulle commenté dans une plage

Bonsoir fredh,

Les 2 procédures ci-dessous (à adapter) pourraient servir de base pour répondre à tes 2 questions :
Code:
[SIZE=2]Sub Question1()
[COLOR=navy]Dim [/COLOR]F[COLOR=navy] As [/COLOR]Worksheet
[COLOR=navy]Dim [/COLOR]P[COLOR=navy] As [/COLOR]Range
      [COLOR=navy]For Each[/COLOR] F[COLOR=navy] In [/COLOR]Worksheets
            [COLOR=navy]Set[/COLOR] P = F.Range("B3:H15")
            [COLOR=navy]With[/COLOR] Application
                  [COLOR=navy]If [/COLOR].CountA(P) < 1 [COLOR=navy]Then[/COLOR]
                        [COLOR=navy]If [/COLOR]Worksheets.Count > 1 [COLOR=navy]Then[/COLOR]
                              .DisplayAlerts = [COLOR=navy]False[/COLOR]
                              F.Delete
                              .DisplayAlerts = [COLOR=navy]True[/COLOR]
                        [COLOR=navy]Else[/COLOR]
                              MsgBox "Impossible de supprimer la dernière feuille"
                        [COLOR=navy]End If[/COLOR]
                  [COLOR=navy]End If[/COLOR]
            [COLOR=navy]End With[/COLOR]
      [COLOR=navy]Next[/COLOR] F
[COLOR=navy]End Sub[/COLOR]

[COLOR=navy]Sub[/COLOR] Question2()
[COLOR=navy]Dim [/COLOR]F[COLOR=navy] As [/COLOR]Worksheet
[COLOR=navy]Dim [/COLOR]P[COLOR=navy] As [/COLOR]Range, C[COLOR=navy] As [/COLOR]Range
      [COLOR=navy]For Each[/COLOR] F[COLOR=navy] In [/COLOR]Worksheets
            [COLOR=navy]On Error Resume Next[/COLOR]
            [COLOR=navy]Set[/COLOR] P = F.Range("B3:H15").SpecialCells(xlCell[COLOR=navy]Type[/COLOR]Comments)
            [COLOR=navy]On Error GoTo[/COLOR] 0
            [COLOR=navy]If Not [/COLOR]P[COLOR=navy] Is Nothing Then[/COLOR]
                  [COLOR=navy]For Each[/COLOR] C[COLOR=navy] In [/COLOR]P
                        MsgBox F.Name & vbLf & C.Address
                  [COLOR=navy]Next[/COLOR] C
            [COLOR=navy]End If[/COLOR]
      [COLOR=navy]Next[/COLOR] F
[COLOR=navy]End[/COLOR] Sub[/SIZE]
Pour les 2 questions, j'ai considéré une plage B3:H15.

Cordialement,
 
Re : macros pour trouver les celulle commenté dans une plage

salut fredh,

* Voila je cherche a tester une plage de celulle : si la plage a un contenu alors teste de la feuille suivante, si la plage ne ccntient rien alors effacement de la feuille. J'ai plusieurs classeur de "feuille 1" a "feuille 5"
Code:
Sub TestPlage()
    Dim wshFeuil    As Worksheet
    
    For Each wshFeuil In Sheets
        wshFeuil.Select
        If Application.WorksheetFunction.CountA(wshFeuil.Range("A1:D4"), "") > 1 Then
            wshFeuil.Cells.Clear
        End If
    Next
End Sub
ce code efface la feuille si la zone A14 de chaque feuille du classeur contient au moins une cellule non-vide. Parce que, je ne vois pas l'intérêt d'effacer une feuille si elle ne contient rien 😱. ou alors j'ai rien pigé à ton problème (et c'est pas exclu) 😛

Code:
Sub TestPlage()
    Dim rngCell     As Range
    Dim wshFeuil    As Worksheet
    
    For Each wshFeuil In Sheets
        For Each rngCell In wshFeuil.Range("A1:D4").Cells
            If rngCell.NoteText <> "" Then
                Debug.Print rngCell.Address, rngCell.Comment.Text
            End If
        Next
    Next
    
    Set rngCell = Nothing: Set wshFeuil = Nothing
End Sub
ce petit bout de code affiche dans la fenêtre Exécution l'adresse de chaque cellule de la plage A14 comportant un commentaire (ainsi que son contenu), et ce pour chaque feuille du classeur.

j'espère t'avoir aidé un tant soit peu...
 
Re : macros pour trouver les celulle commenté dans une plage

Rebonsoir Kobaya, mdf

je vous joint un fichier d'exemple.
Les feuille 1 a 5 sont preformater avec entete et pied de page et tous le trallala. Suivant le nombre de materielle a inserer dans les feuille j'utilise soit juste une feuille soit la feuille 1 a 3 etc...

Donc je voudrait tester la plage A5:Z58 de chaque feuille et si la plage est vide suprimer la feuille sur laquelle on fait le teste.

Si la feuille contient quelque chose j'aimerai rechercher les celulle qui ont un commentaire "car je vais proteger la feuille et toutes les celulles sauf celle qui ont un commentaire; mais dans mon fichiers maitre j'avais oublier de mettre les celulle avec commentaire en non proteger).

Voila j'espere que j'etait comprehensible sinon n'hesitez pas a poser des questions.

Bonne nuit

Edit: j'avais oublier mdf.....sorry!
 

Pièces jointes

Dernière édition:
Re : macros pour trouver les celulle commenté dans une plage

mdf (salut l'artiste !) a déjà quasiment écrit le code dont tu as besoin. le voici modifié et adapté à ta plage :
Code:
[COLOR=navy][SIZE=2]Sub TesterPlage()
      Dim F         As Worksheet
      Dim P         As Range
      Dim rngCell   As Range
     
      For Each F In Worksheets
            Set P = F.Range("A5:Z58")
            With Application
                  If .CountA(P) < 1 Then
                       ' feuille vide
                       If Worksheets.Count > 1 Then
                              .DisplayAlerts = False
                              F.Delete
                              .DisplayAlerts = True
                        Else
                              MsgBox "Impossible de supprimer la dernière feuille"
                        End If
                  Else
                       ' feuille non vide
                       For Each rngCell In P.Cells
                            If rngCell.NoteText <> "" Then
                                 Debug.Print rngCell.Address, rngCell.Comment.Text
                                 ' traitement
                            End If
                       Next
                 End If
            End With
      Next F
      
      Set P = Nothing
End Sub[/SIZE][/COLOR]
 
Re : macros pour trouver les celulle commenté dans une plage

Bonjour Kobaya, mdf , le forum

C'est du rapide. Merci

J'ai tester votre code sur NT4 et excell 97 (ca sera le systeme sur lequel mes fichiers seront traiter).
Ca a l'air de rouler. Une petite remarque le test s'effectue sur toutes les feuille presente dans le fichier, a cette etape ce n'est pas grave car les autres feuilles ont toutes un contenus dans la plage tester, de plus a une etape suivante elles seront toutes effacer sauf la feuille "Parametre" que je vais mettre en caché. Donc a la fin il ne reste plus que les feuilles "Seite 1" a "Seite 5" et la feuille "parametre" en caché.

Il ne reste plus qu'a trouver les celulle commenter dans les feuille qui reste.
Attention ces test ne doivent que s'executer sur les feuille "Seite 1" a "Seite 5".
J'avais commencer a ecrire un code avec mes faible connaisance.....
mais le code ne trouve pas les celulles commenter

Merci encore pour votre rapidité et votre efficacité.
@+

edit: j'avais oublier mdf.....sorry!
 
Dernière édition:
Re : macros pour trouver les celulle commenté dans une plage

pour tester si mes feuille "Seite 1" a "Seite 5" sont presente j'avais modifier ce code (je ne me souvient plus de l'auteur) :😕
Code:
Sub Formatage()
For Each Sh In Sheets
        If Sh.Name Like "Seite 5" Then
'                Sheets(Array("Seite 1", "Seite 2", "Seite 3", "Seite 4", "Seite 5")).Select
'                Sheets("Seite 1").Activate
            Sheets("Seite 5").Select
            ActiveSheet.Unprotect
            ActiveSheet.PageSetup.PrintArea = "$A$1:$Z$60" 'car apres avoir effacer tout les noms des champs je n'ai plus mes zones champs d'impessions
            Columns("AB:IV").Select
            Selection.EntireColumn.Hidden = True
            Rows("62:65536").Select
            Selection.EntireRow.Hidden = True
 '           ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
        End If
'         Else
        
        If Sh.Name Like "Seite 4" Then
            Sheets("Seite 4").Select
            ActiveSheet.Unprotect
            ActiveSheet.PageSetup.PrintArea = "$A$1:$Z$60"
            Columns("AB:IV").Select
            Selection.EntireColumn.Hidden = True
            Rows("62:65536").Select
            Selection.EntireRow.Hidden = True
'            ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
        End If
        
        If Sh.Name Like "Seite 3" Then
            Sheets("Seite 3").Select
            ActiveSheet.Unprotect
            ActiveSheet.PageSetup.PrintArea = "$A$1:$Z$60"
            Columns("AB:IV").Select
            Selection.EntireColumn.Hidden = True
            Rows("62:65536").Select
            Selection.EntireRow.Hidden = True
'            ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
        End If
        
        If Sh.Name Like "Seite 2" Then
            Sheets("Seite 2").Select
            ActiveSheet.Unprotect
            ActiveSheet.PageSetup.PrintArea = "$A$1:$Z$60"
            Columns("AB:IV").Select
            Selection.EntireColumn.Hidden = True
            Rows("62:65536").Select
            Selection.EntireRow.Hidden = True
 '           ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
        End If
        
        If Sh.Name Like "Seite 1" Then
            Sheets("Seite 1").Select
            ActiveSheet.Unprotect
            ActiveSheet.PageSetup.PrintArea = "$A$1:$Z$60"
            Columns("AH:IV").Select
            Selection.EntireColumn.Hidden = True
            Rows("70:65536").Select
            Selection.EntireRow.Hidden = True
  '          ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
        End If
Next Sh
 
End Sub

Comme vous voyer j'ecris les actions plusieurs fois 😱 car je ne maitrise pas encore les boucles (et le reste non plus d'ailleurs 🙄 )
 
Re : macros pour trouver les celulle commenté dans une plage

Bonsoir a tous

je ne trouve toujours pas comment tester les celulle avec du commentaire.
Le code de mdf a je pense un soucis : il me test bien la presence de commentaire dans la plage et me l'afiche dans un msgbox puis il devrait tester la feuille 2 et la feuille 3 mais m'afiche le resultat de la feuille 1:
Code:
Sub Question2()
Dim F As Worksheet
Dim P As Range, C As Range
      For Each F In Worksheets
            On Error Resume Next
            Set P = F.Range("B3:H15").SpecialCells(xlCellTypeComments)
            On Error GoTo 0
            If Not P Is Nothing Then
                  For Each C In P
                        MsgBox F.Name & vbLf & C.Address
                  Next C
            End If
      Next F
End Sub

Le code de Kobaya pour les commentaires : aucun resultat ...il tourne et ne m'affiche rien.


Est ce quelqu'un peut nous venir en aide ?
 
Re : macros pour trouver les celulle commenté dans une plage

Bonsoir fredh, Kobaya,

Effectivement, il y a une erreur, je viens de tester : la feuille 1 contenant des commentaires, la feuille 2 non... en lançant la macro, j'obtiens 2 fois les résultats de la feuille 1.

Ci-dessous une petite modification pour corriger ce problème :

Code:
[SIZE=2][COLOR=navy]Sub[/COLOR] TestCommentaires()
[COLOR=navy]Dim[/COLOR] F [COLOR=navy]As[/COLOR] Worksheet
[COLOR=navy]Dim[/COLOR] P [COLOR=navy]As[/COLOR] Range, C [COLOR=navy]As[/COLOR] Range
         [COLOR=navy]For Each[/COLOR] F [COLOR=navy]In[/COLOR] Worksheets
                  [COLOR=navy]On Error Resume Next[/COLOR]
                  [COLOR=navy]Set[/COLOR] P = F.Range("B3:H15").SpecialCells(xlCellTypeComments)
                  [COLOR=navy]On Error GoTo[/COLOR] 0
                  [COLOR=navy]If Not[/COLOR] P [COLOR=navy]Is Nothing Then[/COLOR]
                           [COLOR=navy]For Each[/COLOR] C [COLOR=navy]In[/COLOR] P
                                    MsgBox F.Name & vbLf & C.Address
                           [COLOR=navy]Next[/COLOR] C
                          [B] [COLOR=navy]Set[/COLOR] P = [COLOR=navy]Nothing[/COLOR]
[/B]                  [COLOR=navy]End If
         Next[/COLOR] F
[COLOR=navy]End Sub[/COLOR][/SIZE]
Cordialement,
 
Re : macros pour trouver les celulle commenté dans une plage

Bonsoir mdf

Ca roule maintenant sur toutes les feuilles.

Merci d'avoir suivi et resolue le post

Au plaisir de te relire et Bon Week end
 
Re : macros pour trouver les celulle commenté dans une plage

Bonsoir mDF, Kobaya, le fil

mDf je reviens a la charge parce que le code plante lorsqu'il rencontre une feuille sans aucun commentaire.
Code:
Sub TestCommentaires()
Dim P, C As Range
Dim Org_Sheet, Org_cell As String
Org_Sheet = ActiveSheet.Name [COLOR=seagreen]'pour pouvoir revenir sur la feuille du depart[/COLOR]
Org_cell = ActiveCell.Address [COLOR=seagreen]'pour pouvoir revenir sur la celulle du depart[/COLOR]
 
For Each sh In Sheets
    If sh.Visible = True Then
        sh.Select
        'Aplicationalert = False
        Set P = ActiveSheet.Range("A1:Z58").SpecialCells(xlCellTypeComments)
        On Error GoTo 0 [COLOR=red]'peut etre que le probleme se situe ici[/COLOR]
        'On Error Resume Next [COLOR=magenta]' test que j'avais fait mais ne marche pas[/COLOR]
        If Not P Is Nothing Then 
            For Each C In P
            'CreateObject("WScript.Shell").Popup ActiveSheet.Name & vbLf & C.Address, 1, "Fred"
            C.Select [COLOR=seagreen]' selection de la celulle commenter[/COLOR]
            Selection.Locked = False [COLOR=seagreen]' deprotection de la celulle commenté[/COLOR]
            Selection.FormulaHidden = False [COLOR=seagreen]' deprotection de la celulle commenté[/COLOR]
            Next C
            Set P = Nothing
        End If
    End If
Next sh
Sheets(Org_Sheet).Select [COLOR=seagreen]' appel de la feuille de depart[/COLOR]
Range(Org_cell).Select [COLOR=seagreen]' appel de la celule de depart[/COLOR]
'Aplicationalert = True
End Sub

ya un cheveu dans la soupe....

Merci du coup de main et @+
 
Re : macros pour trouver les celulle commenté dans une plage

Bonsoir fredh,

Eh bien, ce n'est plus un cheveux sur la soupe là fred, c'est la perruque toute entière ! Je crois que je t'ai déjà fait une remarque du genre dans un autre fil, j'ai franchement l'impression que ça repart dans tous les sens là !

Un conseil fredh si tu tiens vraiment à voir ton projet aboutir : moins de précipitation, un peu plus d'observation et un soupçon de réflexion te permettrait de trouver la réponse par toi-même et d'éviter ainsi une perte de temps inutile...

Je commence par l'essentiel :
  1. On Error Resume Next : à quoi sert cette instruction ?
    elle sert à gérer les erreurs, c'est à dire empêcher VBA de planter et d'interrompre une procédure en cas d'erreur.
  2. Ta macro plante à quel endroit (ligne surlignée en jaune lorsque l'erreur se déclenche) ?
    Sur la ligne : Set P = ActiveSheet.Range("A1:Z58").SpecialCells(xlCellTypeComments)
  3. Conclusion : l'instruction "On Error Resume Next" doit se trouver AVANT la ligne qui provoque le plantage si tu veux qu'elle serve à quelque chose !
    Si tu prends le temps de relire ce fil depuis le début (si, si c'est intéressant, tu verras...), cette instruction apparaît 3 fois à la bonne place, dont une fois recopiée par toi-même ! 😕
    Pour info, l'instruction "On Error Goto 0" sert à désactiver la gestion d'erreur en cours (pour revenir au mode "normal").
Je continue l'analyse (et la critique que j'espère constructive) de ton morceau de code :
  • La variable sh n'est pas déclarée : il convient de toujours déclarer TOUTES les variables. Je te conseille la lecture de l'aide VBA sur l'instruction "Option Explicit".
  • Dim P, C As Range : là, contrairement à ce que tu crois, la variable P n'est pas déclarée en tant que Range mais en tant que Variant !
    Il convient d'écrire :
    Dim P as Range, C As Range
  • Même remarque pour ta variable Org_Sheet qui devrait être As String.
  • CreateObject("WScript.Shell").Popup : que vient faire du VBScript ici ?
    La fonction "naturelle" VBA MsgBox est amplement suffisante pour obtenir le résultat souhaité :
    MsgBox ActiveSheet.Name & vbLf & C.Address, vbOKOnly, "Fred"
  • sh.Select et C.Select : la sélection d'objets pour les manipuler est inutile (et même déconseillée) en VBA ! (voir le code ci-dessous).
  • Aplicationalert : quand j'ai vu ça dans ton code la première fois, j'ai cru qu'il s'agissait d'une simple erreur de saisie... Mais quand j'ai vu que tu le remettait à nouveau à la fin alors là je dois dire que je reste perplexe... Qu'est-ce que c'est ? Je ne saurais le dire... une chose est sûre toutefois : ce n'est pas du VBA.
Pour finir, tu trouveras ci-dessous une proposition de procédure modifiée pour tenter de remplir ton objectif :
Code:
[SIZE=2][COLOR=blue]Sub[/COLOR] TestCommentaires()
[COLOR=blue]Dim[/COLOR] sh [COLOR=blue]As[/COLOR] Worksheet
[COLOR=blue]Dim[/COLOR] P [COLOR=blue]As[/COLOR] Range, C [COLOR=blue]As[/COLOR] Range
      [COLOR=blue]For Each[/COLOR] sh [COLOR=blue]In[/COLOR] Sheets
            [COLOR=blue]If[/COLOR] sh.Visible = [COLOR=blue]True Then
                  On Error Resume Next[/COLOR]      [COLOR=green]'Valide la gestion d'erreur[/COLOR]
                  [COLOR=blue]Set[/COLOR] P = sh.Range("A1:Z58").SpecialCells(xlCellTypeComments)
                  [COLOR=blue]On Error GoTo[/COLOR] 0              [COLOR=green]'Invalide la gestion d'erreur[/COLOR]
                  [COLOR=blue]If Not[/COLOR] P [COLOR=blue]Is Nothing Then
                        For Each[/COLOR] C [COLOR=blue]In[/COLOR] P
                              C.Locked = [COLOR=blue]False[/COLOR] [COLOR=green]' déprotection de la celulle commentée[/COLOR]
                              C.FormulaHidden = [COLOR=blue]False[/COLOR] [COLOR=green]' déprotection de la celulle commentée[/COLOR]
                        [COLOR=blue]Next[/COLOR] C
                        [COLOR=blue]Set[/COLOR] P = [COLOR=blue]Nothing
                  End If
            End If
      Next[/COLOR] sh
[COLOR=blue]End Sub[/COLOR][/SIZE]
Cordialement,
 
Re : macros pour trouver les celulle commenté dans une plage

Bonsoir mDf, le fil
Ne t'inquiete pas pour moi toutes les critique concernant la maniere de codé sont constructivent.

Je viens de terminer la lecture de option explicit. Je corrige toutes mes macros et dorenavant je l'utiliserai dans mes module pour eviter tout probleme.

Effectivement la variable Sh n'etait pas declarer; oubli de ma part...
J'utilisait sh.Select car les actions ne s'efectuait pas sur la feuille du for Each mais sur la feuille active avant le lancement de la macro. (peut etre erreur de declaration de la variable Sh...)

Comme tu le dit je croyais que les variable d'une ligne etait declarer avec le type de la fin de ligne. Erreur que Thierry76 ma signaler sur un autre post sur une autre macro. J'ai bien sur corriger toutes mes macro mais pas celle afficher sur ce post (j'etait en train de le faire quand madame est rentrer...)

Pour WScript.Shell j'utilisait cela pour afficher un "msgbox" qui se ferme tout seul (un genre de fenetre d'info sur ce qui se passe) apres un temp choisi contrairement a Msgbox qui lui exige une action

Aplicationalert est en remarque dans mon code, j'avais l'intention de l'utiliser pour shinter les message d'alertes provoquer par l'erreur. Mais ici comme tu me le fais remarquer il n'y a pas lieu de le faire

Comme tu l'a remarque je fait pas mal d'erreur de "jeunesse", c'est pourquoi je serait interesser par des liens d'aide en VBA. Je rapelle que j'utilise et creer mes macros sur un PC d'entreprise avec NT4/Excel97/utilisateur qui ne contient apparement pas d'aide VBA.
Si tu n'en a pas sous la mains j'irais voir sur google, mais peut etre as tu une aide toute faites.

Voila maintenat je vais me pencher sur ton code et l'apliquer au contexte.
Je ne pense pas donner d'info encore ce soir car je vais encore tirer des cables pour la commande de mes portail, mais demain je serais la

Merci encore et @+
 
Re : macros pour trouver les celulle commenté dans une plage

Rebonsoir mDf, le fil
La personne devant m'aider a tirer les cables n'etant pas encore arriver j'en profite pour tester...

mDF ton code a je pense un soucis avec les celulle qui sont fusionner
erreur '1004' imposible de definir la proprieter Locked de la classe Range
puis : ok et la il me dit imposible de modifier les celulle fusionner
ou debogage et la il s'arrete sur : C.Locked = False 'déprotection de la celulle commentée

Seulement une partie des celulle commenter a ete modifier, jusqu'a la 1er celulle commenter qui est fusionner.

Ci joint un fichier avec lequel tester la macro (deux feuille visible avec chacune des celulle commenter, une feuille cacher et sur la deuxime feuille des celulle commenter fusionner). Attention il y a des celulle commenter en dehors du Range (A1:Z58").

Merci et @+
 

Pièces jointes

Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
3
Affichages
879
A
Réponses
6
Affichages
923
Ananda
A
A
Réponses
1
Affichages
1 K
Astragor
A
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…