séparer termes souligné cellule vba / scinder colonne

Y compris Power BI, Power Query et toute autre question en lien avec Excel
c
cmesnier
Nouveau venu
Nouveau venu
Messages : 2
Inscrit le : 23 juin 2016
Version d'Excel : 2013 FR

Message par cmesnier » 23 juin 2016, 13:51

Bonjour,

J'aurai besoin d'aide concernant une macro que je n'arrive pas à réaliser sur mon fichier excel :
Il s'agit de scinder une colonne en 2 autres colonnes.
La colonne initiale est constituée de cellules dont une partie du texte est soulignée, l'objectif étant de séparer dans chaque cellule ce qui est souligné de ce qui ne l'est pas afin de l'envoyer par la suite dans les deux colonnes "filles".

Ci-joint un exemple illustrant le type de fichier que je manipule..
exemple.xlsx
(9.62 Kio) Téléchargé 18 fois
Merci d'avance pour votre coopération.
Avatar du membre
ThauThème
Passionné d'Excel
Passionné d'Excel
Messages : 3'506
Appréciations reçues : 137
Inscrit le : 19 octobre 2014
Version d'Excel : 2010 FR

Message par ThauThème » 23 juin 2016, 15:37

Bonjour Cmesnier, bonjour le forum,

Essaie comme ça :
Sub Macro1()
Dim O As Worksheet 'déclare la variable O (Onglet)
Dim DL As Integer 'déclare la variable DL (Dernière Ligne)
Dim I As Integer 'déclare la variable I (Incrément)
Dim J As Integer 'déclare la variable J (incrément)

Set O = Worksheets("Feuil1") 'définit l'onglet O
DL = O.Range("A" & Application.Rows.Count).End(xlUp).Row 'définit la dernière ligne éditée DL de la colonne A de l'onglet O
For I = 1 To DL 'boucle 1 : sur toutes les lignes de 1 à DL
    If O.Cells(I, 1).Value <> "" Then 'condition 1 : si la cellule ligne I colonne 1 n'est pas vide
        For J = 1 To Len(O.Cells(I, 1).Value) 'boucle 2 sur tous les caractères de la valeur de la cellule ligne I colonne 1 (=A)
            If O.Cells(I, 1).Characters(Start:=J, Length:=1).Font.Underline = xlUnderlineStyleNone Then 'condition 2 : si le Jième caractère n'est pas souligné
                O.Cells(I, 2).Value = Trim(Left(O.Cells(I, 1), J - 1)) 'renvoie dans la cellule colonne B les J-1 premiers caractères de la valeur de la cellule
                O.Cells(I, 3).Value = Trim(Mid(O.Cells(I, 1).Value, J)) 'renvoie dans la cellule colonne C les dernières caractères (à partir de J) de la valeur de la cellule
                'TRIM supprime les éventuels espaces avant et après
                Exit For 'sort de la boucle 2
            End If 'fin de la condition 2
        Next J 'prochain caratère de la boucle 2
    End If 'fin de la condition 1
Next I 'prochaine ligne de la boucle 1
MsgBox "Traitement terminé !"
End Sub
Si ta plage de données est longue ça peut prendre pas mal de temps, alors j'ai mis un message à la fin...
À plus,

ThauTheme


Je suis Charlie
VBA m'éclate, les formules m'ennuient ! Je n'y peux rien c'est comme ça...
c
cmesnier
Nouveau venu
Nouveau venu
Messages : 2
Inscrit le : 23 juin 2016
Version d'Excel : 2013 FR

Message par cmesnier » 23 juin 2016, 16:36

Un grand merci !!!!

En revanche , je n'arrive pas à comprendre pourquoi lorsque tout le texte est souligné (cela arrive dans certaines cellules), il n'y a aucun renvoi dans les colonnes filles (cellules vides)...
Avatar du membre
ThauThème
Passionné d'Excel
Passionné d'Excel
Messages : 3'506
Appréciations reçues : 137
Inscrit le : 19 octobre 2014
Version d'Excel : 2010 FR

Message par ThauThème » 23 juin 2016, 16:52

Re,

C'est logique, ma condition est : dès qu'un caractère n'est pas souligné, donc si tout est souligné, la condition n'est pas remplie.
Il faudrait envisagé 4 cas :
1 tout est souligné
2 rien n'est souligné
3 début souligné / fin non souligné
4 début non souligné / fin souligné
Mais ton exemple n'en montrait qu'un...
À plus,

ThauTheme


Je suis Charlie
VBA m'éclate, les formules m'ennuient ! Je n'y peux rien c'est comme ça...
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message