Vba : extraire style et polices identiques

Bonjour à tous,

Voilà, je travaille sur Excel en vba.

J'ai une feuille de calcul très longue avec des textes dans des styles ou polices différents.

Je souhaite, à l'aide d'une macro, récupérer tous ces textes de styles et polices identiques et les copier vers word.

Quelqu'un aurait il une idée ?

Peut être avec .SpecialCells(xlCellTypeSameFormatConditions)

D'avance merci

6 réponses

  1. Slt,

    Voici un début de code !

    Sub LocaliseStyle()
    '
        Dim Boucle, Limite As Integer
        
        Limite = Range("A1").End(xlDown).Row
        
        For Boucle = 1 To Limite
            
            With Cells(Boucle, 1).Font
                If ((.Name = "Arial") And (.Size = 10)) Then
                    MsgBox "Boucle = " & Boucle & " -> Style et police trouvé"
                    ' Copier vers un autre feuille
                    ' ou copier directement dans word par vba
                    ' utiliser l'enregistreur de macro pour
                    ' obtenir la syntaxe des objets.
                End If
            End With
        
        Next Boucle
        
    End Sub
    
    


    Lupin
    0
    1. Génial,

      merci beaucoup.

      Mais ton code s'arrête dès qu'une ligne est vide. Quelle paramètre dois je mettre dans limite pour qu'il aille plus bas et pas forcément qu'en colonne A ?

      Désolé, mais je ne suis pas un pro du vba ;-)
      0
      1. re:

        Pour trouver la dernière ligne de la colonne A,
        celle-ci est identifé par la lettre [A] de "A1"
        Limite = Range("A1").End(xlDown).Row

        Cette ligne ne sert qui si tu ignore à quel ligne
        arrêter, et oui à la première celllule vide, il arrête.
        *******************************************************************

        Si tu veux valider les lignes de 10 à 100 indépendament
        du contenu :

        La ligne [ For Boucle = 1 To Limite ] deviendra [ For Boucle = 10 To 100 ]

        Pour valider le style sur une cellule donnée, la ligne :

        [ With Cells(Boucle, 1).Font ] défini quelle cellule !

        Cells(Boucle,1) ->>> ou Boucle représente la ligne, et 1 la colonne.

        Es-ce plus clair ainsi ?

        Lupin
        0
        1. re :

          Voilà une approche différente !

          1) Copier le code ci-dessous dans Excel
          2) Lancer la macro [CreerBouton]
          3) Sélectionner une plage contigu
          4) Lancer le nouveau bouton
          5) Sortie dans =>> "C:\Styles.doc"

          Option Explicit
          '
          'Variables globale interne du module
          Dim HWordApp As Variant
          Dim hwdApp As Variant
          Dim HCeDoc As Variant
          '
          
          Sub ExtraireStyle()
          
              'Définition de variables
              Dim Plage, Cellule As Range
              'Capture de la sélection
              Set Plage = ActiveWindow.RangeSelection
              Range("A1").Select
              'Pour chaque cellule de la plage
              Call OuvrirWord
              ActiveSheet.Select
              For Each Cellule In Plage
                  Cellule.Select
                  With Cellule.Font
                      If ((.Name = "Arial") And (.Size = 10)) Then
                          'MsgBox "Boucle = " & Boucle & " -> Style et police trouvé"
                          Cellule.Copy
                          HWordApp.Selection.Paste
                      End If
                  End With
              Next Cellule
              Application.CutCopyMode = False
              Call FermerWord
              
          End Sub
          '
          
          Function OuvrirWord()
              'Config VBS
              On Error Resume Next
              Set HWordApp = GetObject(, "Word.Application")
              If Err.Number <> 0 Then
                  Set HWordApp = CreateObject("Word.Application")
              End If
              Err.Clear ' Efface l'objet Err
              HWordApp.Visible = True
              Set HCeDoc = HWordApp.Documents.Add
              HCeDoc.Selection
          
          End Function
          '
          
          Function FermerWord()
          
              HWordApp.ActiveDocument.SaveAs ("C:\Styles.doc")
              HWordApp.Quit
              Set HCeDoc = Nothing
              Set HWordApp = Nothing
          
          End Function
          '
          
          Sub CreerBouton()
              
              Dim MonCtr As Object
              
              With Application
                .CommandBars.Add(Name:="Essai1").Visible = True
                Set MonCtr = .CommandBars("Essai1").Controls.Add(Type:=msoControlButton, ID:=2950, Before:=1)
              End With
              MonCtr.OnAction = "ExtraireStyle"
          
          End Sub
          
          


          Lupin
          0
          1. Super génial le code.

            Merci beaucoup
            0
            1. re :

              Tout le plaisirs est pour moi :-)

              J'avais déjà piloté Excel et Access depuis l'extérieur, mais
              pas Word, alors j'ai profité de la situation pour aprofondire
              le sujet.

              Voilà j'ai encore amélioré mon code :-)

              Option Explicit
              Option Private Module
              '
              'Variables globale interne du module
              Dim HWordApp As Variant
              Dim HCeDoc As Variant
              '
              
              Sub ExtraireStyle()
              
                  'Définition de variables
                  Dim Plage, Cellule As Range
                  Dim Reponse As Boolean
                  'Capture de la sélection
                  Set Plage = ActiveWindow.RangeSelection
                  Range("A1").Select
                  Reponse = OuvrirWord
                  If (Reponse) Then
                      ActiveSheet.Select
                      'Pour chaque cellule de la plage
                      For Each Cellule In Plage
                          'Sélectionne la cellule
                          Cellule.Select
                          With Cellule.Font
                              If ((.Name = "Arial") And (.Size = 10)) Then
                                  'MsgBox "Adresse de cellule = " & .Adress & " -> Style et police trouvé"
                                  'Copie le contenu dans le presse-papier
                                  Cellule.Copy
                                  'Colle dans Word
                                  HWordApp.Selection.Paste
                              End If
                          End With
                      Next Cellule
                      Application.CutCopyMode = False
                      Reponse = FermerWord
                      If (Reponse) Then
                          MsgBox "Traitement complété."
                      Else
                          MsgBox "Impossible de fermer Word."
                      End If
                  Else
                      MsgBox "Impossible d'ouvrir Word."
                  End If
                  
              End Sub
              '
              
              Function OuvrirWord() As Boolean
                  
                  'Config VBS
                  On Error Resume Next
                  Set HWordApp = GetObject(, "Word.Application")
                  If Err.Number <> 0 Then
                      Set HWordApp = CreateObject("Word.Application")
                  End If
                  Err.Clear ' Efface l'objet Err
                  HWordApp.Visible = True
                  Set HCeDoc = HWordApp.Documents.Add
                  HCeDoc.Selection
                  If (Err.Number <> 0) Then
                      OuvrirWord = True
                  Else
                      OuvrirWord = False
                  End If
              
              End Function
              '
              
              Function FermerWord() As Boolean
                  
                  On Error GoTo Err_FermerWord
                  HWordApp.ActiveDocument.SaveAs ("C:\Styles.doc")
                  HWordApp.Quit
                  Set HCeDoc = Nothing
                  Set HWordApp = Nothing
              
              Exit_FermerWord:
                  FermerWord = True
                  Exit Function
              
              Err_FermerWord:
                  FermerWord = False
              
              End Function
              '
              
              Sub CreerBouton()
                  
                  Dim MonCtr As Object
                  
                  With Application
                    .CommandBars.Add(Name:="Essai1").Visible = True
                    Set MonCtr = .CommandBars("Essai1").Controls.Add(Type:=msoControlButton, ID:=2950, Before:=1)
                  End With
                  
                  'MonCtr.OnAction = "NomDeModule.ExtraireStyle"
                  MonCtr.OnAction = "ExtraireStyle"
              
              End Sub
              
              
              0