Isoler un texte dans une cellule et le mettre à la ligne
Bonjour
Mon fichier comprends 3 colonnes A B C avec 3 infos comme suit :
17060519 7803313 17060519
Sachant que la conne C reprend la colonne A. Sauf que parfois, dans cette colonne C je peux trouver ceci :
17060518 7803314 17060518/17061385
La macro que je cherche permettra d'isoler ce qui suit le " / " (toujours 8 caractères) et de le mettre à la ligne d'en dessous ( en insérant un nouvelle ligne ) . puis de répéter (copie colle) le numéro présent dans la colonne B du dessus . et enfin supprimer la colonne C. Soit le résultat suivant :
17060518 7803314
17061385 7803314
Merci pour votre aide à tous
bonne journée
Bonjour Benjy, 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 (Derniere ligne)
Dim V1 As String 'déclare la variable V1 (Valeur 1)
Dim V2 As String 'déclare la variable V2 (Valeur 2)
Set O = Worksheets("Test") 'définit l'onglet O (a adapter à ton cas)
DL = O.Cells(Application.Rows.Count, "C").End(xlUp).Row 'définit la dernière ligne éditée DL de la colonne C de l'onglet O
For I = DL To 2 Step -1 'boucle inversée sur toutes les lignes, de DL à 2
If InStr(1, O.Cells(I, "C"), "/", vbTextCompare) > 0 Then 'condition : si la cellule ligne DL colonne C contient le symbole "/"
V1 = Split(O.Cells(I, "C").Value, "/")(0) 'définit la variable V1
V2 = Split(O.Cells(I, "C").Value, "/")(1) 'définit la variable V2
O.Rows(I + 1).Insert 'insère une ligne en-dessous
O.Cells(I, "C").Value = V1 'renvoie V1 dans la cellule ligne I colonne C
O.Cells(I + 1, "A") = V2 'renvoie V2 dans la cellule ligne I+1 colonne A
O.Cells(I + 1, "B") = O.Cells(I, "B") 'récupere dans la cellule I+1 colonne B la valeur de la cellule I colonne B
End If 'fin de la condition
Next I 'prochaine ligne de la boucle
O.Columns(3).Delete 'supprime la colonne C
End SubMerci ThauThème c'est parfait
est ce possible d’ajouter en amont la création d'un nouvel onglet dans lequel cette macro s’exécuterait pour donner ton résultat ?
ainsi je ne perds pas mon information initiale.
merci d'avance
Re,
Alors ça donnerait ça :
Sub Macro1()
Dim OO As Worksheet 'déclare la variable OO (Onglet Original)
Dim OC As Worksheet 'déclare la variable OC (Onglet Copie)
Dim DL As Integer 'déclare la variable DL (Derniere ligne)
Dim V1 As String 'déclare la variable V1 (Valeur 1)
Dim V2 As String 'déclare la variable V2 (Valeur 2)
Set OO = Worksheets("Test") 'définit l'onglet OO (a adapter à ton cas)
OO.Copy After:=OO 'copie l'onglet OO après lui-même
Set OC = ActiveSheet 'définit l'onglet copié OC
DL = OC.Cells(Application.Rows.Count, "C").End(xlUp).Row 'définit la dernière ligne éditée DL de la colonne C de l'onglet OC
For I = DL To 2 Step -1 'boucle inversée sur toutes les lignes, de DL à 2
If InStr(1, OC.Cells(I, "C"), "/", vbTextCompare) > 0 Then 'condition : si la cellule ligne DL colonne C contient le symbole "/"
V1 = Split(OC.Cells(I, "C").Value, "/")(0) 'définit la variable V1
V2 = Split(OC.Cells(I, "C").Value, "/")(1) 'définit la variable V2
OC.Rows(I + 1).Insert 'insère une ligne en-dessous
OC.Cells(I, "C").Value = V1 'renvoie V1 dans la cellule ligne I colonne C
OC.Cells(I + 1, "A") = V2 'renvoie V2 dans la cellule ligne I+1 colonne A
OC.Cells(I + 1, "B") = OC.Cells(I, "B") 'récupere dans la cellule I+1 colonne B la valeur de la cellule I colonne B
End If 'fin de la condition
Next I 'prochaine ligne de la boucle
OC.Columns(3).Delete 'supprime la colonne C
End Subc'est top
et je suis dessolé de te poser cela après coup mais je me rends compte finalement qu'il peut y avoir des lignes ou je vais trouver plus de deux numéros séparés par un " / " cela donne :
17060518 7803314 17060518/17061385/17064786
et du coup meme combat il faudrait tout mettre à la ligne pour obtenir sur l'autre onglet :
17060518 7803314
17061385 7803314
17064786 7803314
merci encore
Re,
Essaie comme ça :
Sub Macro1()
Dim O As Worksheet 'déclare la variable O (Onglet)
Dim DL As Integer 'déclare la variable DL (Derniere ligne)
Dim V1 As String 'déclare la variable V1 (Valeur 1)
Dim V2 As String 'déclare la variable V2 (Valeur 2)
Dim NB As Byte 'déclare la variable NB (NomBre)
Dim V() As Variant 'déclare le tableau de variables indexées V
Set O = Worksheets("Test") 'définit l'onglet O (a adapter à ton cas)
DL = O.Cells(Application.Rows.Count, "C").End(xlUp).Row 'définit la dernière ligne éditée DL de la colonne C de l'onglet O
For I = DL To 2 Step -1 'boucle inversée sur toutes les lignes, de DL à 2
If InStr(1, O.Cells(I, "C"), "/", vbTextCompare) > 0 Then 'condition : si la cellule ligne DL colonne C contient le symbole "/"
NB = UBound(Split(O.Cells(I, "C").Value, "/")) 'définit le nombre de groupe de nombre (séparés par /)
ReDim V(NB) 'redimensionne le tableau des variables indexées V
For J = NB To 1 Step -1 'boucle inversée sur toutes les variables indexées J du tableau V (sauf la première (V0))
V(J) = Split(O.Cells(I, "C").Value, "/")(J) 'définit la variable indexée V(J)
O.Rows(I + 1).Insert 'insère une ligne en-dessous
O.Cells(I + 1, "A") = V(J) 'renvoie V(J) dans la cellule ligne I+1 colonne A
O.Cells(I + 1, "B") = O.Cells(I, "B") 'récupere dans la cellule I+1 colonne B la valeur de la cellule I colonne B
Next J 'prochaine variable indexée de la boucle
End If 'fin de la condition
Next I 'prochaine ligne de la boucle
O.Columns(3).Delete 'supprime la colonne C
End Subsalut
cela fonctionne mais du coup tu écrase mon onglet de base ça ne crée pas un nouvel onglet..
Re,
Oui désolé. En fait je me suis basé sur ma première réponse et pas sur la seconde (avec la copie d'onglet). Mais franchement, avec le code commenté tu aurais pu corriger par toi-même. Quelle feignasse !...
Sub Macro1()
Dim OO As Worksheet 'déclare la variable OO (Onglet Original)
Dim OC As Worksheet 'déclare la variable OC (Onglet Copie)
Dim DL As Integer 'déclare la variable DL (Derniere ligne)
Dim V1 As String 'déclare la variable V1 (Valeur 1)
Dim V2 As String 'déclare la variable V2 (Valeur 2)
Set OO = Worksheets("Test") 'définit l'onglet OO (a adapter à ton cas)
OO.Copy After:=OO 'copie l'onglet OO après lui-même
Set OC = ActiveSheet 'définit l'onglet copié OC
DL = OC.Cells(Application.Rows.Count, "C").End(xlUp).Row 'définit la dernière ligne éditée DL de la colonne C de l'onglet OC
For I = DL To 2 Step -1 'boucle inversée sur toutes les lignes, de DL à 2
If InStr(1, O.Cells(I, "C"), "/", vbTextCompare) > 0 Then 'condition : si la cellule ligne DL colonne C contient le symbole "/"
NB = UBound(Split(O.Cells(I, "C").Value, "/")) 'définit le nombre de groupe de nombre (séparés par /)
ReDim V(NB) 'redimensionne le tableau des variables indexées V
For J = NB To 1 Step -1 'boucle inversée sur toutes les variables indexées J du tableau V (sauf la première (V0))
V(J) = Split(O.Cells(I, "C").Value, "/")(J) 'définit la variable indexée V(J)
O.Rows(I + 1).Insert 'insère une ligne en-dessous
O.Cells(I + 1, "A") = V(J) 'renvoie V(J) dans la cellule ligne I+1 colonne A
O.Cells(I + 1, "B") = O.Cells(I, "B") 'récupere dans la cellule I+1 colonne B la valeur de la cellule I colonne B
Next J 'prochaine variable indexée de la boucle
End If 'fin de la condition
Next I 'prochaine ligne de la boucle
OC.Columns(3).Delete 'supprime la colonne C
End Submerci beaucoup
je vais t'avouer une chose, ce truc là est tellement important que je préfère faire confiance à ton expertise ..
MERCI BEAUCOUP