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

indiquer en vba une zone bien définie

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 !

pascal21

XLDnaute Barbatruc
Code:
Sub ListeCommentaires()
  Application.DisplayAlerts = False
  On Error Resume Next
 Sheets("Commentaires").Delete
  On Error GoTo 0
  Sheets.Add after:=Sheets(Sheets.Count)
 ActiveSheet.Name = "Commentaires"
  ligne = 2
  For s = 1 To ActiveWorkbook.Sheets.Count
    For Each c In Sheets(s).Comments
     Sheets("Commentaires").Cells(ligne, 1) = Sheets(s).Name
     Sheets("Commentaires").Cells(ligne, 2) = c.Parent.Address
     Sheets("Commentaires").Cells(ligne, 3) = c.Text
     ligne = ligne + 1
     
    Next c
  Next s
  Columns("C:C").EntireColumn.AutoFit
End Sub
bonsoir
encore un code qui tue de Mr Boisgontier et qui correspond à ce que je cherche depuis quelques jours et qui est simple d'utilisation
mais juste une petite chose
j'aimerais que çà ne lise les commentaires que dans la zone E16 EN 2000
merci
j'épère que le code n'est pas trop long à fonctionner pour une zone aussi grande
 
Re : indiquer en vba une zone bien définie

Bonsoir,
peut-être comme ceci
Code:
Sub ListeCommentaires()
Application.DisplayAlerts = False
On Error Resume Next
Sheets("Commentaires").Delete
On Error GoTo 0
Sheets.Add after:=Sheets(Sheets.Count)
ActiveSheet.Name = "Commentaires"
ligne = 2
For s = 1 To ActiveWorkbook.Sheets.Count - 1 'pas la feuille commentaires !
    If Sheets(s).Comments.Count > 0 Then
        For Each c In Sheets(s).Range("E16:EN2000")
            If Not c.Comment Is Nothing Then
                With Sheets("Commentaires")
                    .Cells(ligne, 1) = Sheets(s).Name
                    .Cells(ligne, 2) = c.Address
                    .Cells(ligne, 3) = c.Comment.Text
                    .Columns(3).EntireColumn.AutoFit
                    ligne = ligne + 1
                End With
            End If
        Next
    End If
Next
End Sub
A+
kjin
 
Re : indiquer en vba une zone bien définie

bonsoir
merci çà fonctionne à un détail près : la rapidité
si dans l'exemple de Boisgontier c'est quasi instantané, ce n'est pas le cas dans mon classeur, où il faut compter env. 2.5 sec par commentaire à copier.d'où peut venir le problème?
c'est enervant car j'avais déja trouvé un code qui pouvait convenir pour recopier mais dont la lenteur était remarquable et rendait la macro inutilisable
j'ai reduit la zone à 4 cellules pour voir ça ne change rien même pas un
Application.ScreenUpdating = False
en début de code
 
Dernière édition:
Re : indiquer en vba une zone bien définie

Bonjour à tous
VB:
Sub ListeCommentaires()
Dim ligne&, s&, c, oCom()
  With Application: .ScreenUpdating = 0: .Calculation = -4135: .EnableEvents = 0: End With
  Application.DisplayAlerts = False
  On Error Resume Next
  Sheets("Commentaires").Delete
  On Error GoTo 0
  Application.DisplayAlerts = True
  For s = 1 To ActiveWorkbook.Sheets.Count
    With Sheets(s)
      For Each c In .Comments
        If Not Intersect(c.Parent, .Range("E16:EN2000")) Is Nothing Then
          ligne = ligne + 1
          ReDim Preserve oCom(1 To 3, 1 To ligne)
          oCom(1, ligne) = .Name
          oCom(2, ligne) = c.Parent.Address
          oCom(3, ligne) = c.Text
        End If
      Next c
    End With
  Next s
  Sheets.Add after:=Sheets(Sheets.Count)
  ActiveSheet.Name = "Commentaires"
  If ligne Then
    With Columns("A:C")
    .ColumnWidth = 200
      Range("A2").Resize(ligne, 3).Value = WorksheetFunction.Transpose(oCom)
      .EntireColumn.AutoFit
    End With
  End If
  With Application: .ScreenUpdating = 1: .Calculation = -4105: .EnableEvents = 1: End With
End Sub
devrait être exploitable.​
ROGER2327
#4928


Samedi 7 Gueules 138 (Saint Gueule, abbé, SQ)
13 Pluviôse An CCXIX
2011-W05-2T03:18:22Z
 
Re : indiquer en vba une zone bien définie

Bonjour,


Code:
Sub ListeCommentairesChamp()
  Application.DisplayAlerts = False
  champ = "A1:C5"
  On Error Resume Next
  Sheets("Commentaires").Delete
  On Error GoTo 0
  Sheets.Add after:=Sheets(Sheets.Count)
  ActiveSheet.Name = "Commentaires"
  ligne = 2
  For s = 1 To ActiveWorkbook.Sheets.Count
    For Each C In Sheets(s).Comments
     If Not Intersect(Range(champ), Range(C.Parent.Address)) Is Nothing Then
       Sheets("Commentaires").Cells(ligne, 1) = Sheets(s).Name
       Sheets("Commentaires").Cells(ligne, 2) = C.Parent.Address
       Sheets("Commentaires").Cells(ligne, 3) = C.Text
       ligne = ligne + 1
      End If
    Next C
  Next s
End Sub

JB
 

Pièces jointes

Dernière édition:
Re : indiquer en vba une zone bien définie

bonjour roger boisgontier
merci roger c'est nickel
au premier essai j'ai même cru que ça n'avais pas fonctionné et que c'était des anciennes données non effacées que je lisais tellement c'était rapide
bonne journée
 
- 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
6
Affichages
737
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…