A voir également:
- Alligner des lignes en une seule en vba
- Partager photos en ligne - Guide
- Vente en ligne particulier - Guide
- Excel trier par ordre alphabétique en gardant les lignes - Guide
- Comment imprimer un tableau excel sur une seule page - Guide
- Mettre une seule page en paysage word - Guide
8 réponses
thev
Messages postés
1943
Date d'inscription
lundi 7 avril 2008
Statut
Membre
Dernière intervention
14 janvier 2025
697
21 mai 2009 à 19:45
21 mai 2009 à 19:45
Un exemple serait le bienvenu pour éclaircir ta demande.
Utilisateur anonyme
22 mai 2009 à 16:55
22 mai 2009 à 16:55
Bonjour,
voici un exemple
J'ai des lignes de cette forme :
----------------------------------------------------------------------------------------------------------------------
I8921-0150 BGA350 RB BG24 NR 950
1884VCRV1 JA D 420
1884VCRV1 WJ GAI FZ4 420 8921G0152
BGA350
----------------------------------------------------------------------------------------------------------------------
I8921-0151 BGA350 RB BG24 NR 950
1884VCRVB A WJ GAI FZ5 420 8921G0152
1884VCRVB A PA D 420
BGA350
----------------------------------------------------------------------------------------------------------------------
Chaque ligne est placée dans une seule cellule et non pas en colonnes. je cherche BGA350 , une fois je la trouve je groupe toutes les lignes qui viendront par la suite jusqu'à ce que je retrouve une deuxième BGA350. Je mets les lignes qui désormais sont groupées en une seule, dans ma 2ème feuille de calcul du mm classeur.
Je procède ainsi jusqu'à la fin de ma première feuille
Pour chaque ligne , avant de la grouper avec celle qui la suit, je prends 102 caractères.
J'espère que j'etais un peu claire, mais je suis là pour tout coplement d'infos,
merci d'avance
voici un exemple
J'ai des lignes de cette forme :
----------------------------------------------------------------------------------------------------------------------
I8921-0150 BGA350 RB BG24 NR 950
1884VCRV1 JA D 420
1884VCRV1 WJ GAI FZ4 420 8921G0152
BGA350
----------------------------------------------------------------------------------------------------------------------
I8921-0151 BGA350 RB BG24 NR 950
1884VCRVB A WJ GAI FZ5 420 8921G0152
1884VCRVB A PA D 420
BGA350
----------------------------------------------------------------------------------------------------------------------
Chaque ligne est placée dans une seule cellule et non pas en colonnes. je cherche BGA350 , une fois je la trouve je groupe toutes les lignes qui viendront par la suite jusqu'à ce que je retrouve une deuxième BGA350. Je mets les lignes qui désormais sont groupées en une seule, dans ma 2ème feuille de calcul du mm classeur.
Je procède ainsi jusqu'à la fin de ma première feuille
Pour chaque ligne , avant de la grouper avec celle qui la suit, je prends 102 caractères.
J'espère que j'etais un peu claire, mais je suis là pour tout coplement d'infos,
merci d'avance
thev
Messages postés
1943
Date d'inscription
lundi 7 avril 2008
Statut
Membre
Dernière intervention
14 janvier 2025
697
22 mai 2009 à 18:14
22 mai 2009 à 18:14
par rapport à cet exemple, quel est le résultat attendu sur la feuille 2 (2 lignes ??)
I8921-0150 BGA350 RB BG24 NR 950 1884VCRV1 JA D 420 1884VCRV1 WJ GAI FZ4 420 8921G0152 BGA350
I8921-0151 BGA350 RB BG24 NR 950 1884VCRVB A WJ GAI FZ5 420 8921G0152 1884VCRVB A PA D 420
I8921-0150 BGA350 RB BG24 NR 950 1884VCRV1 JA D 420 1884VCRV1 WJ GAI FZ4 420 8921G0152 BGA350
I8921-0151 BGA350 RB BG24 NR 950 1884VCRVB A WJ GAI FZ5 420 8921G0152 1884VCRVB A PA D 420
Utilisateur anonyme
22 mai 2009 à 19:04
22 mai 2009 à 19:04
wi c justement ça sauf qu'il faut compter 102 caractère avec de concatener une ligne avec celle qui la suit
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
thev
Messages postés
1943
Date d'inscription
lundi 7 avril 2008
Statut
Membre
Dernière intervention
14 janvier 2025
697
23 mai 2009 à 01:19
23 mai 2009 à 01:19
voici un code fonctionnant avec l'exemple donné Sub alignement() Dim ligne As Integer Dim colA_source As Range Dim colA_destin As Range Set colA_source = ActiveSheet.UsedRange.Columns("A").Rows Set colA_destin = Worksheets(2).Columns("A").Rows PMField = Empty ligne = 0 For Each ligne_source In colA_source If Not IsEmpty(PMField) Then If ligne_source.Value <> PMField Then colA_destin(ligne).Value = colA_destin(ligne).Value & ligne_source.Value & String(104, " ") Else PMField = Empty End If End If FirstCar = Left(ligne_source.Value, 1) If FirstCar = "I" Or FirstCar = "M" Or FirstCar = "E" Then PMField = Mid(ligne_source.Value, 12, 6) ligne = ligne + 1 colA_destin(ligne).Value = ligne_source.Value & String(104, " ") End If Next ligne_source End Sub
Utilisateur anonyme
25 mai 2009 à 11:31
25 mai 2009 à 11:31
Bonjour,
ça marche , sauf qu'il ne prend pas en considération le 2ème BGA350 qui est juste avnt les tirets, et pui il prends mème les tirets en considération:
exemple:
Il prends tout ça :
I8921-0152B BGA350 BT TV24 B FN0 NR 950 1884VCRV1 JA F 420 1884VCRVB A PA F 420 BGA350 ---------------------------------------------------------------------------------------------- I8921-0152W BGA350 BT TV24 W FN0 NR 950
Au lieu de prendre rien que ça :
8921-0152B BGA350 BT TV24 B FN0 NR 950 1884VCRV1 JA F 420 1884VCRVB A PA F 420
BGA350
En respectant que chaque ligne doit contenir 102 caractère avant de la concaténer avec celle qui la suit.
Merci d'avance.
ça marche , sauf qu'il ne prend pas en considération le 2ème BGA350 qui est juste avnt les tirets, et pui il prends mème les tirets en considération:
exemple:
Il prends tout ça :
I8921-0152B BGA350 BT TV24 B FN0 NR 950 1884VCRV1 JA F 420 1884VCRVB A PA F 420 BGA350 ---------------------------------------------------------------------------------------------- I8921-0152W BGA350 BT TV24 W FN0 NR 950
Au lieu de prendre rien que ça :
8921-0152B BGA350 BT TV24 B FN0 NR 950 1884VCRV1 JA F 420 1884VCRVB A PA F 420
BGA350
En respectant que chaque ligne doit contenir 102 caractère avant de la concaténer avec celle qui la suit.
Merci d'avance.
thev
Messages postés
1943
Date d'inscription
lundi 7 avril 2008
Statut
Membre
Dernière intervention
14 janvier 2025
697
25 mai 2009 à 22:23
25 mai 2009 à 22:23
ci-joint code modifié en supposant que BGA350 est toujours le 2ème mot de la ligne commençant par I, M ou E.
Sub alignement() Dim ligne As Integer Dim colA_source As Range Dim colA_destin As Range Set colA_source = ActiveSheet.UsedRange.Columns("A").Rows Set colA_destin = Worksheets(2).Columns("A").Rows PMField = Empty ligne = 0 For Each ligne_source In colA_source If Not IsEmpty(PMField) Then If ligne_source.Value <> PMField Then colA_destin(ligne).Value = colA_destin(ligne).Value & ligne_source.Value & String(102 - Len(ligne_source.Value), " ") Else PMField = Empty End If End If FirstCar = Left(ligne_source.Value, 1) If FirstCar = "I" Or FirstCar = "M" Or FirstCar = "E" Then mots_ligne = Split(ligne_source.Value, " ") 'scission ligne en mots séparés par espace PMField = mots_ligne(1) ligne = ligne + 1 colA_destin(ligne).Value = ligne_source.Value & String(102 - Len(ligne_source.Value), " ") End If Next ligne_source End Sub
Utilisateur anonyme
26 mai 2009 à 11:07
26 mai 2009 à 11:07
Bonjour,
tout dabord merci infiniment pour tes reponses, et pour l'interet que ta prété à ma demande d'infos.
j'ai executé le 2ème programme et ça donne une erreur "argument ou appel de procedure incorrect" sur la ligne :
colA_destin(ligne).Value = ligne_source.Value & String(102 - Len(ligne_source.Value), " ")
D'autre part, j'ai essayé de faire un programme et ça marche !! :D sauf que ça me donne un bug au niveau d'une seule ligne, le reste de la fueille s'affiche correctement et come je el souhaite, stp si tu pouvais me donner ton avis dessus
Voici le programme:
Sub postraitement()
Dim ligne As Long, lig As Long, ligne_sh1 As Long
Dim chaine As String
ligne_sh1 = 1
With ActiveSheet
'detecter la dernnière ligne non vide de la feuille
derlig = .Range("A65536").End(3).Row
For ligne = 1 To derlig Step 1
'détecter la première letter de la chaine de caractère
FirstCar = Left(Range("A" & ligne).Value, 1)
If FirstCar = "I" Or FirstCar = "M" Or FirstCar = "E" Then
'formattage de la ligne, recupération de la chaine utile(102 caractères)
chaine = Mid(Range("A" & ligne).Value, 1, 102)
'copier la 1ère ligne dans sheet "test"
Sheets("test").Cells(ligne_sh1, 1).Value = chaine
'récupérer les caractères 17 à 24 PMfield ( le BGA350 dans ce cas ) : Left(ligne)
PMField = Mid(Range("A" & ligne).Value, 17, 8)
lig = 1
toto = InStr(1, Cells(ligne + lig, 1).Value, PMField)
'toto renvoi 1 si la ligne contient PMfield , 0 sinon
'tant que ligne ++ ne contient pas PMfield (InStr),
While toto = 0
'formattage de la ligne
chaine = Mid(Cells(ligne + lig, 1).Value, 1, 102)
'copier la ligne en concaténant dans la feuille test
Sheets("test").Cells(ligne_sh1, 1).Value = Sheets("test").Cells(ligne_sh1, 1).Value & chaine
lig = lig + 1 'incrementer la boucle
testchaine = .Cells(ligne + lig, 1).Value
toto = InStr(1, PMField, testchaine)
'lig = lig
Wend
ligne_sh1 = ligne_sh1 + 1
'sinon retourner au début du for
End If
Next ligne
End With
End Sub
tout dabord merci infiniment pour tes reponses, et pour l'interet que ta prété à ma demande d'infos.
j'ai executé le 2ème programme et ça donne une erreur "argument ou appel de procedure incorrect" sur la ligne :
colA_destin(ligne).Value = ligne_source.Value & String(102 - Len(ligne_source.Value), " ")
D'autre part, j'ai essayé de faire un programme et ça marche !! :D sauf que ça me donne un bug au niveau d'une seule ligne, le reste de la fueille s'affiche correctement et come je el souhaite, stp si tu pouvais me donner ton avis dessus
Voici le programme:
Sub postraitement()
Dim ligne As Long, lig As Long, ligne_sh1 As Long
Dim chaine As String
ligne_sh1 = 1
With ActiveSheet
'detecter la dernnière ligne non vide de la feuille
derlig = .Range("A65536").End(3).Row
For ligne = 1 To derlig Step 1
'détecter la première letter de la chaine de caractère
FirstCar = Left(Range("A" & ligne).Value, 1)
If FirstCar = "I" Or FirstCar = "M" Or FirstCar = "E" Then
'formattage de la ligne, recupération de la chaine utile(102 caractères)
chaine = Mid(Range("A" & ligne).Value, 1, 102)
'copier la 1ère ligne dans sheet "test"
Sheets("test").Cells(ligne_sh1, 1).Value = chaine
'récupérer les caractères 17 à 24 PMfield ( le BGA350 dans ce cas ) : Left(ligne)
PMField = Mid(Range("A" & ligne).Value, 17, 8)
lig = 1
toto = InStr(1, Cells(ligne + lig, 1).Value, PMField)
'toto renvoi 1 si la ligne contient PMfield , 0 sinon
'tant que ligne ++ ne contient pas PMfield (InStr),
While toto = 0
'formattage de la ligne
chaine = Mid(Cells(ligne + lig, 1).Value, 1, 102)
'copier la ligne en concaténant dans la feuille test
Sheets("test").Cells(ligne_sh1, 1).Value = Sheets("test").Cells(ligne_sh1, 1).Value & chaine
lig = lig + 1 'incrementer la boucle
testchaine = .Cells(ligne + lig, 1).Value
toto = InStr(1, PMField, testchaine)
'lig = lig
Wend
ligne_sh1 = ligne_sh1 + 1
'sinon retourner au début du for
End If
Next ligne
End With
End Sub