XL 2010 {RESOLU} [VBA] Copier cellules puis les supprimer

Tow3rgat3

XLDnaute Nouveau
Bonjour, voici mon problème:

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

End Sub
 
Dernière édition par un modérateur:

vgendron

XLDnaute Barbatruc
Re : [VBA] Copier cellules puis les supprimer

Hello et bienvenu

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
 

Tow3rgat3

XLDnaute Nouveau
Re : [VBA] Copier cellules puis les supprimer

Hello et bienvenu

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 !
 

vgendron

XLDnaute Barbatruc
Re : [VBA] Copier cellules puis les supprimer

Mais, si je part du bas vers le haut, du coup les lignes à supprimer vont plus etres les bonnes !
as tu essayé au moins??

lance la macro en mode pas à pas.. touche F8.. et surveille les valeurs de L...tu comprendra mieux
 

Tow3rgat3

XLDnaute Nouveau
Re : [VBA] Copier cellules puis les supprimer

Au temps pour moi, même sans essayer j'aurai dû m'en douter !
"L" s'incrémente de -1, alors effectivement ca marche !

Merci beaucoup !
 

Haut Bas