Feroz a une série de valeurs de texte dans la colonne A. Ces valeurs sont formatées avec deux couleurs de police différentes dans chaque cellule. (La première partie du texte est d’une couleur et la deuxième partie est d’une couleur différente.) Il aimerait diviser ces valeurs de texte en colonnes B et C, de sorte que tout ce qui a la première couleur se trouve dans la colonne B et tout ce qui a la deuxième couleur est dans la colonne C. Il note que l’outil Texte en colonnes ne gère pas cela, il se demande donc si cela peut être fait.

Oui, ça peut se faire. Une façon consiste à utiliser la fonction de remplissage Flash intégrée d’Excel. (Cet outil n’est disponible que dans Excel 2013 ou versions ultérieures.) Disons que vous commencez avec des données qui ressemblent à ceci:

(Voir la figure 1.)

image

Figure 1. Vos données multicolores.

Notez que mes données de test incluent, dans la colonne E, certaines caractéristiques des données de la colonne A. À ce stade, tout ce que vous avez à faire est de donner à Flash Fill quelque chose avec lequel il peut fonctionner. Je fais cela en séparant manuellement le texte en lignes 2 et 3, comme indiqué ici: (Voir la figure 2.)

image

Figure 2. Configuration des exemples.

Il est important que les exemples que vous créez dans B2: C3 soient exacts – ils doivent inclure tout ce qui est de n’importe quelle couleur (y compris les espaces de début ou de fin) et l’orthographe et la capitalisation doivent être correctes.

Sélectionnez maintenant la cellule B4 et appuyez sur Ctrl + E. Cela fait ressortir Flash Fill en action, et vous verrez du texte apparaître dans le reste de la colonne B. Faites la même chose dans la colonne C – sélectionnez la cellule C4 et appuyez sur Ctrl + E. Vos résultats doivent ressembler à ce qui suit: (voir figure 3.)

image

Figure 3. Après avoir utilisé Flash Fill dans les deux colonnes.

Je dois noter que votre succès avec Flash Fill dépendra, en grande partie, des caractéristiques des données de la colonne A. Il fera, dans la plupart des cas, la majorité du travail, et il peut accomplir la tâche énormément. Il peut y avoir des cas étranges dans lesquels Flash Fill ne peut pas discerner comment il doit séparer vos données. Vous pouvez le voir dans la figure précédente où les cellules A7, A9 et A11 n’ont pas été séparées correctement. Vous voudrez vérifier attentivement vos résultats pour vous assurer qu’ils ont du sens.

Si Flash Fill ne fonctionne pas pour vous, vous voudrez créer une macro pour faire le travail. Il est possible de créer une macro qui fonctionnera sur toutes les cellules de la colonne A et tirera le texte dans les colonnes B et C (comme les besoins de Feroz), mais il est plus flexible de créer une fonction définie par l’utilisateur qui retournera tout est recherché dans la cellule. Voici un exemple:

Function SplitColors(r As Range, Optional iWanted As Integer = 1) _   As String     Dim sTemp As String     Dim J As Integer     Dim K As Integer     Dim iColors(9) As Integer

sTemp = ""

If r.Cells.Count = 1 Then         For J = 1 To 9             iColors(J) = 0         Next J

' Determine where colors change         ' Remember there will always be at least one color         K = 1         iColors(K) = 1         For J = 2 To Len(r.Text)

If r.Characters(J,1).Font.Color <> _               r.Characters(J-1,1).Font.Color Then                 K = K + 1                 iColors(K) = J             End If         Next J

' Check if wanted color is less than total colors         If iWanted <= K Then             J = iColors(iWanted + 1)

If J = 0 Then J = Len(r.Text) + 1             J = J - iColors(iWanted)

sTemp = Mid(r.Text, iColors(iWanted), J)

End If     End If     SplitColors = sTemp End Function

La fonction SplitColors nécessite un paramètre (une plage sur laquelle agir)

et un deuxième paramètre facultatif (quelle couleur de la gamme vous voulez).

La fonction vérifie d’abord si une seule cellule lui a été transmise. Si tel est le cas, il détermine le nombre de couleurs dans cette cellule et les numéros de caractères où les changements de couleur se produisent. Ensuite, si la couleur souhaitée (transmise dans le deuxième paramètre facultatif) est inférieure au nombre de couleurs de la cellule, les caractères utilisant cette couleur sont renvoyés.

Ainsi, par exemple, si vous souhaitez renvoyer les cellules en utilisant la première couleur de la cellule A2, vous pouvez utiliser l’un des éléments suivants dans votre feuille de calcul:

=SplitColors(A2, 1)

=SplitColors(A2)

Le deuxième appel fonctionne car le deuxième paramètre est facultatif. Si vous ne l’incluez pas, la fonction suppose que vous souhaitez travailler avec la première couleur. Si vous souhaitez renvoyer le texte en utilisant la deuxième couleur de la cellule, alors ce qui suit fonctionnera:

=SplitColors(A2, 2)

La fonction SplitColors fonctionnera avec jusqu’à 9 couleurs dans la cellule que vous extrayez. Si vous spécifiez un deuxième paramètre de 9 ou plus, vous vous retrouverez avec une erreur.

_Note: _

Si vous souhaitez savoir comment utiliser les macros décrites sur cette page (ou sur toute autre page des sites ExcelTips), j’ai préparé une page spéciale qui comprend des informations utiles.

lien: / excelribbon-ExcelTipsMacros [Cliquez ici pour ouvrir cette page spéciale dans un nouvel onglet de navigateur].

ExcelTips est votre source pour une formation Microsoft Excel rentable.

Cette astuce (13605) s’applique à Microsoft Excel 2013, 2016, 2019 et Excel dans Office 365.