Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

insertion dans une liste disposée en colonne par macro? fonction?

11 réponses
Avatar
pat
Bonjour,


Mon probl=E9me est d'ins=E9rer =E0 l'aide d'une macro ou des fonctions
Excel un texte identique avant le dernier =E9l=E9ment de chacune des
s=E9ries a(i), b(i), c(i) ... d'une liste dispos=E9e en colonne

ligne liste initiale liste finale

1 a1 a1
2 a2 a2
3 a3 a3
4 a4 fin de s=E9rie texte identique
5 b1 a4
6 b2 b1
7 b3 b2
8 b4 b3
9 b5 b4
10 b6 fin de s=E9rie b5
11 c1 texte identique
12 c2 b6
13 c3 c1
14 c4 c2
15 c5 c3
16 c6 c4
17 c7 c5
18 c8 c6
19 c9 fin de s=E9rie c7
20 d1 c8
21 d2 texte identique
22 d3 fin de s=E9rie c9
23 d1
24 d2
25 texte identique
26 d3

Merci pour votre aide

10 réponses

1 2
Avatar
Daniel
Bonsoir.
Essaie la macro suivante :

Sub test4()
Dim Texte As String, Plage As Range, c As Range, Num As Integer
Set Plage = Range("A1", Range("A65536").End(xlUp))
Range("A1").Select
Do While ActiveCell <> ""
For i = 1 To Len(ActiveCell.Value)
If Mid(ActiveCell.Value, i) < 10 Then
Texte = Left(ActiveCell.Value, i - 1)
Num = i - 1
Exit For
End If
Next i
If Left(ActiveCell.Offset(1, 0).Value, Num) <> Texte Then
ActiveCell.EntireRow.Insert
ActiveCell.Value = "fin de série texte identique"
ActiveCell.Offset(1, 0).Select
End If
ActiveCell.Offset(1, 0).Select
Loop
End Sub

Cordialement.
Daniel
"pat" a écrit dans le message de news:

Bonjour,


Mon probléme est d'insérer à l'aide d'une macro ou des fonctions
Excel un texte identique avant le dernier élément de chacune des
séries a(i), b(i), c(i) ... d'une liste disposée en colonne

ligne liste initiale liste finale

1 a1 a1
2 a2 a2
3 a3 a3
4 a4 fin de série texte identique
5 b1 a4
6 b2 b1
7 b3 b2
8 b4 b3
9 b5 b4
10 b6 fin de série b5
11 c1 texte identique
12 c2 b6
13 c3 c1
14 c4 c2
15 c5 c3
16 c6 c4
17 c7 c5
18 c8 c6
19 c9 fin de série c7
20 d1 c8
21 d2 texte identique
22 d3 fin de série c9
23 d1
24 d2
25 texte identique
26 d3

Merci pour votre aide
Avatar
pat
Bonjour Daniel,

