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

Microsoft 365 Copie texte de word vers Excel

chax

XLDnaute Nouveau
Bonjour,
Dans Word, j'ai un texte sous le format suivant :
Titre 1 - Sous titre 1 :
- Exemple 1
- Exemple 2
- Exemple 3
Titre 2 - Sous titre 2 :
- Exemple 1
- Exemple 2
- Exemple 3

Je cherche à copier ce texte dans Excel en gardant ce format avec 1 ligne par bloc
Toutefois, j'obtiens 4 lignes par bloc (1 pour Titre x - Sous-titre x et 3 pour les exemples)

Voyez vous une méthode pour obtenir le résultat souhaité ?

Merci d'avance pour votre aide
 

crocrocro

XLDnaute Impliqué
Bonjour,
une proposition qui ne pourrait vous convenir que si vous n'avez pas un document de 200 pages.
dans Word Sélectionner le 1er bloc
dans Excel, positionnez-vous à l'intérieur de la cellule où le texte doit être copié - coller
dans Word Sélectionner le 2ème bloc
dans Excel, positionnez-vous à l'intérieur de la cellule au-dessous de la précédente - coller
 

chax

XLDnaute Nouveau
 

chax

XLDnaute Nouveau
Bonsoir
Merci pour la proposition
Oui, c'est exactement le résultat final que je recherche
Toutefois je cherche à le faire en 1 seul copié collé car il y a environ 50 blocs qui peuvent être mis à jour
Y a t'il une autre méthode ?
 

crocrocro

