Bonjour,
j'ai deux questions qui sont liées :
J'ai dans une feuille en colonne D des noms dont certains contiennent une
virgule (ou plusieurs).
Je voudrais pour ces noms là : supprimer le nom avant la virgule et copier
la ligne qui contient cette virgule avec ce nouveau nom.
Exemple :
ligne 1 : A1 | B1 |C1 | toto
ligne 2 : A2 | B2 |C2 | tata
ligne 3 : A3 | B3 |C3 | tutu,tete
ligne 4 : A4 | B4 |C4| titi
je veux obtenir
ligne 1 : A1 | B1 |C1 | toto
ligne 2 : A2 | B2 |C2 | tata
ligne 3 : A3 | B3 |C3 | tutu
ligne 4 : A3 | B3 |C3 |tete
ligne 5 : A4 | B4 |C4| titi
J'ai essayé avec l'enregistreur de macro. J'obtiens ceci
Cells.Find(What:=",", After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext,
MatchCase:=False _
, SearchFormat:=False).Activate
pour la fonction rechercher.
En clair il m'active la cellule contenant une virgule.
Mais je ne sais pas comment agir dessus, pour, par exemple, retrouver le
numéro de la ligne (cells.row ; activate.rows,.. ?) et le contenu de la
cellule en question.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
FS
Bonsoir,
Une première approche (parmi d'autres) :
Sub Découpe() Dim cell As Range For Each cell In Range("D1:D" & _ Cells(Rows.Count, "D").End(xlUp).Row) If UBound(Split(cell.Text, ",")) > 0 Then cell(2).EntireRow.Insert xlShiftDown Range("A" & cell.Row + 1 & ":C" & cell.Row + 1).Value = _ Range("A" & cell.Row & ":C" & cell.Row).Value Range("D" & cell.Row + 1).Value = Split(cell.Text, ",")(1) cell.Value = Split(cell.Text, ",")(0) End If Next End Sub
Pour les cas où il y aurait plusieurs virgules dans une cellule Dx, précise comment il faudrait les traiter.
FS -- Frédéric SIGONNEAU Modules et modèles pour Excel : http://frederic.sigonneau.free.fr/
Olivier a écrit :
Bonjour, j'ai deux questions qui sont liées : J'ai dans une feuille en colonne D des noms dont certains contiennent une virgule (ou plusieurs). Je voudrais pour ces noms là : supprimer le nom avant la virgule et copier la ligne qui contient cette virgule avec ce nouveau nom. Exemple : ligne 1 : A1 | B1 |C1 | toto ligne 2 : A2 | B2 |C2 | tata ligne 3 : A3 | B3 |C3 | tutu,tete ligne 4 : A4 | B4 |C4| titi je veux obtenir ligne 1 : A1 | B1 |C1 | toto ligne 2 : A2 | B2 |C2 | tata ligne 3 : A3 | B3 |C3 | tutu ligne 4 : A3 | B3 |C3 |tete ligne 5 : A4 | B4 |C4| titi J'ai essayé avec l'enregistreur de macro. J'obtiens ceci Cells.Find(What:=",", After:¬tiveCell, LookIn:=xlFormulas, LookAt:= _ xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:úlse _ , SearchFormat:úlse).Activate pour la fonction rechercher. En clair il m'active la cellule contenant une virgule. Mais je ne sais pas comment agir dessus, pour, par exemple, retrouver le numéro de la ligne (cells.row ; activate.rows,.. ?) et le contenu de la cellule en question.
Merci pour votre aide.
Bonsoir,
Une première approche (parmi d'autres) :
Sub Découpe()
Dim cell As Range
For Each cell In Range("D1:D" & _
Cells(Rows.Count, "D").End(xlUp).Row)
If UBound(Split(cell.Text, ",")) > 0 Then
cell(2).EntireRow.Insert xlShiftDown
Range("A" & cell.Row + 1 & ":C" & cell.Row + 1).Value = _
Range("A" & cell.Row & ":C" & cell.Row).Value
Range("D" & cell.Row + 1).Value = Split(cell.Text, ",")(1)
cell.Value = Split(cell.Text, ",")(0)
End If
Next
End Sub
Pour les cas où il y aurait plusieurs virgules dans une cellule Dx,
précise comment il faudrait les traiter.
FS
--
Frédéric SIGONNEAU
Modules et modèles pour Excel :
http://frederic.sigonneau.free.fr/
Olivier a écrit :
Bonjour,
j'ai deux questions qui sont liées :
J'ai dans une feuille en colonne D des noms dont certains contiennent une
virgule (ou plusieurs).
Je voudrais pour ces noms là : supprimer le nom avant la virgule et copier
la ligne qui contient cette virgule avec ce nouveau nom.
Exemple :
ligne 1 : A1 | B1 |C1 | toto
ligne 2 : A2 | B2 |C2 | tata
ligne 3 : A3 | B3 |C3 | tutu,tete
ligne 4 : A4 | B4 |C4| titi
je veux obtenir
ligne 1 : A1 | B1 |C1 | toto
ligne 2 : A2 | B2 |C2 | tata
ligne 3 : A3 | B3 |C3 | tutu
ligne 4 : A3 | B3 |C3 |tete
ligne 5 : A4 | B4 |C4| titi
J'ai essayé avec l'enregistreur de macro. J'obtiens ceci
Cells.Find(What:=",", After:¬tiveCell, LookIn:=xlFormulas, LookAt:= _
xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext,
MatchCase:úlse _
, SearchFormat:úlse).Activate
pour la fonction rechercher.
En clair il m'active la cellule contenant une virgule.
Mais je ne sais pas comment agir dessus, pour, par exemple, retrouver le
numéro de la ligne (cells.row ; activate.rows,.. ?) et le contenu de la
cellule en question.
Sub Découpe() Dim cell As Range For Each cell In Range("D1:D" & _ Cells(Rows.Count, "D").End(xlUp).Row) If UBound(Split(cell.Text, ",")) > 0 Then cell(2).EntireRow.Insert xlShiftDown Range("A" & cell.Row + 1 & ":C" & cell.Row + 1).Value = _ Range("A" & cell.Row & ":C" & cell.Row).Value Range("D" & cell.Row + 1).Value = Split(cell.Text, ",")(1) cell.Value = Split(cell.Text, ",")(0) End If Next End Sub
Pour les cas où il y aurait plusieurs virgules dans une cellule Dx, précise comment il faudrait les traiter.
FS -- Frédéric SIGONNEAU Modules et modèles pour Excel : http://frederic.sigonneau.free.fr/
Olivier a écrit :
Bonjour, j'ai deux questions qui sont liées : J'ai dans une feuille en colonne D des noms dont certains contiennent une virgule (ou plusieurs). Je voudrais pour ces noms là : supprimer le nom avant la virgule et copier la ligne qui contient cette virgule avec ce nouveau nom. Exemple : ligne 1 : A1 | B1 |C1 | toto ligne 2 : A2 | B2 |C2 | tata ligne 3 : A3 | B3 |C3 | tutu,tete ligne 4 : A4 | B4 |C4| titi je veux obtenir ligne 1 : A1 | B1 |C1 | toto ligne 2 : A2 | B2 |C2 | tata ligne 3 : A3 | B3 |C3 | tutu ligne 4 : A3 | B3 |C3 |tete ligne 5 : A4 | B4 |C4| titi J'ai essayé avec l'enregistreur de macro. J'obtiens ceci Cells.Find(What:=",", After:¬tiveCell, LookIn:=xlFormulas, LookAt:= _ xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:úlse _ , SearchFormat:úlse).Activate pour la fonction rechercher. En clair il m'active la cellule contenant une virgule. Mais je ne sais pas comment agir dessus, pour, par exemple, retrouver le numéro de la ligne (cells.row ; activate.rows,.. ?) et le contenu de la cellule en question.
Merci pour votre aide.
Jacky
Bonsoir,
Autre Méthode (un peu plus basique) mais prends en compte s'il y a plusieurs virgules '---------------- Sub jj() Dim i As Long i = 2 '*****Debut de ligne de la colonne D (A adapter)***** While Cells(i, 4) <> "" If Cells(i, 4) Like "*,*" Then Rows(i + 1).Insert Cells(i + 1, 4) = Mid(Cells(i, 4), Application.Find(",", Cells(i, 4)) + 1, Len(Cells(i, 4))) Cells(i, 4) = Left(Cells(i, 4), Application.Find(",", Cells(i, 4)) - 1) End If i = i + 1 Wend End Sub '--------------------- -- Salutations JJ
"Olivier" a écrit dans le message de news: hbq6pt$557$
Bonjour, j'ai deux questions qui sont liées : J'ai dans une feuille en colonne D des noms dont certains contiennent une virgule (ou plusieurs). Je voudrais pour ces noms là : supprimer le nom avant la virgule et copier la ligne qui contient cette virgule avec ce nouveau nom. Exemple : ligne 1 : A1 | B1 |C1 | toto ligne 2 : A2 | B2 |C2 | tata ligne 3 : A3 | B3 |C3 | tutu,tete ligne 4 : A4 | B4 |C4| titi je veux obtenir ligne 1 : A1 | B1 |C1 | toto ligne 2 : A2 | B2 |C2 | tata ligne 3 : A3 | B3 |C3 | tutu ligne 4 : A3 | B3 |C3 |tete ligne 5 : A4 | B4 |C4| titi J'ai essayé avec l'enregistreur de macro. J'obtiens ceci Cells.Find(What:=",", After:¬tiveCell, LookIn:=xlFormulas, LookAt:= _ xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:úlse _ , SearchFormat:úlse).Activate pour la fonction rechercher. En clair il m'active la cellule contenant une virgule. Mais je ne sais pas comment agir dessus, pour, par exemple, retrouver le numéro de la ligne (cells.row ; activate.rows,.. ?) et le contenu de la cellule en question.
Merci pour votre aide.
Bonsoir,
Autre Méthode (un peu plus basique) mais prends en compte s'il y a plusieurs
virgules
'----------------
Sub jj()
Dim i As Long
i = 2 '*****Debut de ligne de la colonne D (A adapter)*****
While Cells(i, 4) <> ""
If Cells(i, 4) Like "*,*" Then
Rows(i + 1).Insert
Cells(i + 1, 4) = Mid(Cells(i, 4), Application.Find(",", Cells(i, 4)) + 1,
Len(Cells(i, 4)))
Cells(i, 4) = Left(Cells(i, 4), Application.Find(",", Cells(i, 4)) - 1)
End If
i = i + 1
Wend
End Sub
'---------------------
--
Salutations
JJ
"Olivier" <olivier1970@club-internet.fr> a écrit dans le message de news:
hbq6pt$557$1@aioe.org...
Bonjour,
j'ai deux questions qui sont liées :
J'ai dans une feuille en colonne D des noms dont certains contiennent une
virgule (ou plusieurs).
Je voudrais pour ces noms là : supprimer le nom avant la virgule et copier
la ligne qui contient cette virgule avec ce nouveau nom.
Exemple :
ligne 1 : A1 | B1 |C1 | toto
ligne 2 : A2 | B2 |C2 | tata
ligne 3 : A3 | B3 |C3 | tutu,tete
ligne 4 : A4 | B4 |C4| titi
je veux obtenir
ligne 1 : A1 | B1 |C1 | toto
ligne 2 : A2 | B2 |C2 | tata
ligne 3 : A3 | B3 |C3 | tutu
ligne 4 : A3 | B3 |C3 |tete
ligne 5 : A4 | B4 |C4| titi
J'ai essayé avec l'enregistreur de macro. J'obtiens ceci
Cells.Find(What:=",", After:¬tiveCell, LookIn:=xlFormulas, LookAt:= _
xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext,
MatchCase:úlse _
, SearchFormat:úlse).Activate
pour la fonction rechercher.
En clair il m'active la cellule contenant une virgule.
Mais je ne sais pas comment agir dessus, pour, par exemple, retrouver le
numéro de la ligne (cells.row ; activate.rows,.. ?) et le contenu de la
cellule en question.
Autre Méthode (un peu plus basique) mais prends en compte s'il y a plusieurs virgules '---------------- Sub jj() Dim i As Long i = 2 '*****Debut de ligne de la colonne D (A adapter)***** While Cells(i, 4) <> "" If Cells(i, 4) Like "*,*" Then Rows(i + 1).Insert Cells(i + 1, 4) = Mid(Cells(i, 4), Application.Find(",", Cells(i, 4)) + 1, Len(Cells(i, 4))) Cells(i, 4) = Left(Cells(i, 4), Application.Find(",", Cells(i, 4)) - 1) End If i = i + 1 Wend End Sub '--------------------- -- Salutations JJ
"Olivier" a écrit dans le message de news: hbq6pt$557$
Bonjour, j'ai deux questions qui sont liées : J'ai dans une feuille en colonne D des noms dont certains contiennent une virgule (ou plusieurs). Je voudrais pour ces noms là : supprimer le nom avant la virgule et copier la ligne qui contient cette virgule avec ce nouveau nom. Exemple : ligne 1 : A1 | B1 |C1 | toto ligne 2 : A2 | B2 |C2 | tata ligne 3 : A3 | B3 |C3 | tutu,tete ligne 4 : A4 | B4 |C4| titi je veux obtenir ligne 1 : A1 | B1 |C1 | toto ligne 2 : A2 | B2 |C2 | tata ligne 3 : A3 | B3 |C3 | tutu ligne 4 : A3 | B3 |C3 |tete ligne 5 : A4 | B4 |C4| titi J'ai essayé avec l'enregistreur de macro. J'obtiens ceci Cells.Find(What:=",", After:¬tiveCell, LookIn:=xlFormulas, LookAt:= _ xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:úlse _ , SearchFormat:úlse).Activate pour la fonction rechercher. En clair il m'active la cellule contenant une virgule. Mais je ne sais pas comment agir dessus, pour, par exemple, retrouver le numéro de la ligne (cells.row ; activate.rows,.. ?) et le contenu de la cellule en question.