J'ai un document d'archive de conversation.
Il suit donc le même schéma (voir exemple tout en bas de mon message).
Je voudrait:
1/ Rechercher dès qu'une cellule contient "---------"
2/ Copier à la suite de la valeur de la cellule en dessous la valeur de la cellule ENCORE en dessous.
3/ Supprimer la ligne de la cellule copiée à la suite, et celle de la cellule qui la suit. (Ouioui, décalage de 3 par rapport au "------" !
En gros je veut que la date soit à la suite de l'expéditeur, avec une virgule et un espace, et que le champ "à" disparaisse.
VOICI MON EXEMPLE ET LE VBA QUI NE FONCTIONNE PAS ENCORE:
----------
De*: Tom
Date*: 21 octobre 2015 à 19:47
À*: Jean
Message de longueur variable, sur une ou plusieurs lignes
suite d'un message par exemple blablabla
----------
De*:*Jean
Date*: 21 octobre 2015 à 20:04
À*:*Tom
Deuxieme Message de longueur variable, sur une ou plusieurs lignes
suite d'un message par exemple blablabla
----------
De*: Tom
Date*: 21 octobre 2015 à 20:06
À*: Jean
Message de longueur variable, sur une ou plusieurs lignes
suite d'un message par exemple blablabladefzsdefljkbmf
edfedfdfd
----------
De*:*Jean
Date*: 21 octobre 2015 à 20:15
À*:*Tom
Sub test()
Dim L As Integer
Const LigneDebut = 1
Const LigneFin = 2000
For L = LigneDebut To LigneFin Step 1
If Range(L, 1).Value = "----------" Then
Range("L+1,1").Value = Range("L+1,1").Value & ", " & Range("L+2,1").Value
'Range("L + 2:L + 3", 1).Select
'Selection.EntireRow.Delete
End If
Next
la prochaine fois, il faudrait que tu postes ton fichier en exemple, pour faciliter les échanges et avoir des réponses directement adéquates
sinon
pb de syntaxe avec Range.. cf aide vba
et comme tu ne testes que des cellules. utilise 'Cells'
et règle générale à garder en tete pour tes futures macro
quand tu parcours la feuille pour supprimer des lignes. il faut TOUJOURS partir du bas et remonter..
sinon problème d'indice
ex: pour i=1 to 4, si tu supprimes la ligne 3; alors. la 4 que tu espères tester est devenue 3...
ton code.. à tester sur ton fichier
Code:
Sub test()
Dim L As Integer
Const LigneDebut = 1
'Const LigneFin = 2000
'pas la peine de commencer à 2000 si il n'y a rien avant la ligne 20
LigneFin = Range("A" & Rows.Count).End(xlUp).Row
For L = LigneFin To LigneDebut Step -1
If Cells(L, 1).Value = "----------" Then
Cells(L + 1, 1).Value = Cells(L + 1, 1).Value & ", " & Cells(L + 2, 1).Value
Rows(L + 2 & ":" & L + 3).EntireRow.Delete
End If
Next L
End Sub
la prochaine fois, il faudrait que tu postes ton fichier en exemple, pour faciliter les échanges et avoir des réponses directement adéquates
sinon
pb de syntaxe avec Range.. cf aide vba
et comme tu ne testes que des cellules. utilise 'Cells'
et règle générale à garder en tete pour tes futures macro
quand tu parcours la feuille pour supprimer des lignes. il faut TOUJOURS partir du bas et remonter..
sinon problème d'indice
ex: pour i=1 to 4, si tu supprimes la ligne 3; alors. la 4 que tu espères tester est devenue 3...
ton code.. à tester sur ton fichier
Code:
Sub test()
Dim L As Integer
Const LigneDebut = 1
'Const LigneFin = 2000
'pas la peine de commencer à 2000 si il n'y a rien avant la ligne 20
LigneFin = Range("A" & Rows.Count).End(xlUp).Row
For L = LigneFin To LigneDebut Step -1
If Cells(L, 1).Value = "----------" Then
Cells(L + 1, 1).Value = Cells(L + 1, 1).Value & ", " & Cells(L + 2, 1).Value
Rows(L + 2 & ":" & L + 3).EntireRow.Delete
End If
Next L
End Sub
Mais, si je part du bas vers le haut, du coup les lignes à supprimer vont plus etres les bonnes !
La taille de mes messages étant variable, je dois impérativement supprimer les deux lignes suivant les tirets, mais pas les lignes avant ! Seul le sens croissant est toujours identique quand on rencontre des tirets !