XLDnaute Impliqué
Mais y a t'il un moyen de le faire en 1 seul copié collé ?
oui avec du VBA.
Le principe :
Copier le tout
Coller dans la 1ère cellule
Activer une macro qui va analyser ligne par ligne,le résultat du Coller :
- identifier chaque bloc (police et taille de caractères de la ligne)
- fusionner les cellules d'un même bloc
Mais il faut évidemment connaitre la règle qui permet d'identifier un bloc
De mémoire, il s'agira du 1er caractère de la ligne
par exemple si 1er caractère est avec Police = Arial Black et Taille 12 -> Début de Bloc (et donc fin du bloc précédente.
Attention, si une ligne (non titre) débute par un caractère de police et taille de début de bloc (une mise en évidence par exemple sans passer par le styles, elle sera reconnu comme Début de bloc.


[EDIT] :
Quand j'écris fusion, ce n'est pas au sens Excel, il faut copier le contenu de la cellule n dans celui de la cellule n-1.
De plus Excel (ou moi) n'est pas très bon pour la conservation de la police de caractères dans une même cellule, donc cela sera très compliqué pour conserver les polices des cellules remontées.
Par exemple cette ligne

Il faudra donc vérifier à chaque fois, si vous n'avez rien perdu au niveau de la mise en forme sur vos 50 blocs.
Le jeu en vaut-il la chandelle ?
 
Dernière édition:

chax

XLDnaute Nouveau
Bonjour
Oui, le travail à réaliser ne vaut pas les gains que l'on peut avoir
Dans ce cas il vaut mieux le réaliser manuellement
Merci pour avoir pris le temps de regarder ce problème
 

crocrocro

XLDnaute Impliqué
Bonjour,
en pj ma solution VBA qui fonctionne de manière fiable contrairement aux réserves que j'ai faites dans mon post précédent.
C'est un peu long mais c'est un problème Excel qui même en interactif met des plombes pour changer un format.
Le principe
Après avoir copié les paragraphes depuis Word dans le Presse-Papier :
- Sélectionner la Cellule A1
- Coller (toutes les lignes Word sont collées dans la feuille avec
1 ligne Excel = 1 ligne Word
Format ligne Excel = Format Ligne Word
- Bouton Coller le contenu du Presse-Papier
-> La colonne A est copiée en colonne B avec pour règle :
si la ligne courante colonne A est une ligne de Titre (voir fonction EstTitre)
Tout le Bloc de lignes qui suit sera copié en B dans une même Cellule
en conservant le format de chaque ligne d'origine

Si la solution vous convient, pensez à mettre la discussion à Résolue.



Le Code
VB:
Sub CollerWord()
' Après avoir copié les paragraphes depuis Word dans le Press-Papier :
' - Sélectionner la Cellule A1
' - Coller (toutes les lignes Word sont collées dans la feuille avec
'       1 ligne Excel = 1 ligne Word
'       Format ligne Excel = Format Ligne Word
' - Bouton Coller le contenu du Presse-Papier
'       -> La colonne A est copiée en colonne B avec pour règle :
'       si la ligne courante colonne A est une ligne de Titre (voir fonction EstTitre)
'           Tout le Bloc de lignes qui suit sera copié en B dans une même Cellule
'                   en conservant le format de chaque ligne d'origine
'
Dim i As Integer, j As Integer, k As Integer, PosDeb As Double
Dim CelluleI As Range
Dim CelluleO As Range
Dim Derligne As Double
Dim Titre As Boolean
    Application.ScreenUpdating = False
    Derligne = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row ' colonne A
    Range("B:B").ClearContents
 
    ' Etape 1 - Copie sans mise en forme
    '-----------------------------------
    k = 0
    For i = 1 To Derligne
        Set CelluleI = Cells(i, 1)
        Titre = EstTitre(CelluleI)
        If Titre Then
            k = k + 1
        End If
        Set CelluleO = Cells(k, 2)
        If Titre Then
            CelluleO.Value = CelluleI.Value
            PosDeb = 0
        Else
            PosDeb = Len(CelluleO.Value) + 1 ' à cause du VbLf
            CelluleO.Value = CelluleO.Value & vbLf & CelluleI.Value
        End If
    Next i
    ' Etape 2 - Mise en forme
    '------------------------
    k = 0
    For i = 1 To Derligne
        Set CelluleI = Cells(i, 1)
        Titre = EstTitre(CelluleI)
        If Titre Then
            k = k + 1
        End If
        Set CelluleO = Cells(k, 2)
        If Titre Then
            PosDeb = 0
        Else
            PosDeb = PosDeb + Len(CelluleI.Offset(-1, 0).Value) + 1 ' à cause du VbLf
        End If
        For j = 1 To Len(CelluleI.Value)
            CelluleO.Characters(PosDeb + j, 1).Font.Bold = CelluleI.Characters(j, 1).Font.Bold
            CelluleO.Characters(PosDeb + j, 1).Font.Color = CelluleI.Characters(j, 1).Font.Color
            CelluleO.Characters(PosDeb + j, 1).Font.FontStyle = CelluleI.Characters(j, 1).Font.FontStyle
            CelluleO.Characters(PosDeb + j, 1).Font.Italic = CelluleI.Characters(j, 1).Font.Italic
            CelluleO.Characters(PosDeb + j, 1).Font.Underline = CelluleI.Characters(j, 1).Font.Underline
            CelluleO.Characters(PosDeb + j, 1).Font.Size = CelluleI.Characters(j, 1).Font.Size
            CelluleO.Characters(PosDeb + j, 1).Font.Name = CelluleI.Characters(j, 1).Font.Name
            CelluleO.Characters(PosDeb + j, 1).Font.Strikethrough = CelluleI.Characters(j, 1).Font.Strikethrough
            CelluleO.Characters(PosDeb + j, 1).Font.Subscript = CelluleI.Characters(j, 1).Font.Subscript
            CelluleO.Characters(PosDeb + j, 1).Font.Superscript = CelluleI.Characters(j, 1).Font.Superscript
        Next j
        CelluleO.Rows.AutoFit
    Next i
    Set CelluleI = Nothing
    Set CelluleO = Nothing
    Application.ScreenUpdating = True
End Sub
Function EstTitre(pRange As Range) As Boolean
' Si les 4 caractéristiques sont les mêmes que celles de la cellule modèle
Dim i As Integer
    EstTitre = True
    For i = 1 To Len(pRange.Value)
        If pRange.Characters(i, 1).Font.Name <> Range("MODELE_TITRE").Font.Name Or _
            pRange.Characters(i, 1).Font.Bold <> Range("MODELE_TITRE").Font.Bold Or _
            pRange.Characters(i, 1).Font.Size <> Range("MODELE_TITRE").Font.Size Or _
            pRange.Characters(i, 1).Font.Color <> Range("MODELE_TITRE").Font.Color Then
            EstTitre = False
            Exit For
        End If
    Next i
End Function
 

Pièces jointes

  • Copie Word Excel crocrocro.xlsm
    24.5 KB · Affichages: 0
Dernière édition:

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…