J'ai testé avec succès votre macro, mais j'ai peut être trop
simplifié le problème qui concerne un fichier d'échange
généalogique, appelé par les spécialistes GEDCOM.
Un extrait de ce type de fichier est donné ci-dessous.
Chaque individu inclus dans la généalogie est caractérisé par une
série de ligne dont la première est du type : 0 @x...@ INDI (x... :
numéro spécifique à'individu).
La série de ligne peut varier en nombre et en nature d'un individu
à l'autre.
Mon problème est en fait d'introduire un texte type avant la «
balise » 0 @x...@ INDI dont les cinq derniers caractères sont
toujours @ INDI (un blanc entre @ et I)

Encore merci pour votre première réponse.

0 HEAD
1 SOUR HEREDIS 8 PC
2 VERS 8
2 NAME HEREDIS PC
2 CORP BSD Concept Ã
3 ADDR www.heredis.com
1 DATE 7 DEC 2005
2 TIME 14:59:35
1 GEDC
2 VERS 5.5
2 FORM LINEAGE-LINKED
1 CHAR ANSEL
1 PLAC
2 FORM Town , Area code , County , Region , Country, Subdivision
0 @1I@ INDI
1 NAME Louis Victor/BOUSSEREAU/
2 GIVN Louis Victor
2 SURN BOUSSEREAU
1 SEX M
1 FAMS @156U@
0 @2I@ INDI
1 NAME Paul âEmile Victor/BOUSSEREAU/
2 GIVN Paul âEmile Victor
2 SURN BOUSSEREAU
1 SEX M
1 BIRT
2 DATE 18 MAR 1882
2 PLAC Villiers en Plaine,79,Deux Sáevres,Poitou Charentes,FRANCE,
2 SOUR @989S@
1 FAMC @156U@
0 @3I@ INDI
1 NAME Marie Clâementine/FRáERE/
2 GIVN Marie Clâementine
2 SURN FRáERE
1 SEX F
1 BIRT
2 DATE 28 OCT 1853
2 PLAC Villiers en Plaine,79,Deux Sáevres,Poitou Charentes,FRANCE,
2 SOUR @989S@
1 FAMS @156U@
1 FAMC @154U@
0 @4I@ INDI
1 NAME Jacques/DURANDAU/
2 GIVN Jacques
2 SURN DURANDAU
1 SEX M
1 FAMS @4U@



Bonsoir.
Essaie la macro suivante :

Sub test4()
Dim Texte As String, Plage As Range, c As Range, Num As Integer
Set Plage = Range("A1", Range("A65536").End(xlUp))
Range("A1").Select
Do While ActiveCell <> ""
For i = 1 To Len(ActiveCell.Value)
If Mid(ActiveCell.Value, i) < 10 Then
Texte = Left(ActiveCell.Value, i - 1)
Num = i - 1
Exit For
End If
Next i
If Left(ActiveCell.Offset(1, 0).Value, Num) <> Texte Then
ActiveCell.EntireRow.Insert
ActiveCell.Value = "fin de série texte identique"
ActiveCell.Offset(1, 0).Select
End If
ActiveCell.Offset(1, 0).Select
Loop
End Sub

Cordialement.
Daniel
"pat" a écrit dans le message de news:

Bonjour,


Mon probléme est d'insérer à l'aide d'une macro ou des fonctions
Excel un texte identique avant le dernier élément de chacune des
séries a(i), b(i), c(i) ... d'une liste disposée en colonne

ligne liste initiale liste finale

1 a1 a1
2 a2 a2
3 a3 a3
4 a4 fin de série texte identique
5 b1 a4
6 b2 b1
7 b3 b2
8 b4 b3
9 b5 b4
10 b6 fin de série b5
11 c1 texte identique
12 c2 b6
13 c3 c1
14 c4 c2
15 c5 c3
16 c6 c4
17 c7 c5
18 c8 c6
19 c9 fin de série c7
20 d1 c8
21 d2 texte identique
22 d3 fin de série c9
23 d1
24 d2
25 texte identique
26 d3

Merci pour votre aide


Avatar
Daniel
Mon problème est en fait d'introduire un texte type avant la «
balise » 0 @x...@ INDI dont les cinq derniers caractères sont
t> oujours @ INDI (un blanc entre @ et I)


Est-ce que seules les lignes "balise" comencent par zéro ?
Auquel cas, cela simplifie le problème.
Daniel

Avatar
pat
Non, il y a d'autres balises qui commence par 0 :
0 @x...@ FAM
0 @x...@ SOUR
tout au moins dans les fichiers sur lesquels je travaille actuellement.






Mon problème est en fait d'introduire un texte type avant la «
balise » 0 @x...@ INDI dont les cinq derniers caractères sont
t> oujours @ INDI (un blanc entre @ et I)


Est-ce que seules les lignes "balise" comencent par zéro ?
Auquel cas, cela simplifie le problème.
Daniel



Avatar
pat
Il est toutefois possible de faire précéder cette balise par un
caractère alphabétique (ou une chaîne) toujours identique moyennant
un traitement préalable (déjà fait).




Non, il y a d'autres balises qui commence par 0 :
0 @x...@ FAM
0 @x...@ SOUR
tout au moins dans les fichiers sur lesquels je travaille actuellement.






Mon problème est en fait d'introduire un texte type avant la «
balise » 0 @x...@ INDI dont les cinq derniers caractères sont
t> oujours @ INDI (un blanc entre @ et I)


Est-ce que seules les lignes "balise" comencent par zéro ?
Auquel cas, cela simplifie le problème.
Daniel





Avatar
Daniel
Ma question était : est-ce qu'il y d'autres lignes, à part les lignes balise
qui commencent par zéro.
Daniel
"pat" a écrit dans le message de news:

Il est toutefois possible de faire précéder cette balise par un
caractère alphabétique (ou une chaîne) toujours identique moyennant
un traitement préalable (déjà fait).




Non, il y a d'autres balises qui commence par 0 :
0 @x...@ FAM
0 @x...@ SOUR
tout au moins dans les fichiers sur lesquels je travaille actuellement.






Mon problème est en fait d'introduire un texte type avant la «
balise » 0 @x...@ INDI dont les cinq derniers caractères sont
t> oujours @ INDI (un blanc entre @ et I)


Est-ce que seules les lignes "balise" comencent par zéro ?
Auquel cas, cela simplifie le problème.
Daniel





Avatar
pat
Il y a effectivement d'autres lignes qui commencent par 0, mais je
rappelle que je peux introduire sur la ligne concernée 0 @x...@ INDI
un texte sans equivoque facilitant son identification exemple : ICI 0
@x...@ INDI


Ma question était : est-ce qu'il y d'autres lignes, à part les lignes balise
qui commencent par zéro.
Daniel
"pat" a écrit dans le message de news:

Il est toutefois possible de faire précéder cette balise par un
caractère alphabétique (ou une chaîne) toujours identique moyennant
un traitement préalable (déjà fait).




Non, il y a d'autres balises qui commence par 0 :
0 @x...@ FAM
0 @x...@ SOUR
tout au moins dans les fichiers sur lesquels je travaille actuellement.






Mon problème est en fait d'introduire un texte type avant la «
balise » 0 @x...@ INDI dont les cinq derniers caractères sont
t> oujours @ INDI (un blanc entre @ et I)


Est-ce que seules les lignes "balise" comencent par zéro ?
Auquel cas, cela simplifie le problème.
Daniel







Avatar
Daniel
Ca ne sera pas la peine. Essaie :

Sub test4()
Dim Num As Integer
Range("A1").Select
Do While ActiveCell <> ""
Num = InStr(1, ActiveCell.Value, "@ INDI")
If Num <> 0 Then
ActiveCell.EntireRow.Insert
ActiveCell.Value = "fin de série texte identique"
ActiveCell.Offset(1, 0).Select
End If
ActiveCell.Offset(1, 0).Select
Loop
End Sub


Cordialement.
Daniel
"pat" a écrit dans le message de news:

Il y a effectivement d'autres lignes qui commencent par 0, mais je
rappelle que je peux introduire sur la ligne concernée 0 @x...@ INDI
un texte sans equivoque facilitant son identification exemple : ICI 0
@x...@ INDI
Avatar
pat
Impeccable, je vais toutefois abuser de vos compétences avec une
dernière question : comment modifier la macro afin que "fin de série
texte identique" soit paramétrable dans une cellule de la feuille ou
se trouve le fichier à traiter ?

Merci de m'avoir aidé dans mes travaux généalogiques, vous pouvez
les consulter sur http://www.mara-evrard.com

Cordialement
Patrick


Ca ne sera pas la peine. Essaie :

Sub test4()
Dim Num As Integer
Range("A1").Select
Do While ActiveCell <> ""
Num = InStr(1, ActiveCell.Value, "@ INDI")
If Num <> 0 Then
ActiveCell.EntireRow.Insert
ActiveCell.Value = "fin de série texte identique"
ActiveCell.Offset(1, 0).Select
End If
ActiveCell.Offset(1, 0).Select
Loop
End Sub


Cordialement.
Daniel
"pat" a écrit dans le message de news:

Il y a effectivement d'autres lignes qui commencent par 0, mais je
rappelle que je peux introduire sur la ligne concernée 0 @x...@ INDI
un texte sans equivoque facilitant son identification exemple : ICI 0
@x...@ INDI


Avatar
Daniel
Pour un texte se trouvant en D1 :

Sub test4()
Dim Num As Integer
Set Plage = Range("A1", Range("A65536").End(xlUp))
Range("A1").Select
Do While ActiveCell <> ""
Num = InStr(1, ActiveCell.Value, "@ INDI")
If Num <> 0 Then
ActiveCell.EntireRow.Insert
ActiveCell.Value = Range("D1").Value
ActiveCell.Offset(1, 0).Select
End If
ActiveCell.Offset(1, 0).Select
Loop
End Sub

Daniel
"pat" a écrit dans le message de news:

Impeccable, je vais toutefois abuser de vos compétences avec une
dernière question : comment modifier la macro afin que "fin de série
texte identique" soit paramétrable dans une cellule de la feuille ou
se trouve le fichier à traiter ?

Merci de m'avoir aidé dans mes travaux généalogiques, vous pouvez
les consulter sur http://www.mara-evrard.com

Cordialement
Patrick


Ca ne sera pas la peine. Essaie :

Sub test4()
Dim Num As Integer
Range("A1").Select
Do While ActiveCell <> ""
Num = InStr(1, ActiveCell.Value, "@ INDI")
If Num <> 0 Then
ActiveCell.EntireRow.Insert
ActiveCell.Value = "fin de série texte identique"
ActiveCell.Offset(1, 0).Select
End If
ActiveCell.Offset(1, 0).Select
Loop
End Sub


Cordialement.
Daniel
"pat" a écrit dans le message de news:

Il y a effectivement d'autres lignes qui commencent par 0, mais je
rappelle que je peux introduire sur la ligne concernée 0 @x...@ INDI
un texte sans equivoque facilitant son identification exemple : ICI 0
@x...@ INDI


1 2