OVH Cloud OVH Cloud

Macro pour tri alphabétique complexe

20 réponses
Avatar
Mirandolle
Bonjour,

Je suis nul à excel mais j'aurais hélas besoin d'une macro pour trier
des données, destinées à préparer une database pour un dictionnaire.

Voilà en gros ce que je veux faire. J'ai des lignes groupés deux par
deux, en deux langues différente. Exemple

House
Maison

Car
Voiture

Dog
Chien

(plus de 2000 lignes ainsi...)

Le premier mot est anglais, le second est français. J'aimerai donc
"grouper" chaque entrée, et les trier par ordre alphabétique EN FONCTION
DU PREMIER MOT EN ANGLAIS SEULEMENT de chaque groupe, mais que le mot
français reste attaché, de façon à avoir:

Car
Voiture

Dog
Chien

House
Maison

ESt-ce que c'est possible et comment faire ? Quelqu'un peut m'indiquer
une macro pour cela ?

Deuxième question, une fois que mes mots sont classés, j'aimerai ajouter
une cellune en face de chaque entrée et ENTRE chaque entrée de façon à
avoir:

\en Car
\nom
\fr Voiture

\en Dog
\nom
\fr Chien

\en House
\nom
\fr Maison

ESt-ce que c'est possible ? Est-ce qu'un macro pourrait faire cela ?

Merci de me répondre le plus simplement possible, je sais seulement
enregistrer une macro mais je connais encore très mal excel...

Merci pour votre aide.

PS: au départ, tous les mots sont placés dans un seule colonne A, et
chaque mot occupe une ligne (ou cellule); ce qui pose problème pour le
tri (?).

10 réponses

1 2
Avatar
Mirandolle
Un grand merci à vous tous pour les réponses!

La macro d'Yvan ne fait pas exactement ce que je voulais. Je ne
connaissais pas Cjoint, mais je viens d'uploader deux documents pour
vous montrer.

====> Document 1: forme de départ
(C'est une longue liste compacte et sans espace de mot anglais suivi de
son équivalent en français - je l'ai écourtée car c'est juste pour
l'exemple):
http://cjoint.com/?igppXa1zeI
Ca donne qqchose comme (tout en une colonne A):
House
Maison
Wine
Vin
Bottle
Bouteille
etc...

====> Document 2: forme d'arrivée
http://cjoint.com/?igpqw3BNgn
Ca donne qqchose comme ceci (en deux colonnes cette fois, A pour les
"marqueurs", B pour les mots):
lx House
ps Nom commun
gn Maison

lx Wine
ps Nom commun
gn Vin

etc...

lx ps gn sont des marqueurs arbitraires (pour mon programme de
database, car à la fin je vais exporter ces fiches excel en format
spécial, comme du texte ou presque). NOTEZ: je dois non seulement
rajouter lx devant chaque mot anglais, et gn devant le mot français,
mais aussi insérer entre les deux une ligne avec la catégorie
grammaticale, pour ici: "nom commun" (ps = catégorie grammaticale)

je peux moi même bien sûr déplacer la colonne A vers la colonne B, et
faire des copier-collés à répétition pour ajouter dans la colonne A des
séquences de lx ps gn... mais c'est long. Et surtout, je n'ai pas
moyen d'insérer à chaque fois la ligne "ps nom commun" entre deux mots
! (j'ai plusieurs fichiers de 2000 lignes ou plus)

Tout ce que j'ai trouvé, c'est une macro qui permet d'insérer une ligne
vide entre chaque définition pour bien les séparer. Ca donne:

House
Maison

Wine
Vin

Bottle
Bouteille

etc... La macro est la suivante:

Sub ajoutdeligne()
Dim i As Long, x As Long, lr As Long
x = ActiveSheet.UsedRange.Rows.Count
lr = ActiveCell.SpecialCells(xlLastCell).Row
If 3 > lr Then Exit Sub
If lr / 2 = Int(lr / 2) Then lr = lr + 1
For i = lr To 3 Step -2
Rows(i).EntireRow.Insert
Next i
End Sub

je ne sais pas si ça peut vous aider.

Merci encore !!!
Avatar
LSteph
re,

alors sans doute ceci:
'****
Sub atripaire()
Dim c As Range
Dim test As Boolean
test = True
For Each c In [b:b].Cells
If IsEmpty(c.Offset(0, -1)) Then Exit For
If test Then
c.Value = c.Offset(0, -1)
Else
c.Value = c.Offset(-1, -1)
End If
test = Not test
Next
[a:b].Select
Selection.Sort Key1:=Range("b1")
[b:b].clearcontents
End Sub
'***
'lSteph

"Mirandolle" a écrit dans le message de news:
42f4b261$0$22299$
Un grand merci à vous tous pour les réponses!

La macro d'Yvan ne fait pas exactement ce que je voulais. Je ne
connaissais pas Cjoint, mais je viens d'uploader deux documents pour vous
montrer.

====> Document 1: forme de départ
(C'est une longue liste compacte et sans espace de mot anglais suivi de
son équivalent en français - je l'ai écourtée car c'est juste pour
l'exemple):
http://cjoint.com/?igppXa1zeI
Ca donne qqchose comme (tout en une colonne A):
House
Maison
Wine
Vin
Bottle
Bouteille
etc...

====> Document 2: forme d'arrivée
http://cjoint.com/?igpqw3BNgn
Ca donne qqchose comme ceci (en deux colonnes cette fois, A pour les
"marqueurs", B pour les mots):
lx House
ps Nom commun
gn Maison

lx Wine
ps Nom commun
gn Vin

etc...

lx ps gn sont des marqueurs arbitraires (pour mon programme de
database, car à la fin je vais exporter ces fiches excel en format
spécial, comme du texte ou presque). NOTEZ: je dois non seulement
rajouter lx devant chaque mot anglais, et gn devant le mot français,
mais aussi insérer entre les deux une ligne avec la catégorie
grammaticale, pour ici: "nom commun" (ps = catégorie grammaticale)

je peux moi même bien sûr déplacer la colonne A vers la colonne B, et
faire des copier-collés à répétition pour ajouter dans la colonne A des
séquences de lx ps gn... mais c'est long. Et surtout, je n'ai pas moyen
d'insérer à chaque fois la ligne "ps nom commun" entre deux mots ! (j'ai
plusieurs fichiers de 2000 lignes ou plus)

Tout ce que j'ai trouvé, c'est une macro qui permet d'insérer une ligne
vide entre chaque définition pour bien les séparer. Ca donne:

House
Maison

Wine
Vin

Bottle
Bouteille

etc... La macro est la suivante:

Sub ajoutdeligne()
Dim i As Long, x As Long, lr As Long
x = ActiveSheet.UsedRange.Rows.Count
lr = ActiveCell.SpecialCells(xlLastCell).Row
If 3 > lr Then Exit Sub
If lr / 2 = Int(lr / 2) Then lr = lr + 1
For i = lr To 3 Step -2
Rows(i).EntireRow.Insert
Next i
End Sub

je ne sais pas si ça peut vous aider.

Merci encore !!!


Avatar
Yvan
Re bonjour

Regarde ceci: http://cjoint.com/?igqFCJxVjh

La procédure Test1 crée la liste comme tu la demandes et dans la foulée, la convertit
en tableau (plus facile à travailler).

La procedure Test2 convertit le tableau en liste comme tu la demandes.

OK?

@+

Yvan

"Mirandolle" a écrit dans le message de news:
42f4b261$0$22299$
| Un grand merci à vous tous pour les réponses!
|
| La macro d'Yvan ne fait pas exactement ce que je voulais. Je ne
| connaissais pas Cjoint, mais je viens d'uploader deux documents pour
| vous montrer.
|
| ====> Document 1: forme de départ
| (C'est une longue liste compacte et sans espace de mot anglais suivi de
| son équivalent en français - je l'ai écourtée car c'est juste pour
| l'exemple):
| http://cjoint.com/?igppXa1zeI
| Ca donne qqchose comme (tout en une colonne A):
| House
| Maison
| Wine
| Vin
| Bottle
| Bouteille
| etc...
|
| ====> Document 2: forme d'arrivée
| http://cjoint.com/?igpqw3BNgn
| Ca donne qqchose comme ceci (en deux colonnes cette fois, A pour les
| "marqueurs", B pour les mots):
| lx House
| ps Nom commun
| gn Maison
|
| lx Wine
| ps Nom commun
| gn Vin
|
| etc...
|
| lx ps gn sont des marqueurs arbitraires (pour mon programme de
| database, car à la fin je vais exporter ces fiches excel en format
| spécial, comme du texte ou presque). NOTEZ: je dois non seulement
| rajouter lx devant chaque mot anglais, et gn devant le mot français,
| mais aussi insérer entre les deux une ligne avec la catégorie
| grammaticale, pour ici: "nom commun" (ps = catégorie grammaticale)
|
| je peux moi même bien sûr déplacer la colonne A vers la colonne B, et
| faire des copier-collés à répétition pour ajouter dans la colonne A des
| séquences de lx ps gn... mais c'est long. Et surtout, je n'ai pas
| moyen d'insérer à chaque fois la ligne "ps nom commun" entre deux mots
| ! (j'ai plusieurs fichiers de 2000 lignes ou plus)
|
| Tout ce que j'ai trouvé, c'est une macro qui permet d'insérer une ligne
| vide entre chaque définition pour bien les séparer. Ca donne:
|
| House
| Maison
|
| Wine
| Vin
|
| Bottle
| Bouteille
|
| etc... La macro est la suivante:
|
| Sub ajoutdeligne()
| Dim i As Long, x As Long, lr As Long
| x = ActiveSheet.UsedRange.Rows.Count
| lr = ActiveCell.SpecialCells(xlLastCell).Row
| If 3 > lr Then Exit Sub
| If lr / 2 = Int(lr / 2) Then lr = lr + 1
| For i = lr To 3 Step -2
| Rows(i).EntireRow.Insert
| Next i
| End Sub
|
| je ne sais pas si ça peut vous aider.
|
| Merci encore !!!
Avatar
Mirandolle
Woaaah !!! Super ! Ca marche du tonnerre !!!

Merci Yvan, tu es un as! Ta petite macro va me faire gagner des heures!! ;-)
La macro test1 fait en effet bien plus qu'on lui demande, est c'est
parfait! ^^

Merci aussi à tous les autres pour votre aide si précieuse!

Yvan wrote:
Re bonjour

Regarde ceci: http://cjoint.com/?igqFCJxVjh

La procédure Test1 crée la liste comme tu la demandes et dans la foulée, la convertit
en tableau (plus facile à travailler).

La procedure Test2 convertit le tableau en liste comme tu la demandes.

OK?

@+

Yvan

"Mirandolle" a écrit dans le message de news:
42f4b261$0$22299$
| Un grand merci à vous tous pour les réponses!
|
| La macro d'Yvan ne fait pas exactement ce que je voulais. Je ne
| connaissais pas Cjoint, mais je viens d'uploader deux documents pour
| vous montrer.
|
| ====> Document 1: forme de départ
| (C'est une longue liste compacte et sans espace de mot anglais suivi de
| son équivalent en français - je l'ai écourtée car c'est juste pour
| l'exemple):
| http://cjoint.com/?igppXa1zeI
| Ca donne qqchose comme (tout en une colonne A):
| House
| Maison
| Wine
| Vin
| Bottle
| Bouteille
| etc...
|
| ====> Document 2: forme d'arrivée
| http://cjoint.com/?igpqw3BNgn
| Ca donne qqchose comme ceci (en deux colonnes cette fois, A pour les
| "marqueurs", B pour les mots):
| lx House
| ps Nom commun
| gn Maison
|
| lx Wine
| ps Nom commun
| gn Vin
|
| etc...
|
| lx ps gn sont des marqueurs arbitraires (pour mon programme de
| database, car à la fin je vais exporter ces fiches excel en format
| spécial, comme du texte ou presque). NOTEZ: je dois non seulement
| rajouter lx devant chaque mot anglais, et gn devant le mot français,
| mais aussi insérer entre les deux une ligne avec la catégorie
| grammaticale, pour ici: "nom commun" (ps = catégorie grammaticale)
|
| je peux moi même bien sûr déplacer la colonne A vers la colonne B, et
| faire des copier-collés à répétition pour ajouter dans la colonne A des
| séquences de lx ps gn... mais c'est long. Et surtout, je n'ai pas
| moyen d'insérer à chaque fois la ligne "ps nom commun" entre deux mots
| ! (j'ai plusieurs fichiers de 2000 lignes ou plus)
|
| Tout ce que j'ai trouvé, c'est une macro qui permet d'insérer une ligne
| vide entre chaque définition pour bien les séparer. Ca donne:
|
| House
| Maison
|
| Wine
| Vin
|
| Bottle
| Bouteille
|
| etc... La macro est la suivante:
|
| Sub ajoutdeligne()
| Dim i As Long, x As Long, lr As Long
| x = ActiveSheet.UsedRange.Rows.Count
| lr = ActiveCell.SpecialCells(xlLastCell).Row
| If 3 > lr Then Exit Sub
| If lr / 2 = Int(lr / 2) Then lr = lr + 1
| For i = lr To 3 Step -2
| Rows(i).EntireRow.Insert
| Next i
| End Sub
|
| je ne sais pas si ça peut vous aider.
|
| Merci encore !!!




Avatar
LSteph
Re, suite
J'avais ouvert le lien et squeezé la seconde partie, donc consécutivemement
phase1 et phase2 sur tableau départ:
'***
Sub phase1()
Dim c As Range
Dim test As Boolean
test = True
For Each c In [b:b].Cells
If IsEmpty(c.Offset(0, -1)) Then Exit For
If test Then
c.Value = c.Offset(0, -1)
Else
c.Value = c.Offset(-1, -1)
End If
test = Not test
Next
[a:b].Select
Selection.Sort Key1:=Range("b1")
[b:b].ClearContents

End Sub



Sub phase2()

Application.ScreenUpdating = False
Columns(1).Insert
[b65536].End(xlUp).Offset(1, -1).Select

Do While ActiveCell.Row >= 2
ActiveCell.Offset(-1, 0).Select
ActiveCell = "/gn"
ActiveCell.EntireRow.Insert
ActiveCell = "/ps"
ActiveCell.Offset(0, 1) = "Nom Commun"
ActiveCell.Offset(-1, 0).Select
ActiveCell = "/lx"
ActiveCell.EntireRow.Insert

Loop
Application.ScreenUpdating = True
End Sub
'***
'lSteph





"Mirandolle" a écrit dans le message de news:
42f4b261$0$22299$
Un grand merci à vous tous pour les réponses!

La macro d'Yvan ne fait pas exactement ce que je voulais. Je ne
connaissais pas Cjoint, mais je viens d'uploader deux documents pour vous
montrer.

====> Document 1: forme de départ
(C'est une longue liste compacte et sans espace de mot anglais suivi de
son équivalent en français - je l'ai écourtée car c'est juste pour
l'exemple):
http://cjoint.com/?igppXa1zeI
Ca donne qqchose comme (tout en une colonne A):
House
Maison
Wine
Vin
Bottle
Bouteille
etc...

====> Document 2: forme d'arrivée
http://cjoint.com/?igpqw3BNgn
Ca donne qqchose comme ceci (en deux colonnes cette fois, A pour les
"marqueurs", B pour les mots):
lx House
ps Nom commun
gn Maison

lx Wine
ps Nom commun
gn Vin

etc...

lx ps gn sont des marqueurs arbitraires (pour mon programme de
database, car à la fin je vais exporter ces fiches excel en format
spécial, comme du texte ou presque). NOTEZ: je dois non seulement
rajouter lx devant chaque mot anglais, et gn devant le mot français,
mais aussi insérer entre les deux une ligne avec la catégorie
grammaticale, pour ici: "nom commun" (ps = catégorie grammaticale)

je peux moi même bien sûr déplacer la colonne A vers la colonne B, et
faire des copier-collés à répétition pour ajouter dans la colonne A des
séquences de lx ps gn... mais c'est long. Et surtout, je n'ai pas moyen
d'insérer à chaque fois la ligne "ps nom commun" entre deux mots ! (j'ai
plusieurs fichiers de 2000 lignes ou plus)

Tout ce que j'ai trouvé, c'est une macro qui permet d'insérer une ligne
vide entre chaque définition pour bien les séparer. Ca donne:

House
Maison

Wine
Vin

Bottle
Bouteille

etc... La macro est la suivante:

Sub ajoutdeligne()
Dim i As Long, x As Long, lr As Long
x = ActiveSheet.UsedRange.Rows.Count
lr = ActiveCell.SpecialCells(xlLastCell).Row
If 3 > lr Then Exit Sub
If lr / 2 = Int(lr / 2) Then lr = lr + 1
For i = lr To 3 Step -2
Rows(i).EntireRow.Insert
Next i
End Sub

je ne sais pas si ça peut vous aider.

Merci encore !!!


Avatar
Mirandolle
Merci je vais l'essayer tout de suite :-)

Avec le premier je m'en sortais pas mal déjà ;-)

Merci à toi !!!

LSteph wrote:
Re, suite
J'avais ouvert le lien et squeezé la seconde partie, donc consécutivemement
phase1 et phase2 sur tableau départ:
'***
Sub phase1()
Dim c As Range
Dim test As Boolean
test = True
For Each c In [b:b].Cells
If IsEmpty(c.Offset(0, -1)) Then Exit For
If test Then
c.Value = c.Offset(0, -1)
Else
c.Value = c.Offset(-1, -1)
End If
test = Not test
Next
[a:b].Select
Selection.Sort Key1:=Range("b1")
[b:b].ClearContents

End Sub



Sub phase2()

Application.ScreenUpdating = False
Columns(1).Insert
[b65536].End(xlUp).Offset(1, -1).Select

Do While ActiveCell.Row >= 2
ActiveCell.Offset(-1, 0).Select
ActiveCell = "/gn"
ActiveCell.EntireRow.Insert
ActiveCell = "/ps"
ActiveCell.Offset(0, 1) = "Nom Commun"
ActiveCell.Offset(-1, 0).Select
ActiveCell = "/lx"
ActiveCell.EntireRow.Insert

Loop
Application.ScreenUpdating = True
End Sub
'***
'lSteph





"Mirandolle" a écrit dans le message de news:
42f4b261$0$22299$

Un grand merci à vous tous pour les réponses!

La macro d'Yvan ne fait pas exactement ce que je voulais. Je ne
connaissais pas Cjoint, mais je viens d'uploader deux documents pour vous
montrer.

====> Document 1: forme de départ
(C'est une longue liste compacte et sans espace de mot anglais suivi de
son équivalent en français - je l'ai écourtée car c'est juste pour
l'exemple):
http://cjoint.com/?igppXa1zeI
Ca donne qqchose comme (tout en une colonne A):
House
Maison
Wine
Vin
Bottle
Bouteille
etc...

====> Document 2: forme d'arrivée
http://cjoint.com/?igpqw3BNgn
Ca donne qqchose comme ceci (en deux colonnes cette fois, A pour les
"marqueurs", B pour les mots):
lx House
ps Nom commun
gn Maison

lx Wine
ps Nom commun
gn Vin

etc...

lx ps gn sont des marqueurs arbitraires (pour mon programme de
database, car à la fin je vais exporter ces fiches excel en format
spécial, comme du texte ou presque). NOTEZ: je dois non seulement
rajouter lx devant chaque mot anglais, et gn devant le mot français,
mais aussi insérer entre les deux une ligne avec la catégorie
grammaticale, pour ici: "nom commun" (ps = catégorie grammaticale)

je peux moi même bien sûr déplacer la colonne A vers la colonne B, et
faire des copier-collés à répétition pour ajouter dans la colonne A des
séquences de lx ps gn... mais c'est long. Et surtout, je n'ai pas moyen
d'insérer à chaque fois la ligne "ps nom commun" entre deux mots ! (j'ai
plusieurs fichiers de 2000 lignes ou plus)

Tout ce que j'ai trouvé, c'est une macro qui permet d'insérer une ligne
vide entre chaque définition pour bien les séparer. Ca donne:

House
Maison

Wine
Vin

Bottle
Bouteille

etc... La macro est la suivante:

Sub ajoutdeligne()
Dim i As Long, x As Long, lr As Long
x = ActiveSheet.UsedRange.Rows.Count
lr = ActiveCell.SpecialCells(xlLastCell).Row
If 3 > lr Then Exit Sub
If lr / 2 = Int(lr / 2) Then lr = lr + 1
For i = lr To 3 Step -2
Rows(i).EntireRow.Insert
Next i
End Sub

je ne sais pas si ça peut vous aider.

Merci encore !!!







Avatar
Mirandolle
Avec la phase 2 j'ai une erreur de débogage qui apparaît à cette ligne:

ActiveCell.Offset(-1, 0).Select

Et la première ligne (lx....) a disparu, donc cela a décallé tout le
reste :-(

Tu peux voir ce qui ne vas pas ? Au fait, si au lieu de tout faire en
deux colonnes A et B, tout était dans A, séparé par 1 simple espace, ça
irait aussi bien :-)

Merci
PS: mais bon, je peux me débrouiller avec ton autre macro (test 1 et 2),
elle marche bien :)

Mirandolle wrote:
Merci je vais l'essayer tout de suite :-)

Avec le premier je m'en sortais pas mal déjà ;-)

Merci à toi !!!

LSteph wrote:

Re, suite
J'avais ouvert le lien et squeezé la seconde partie, donc
consécutivemement
phase1 et phase2 sur tableau départ:
'***
Sub phase1()
Dim c As Range
Dim test As Boolean
test = True
For Each c In [b:b].Cells
If IsEmpty(c.Offset(0, -1)) Then Exit For
If test Then
c.Value = c.Offset(0, -1)
Else
c.Value = c.Offset(-1, -1)
End If
test = Not test
Next
[a:b].Select
Selection.Sort Key1:=Range("b1")
[b:b].ClearContents

End Sub



Sub phase2()

Application.ScreenUpdating = False
Columns(1).Insert
[b65536].End(xlUp).Offset(1, -1).Select

Do While ActiveCell.Row >= 2
ActiveCell.Offset(-1, 0).Select
ActiveCell = "/gn"
ActiveCell.EntireRow.Insert
ActiveCell = "/ps"
ActiveCell.Offset(0, 1) = "Nom Commun"
ActiveCell.Offset(-1, 0).Select
ActiveCell = "/lx"
ActiveCell.EntireRow.Insert

Loop
Application.ScreenUpdating = True
End Sub
'***
'lSteph





"Mirandolle" a écrit dans le message de news:
42f4b261$0$22299$

Un grand merci à vous tous pour les réponses!

La macro d'Yvan ne fait pas exactement ce que je voulais. Je ne
connaissais pas Cjoint, mais je viens d'uploader deux documents pour
vous montrer.

====> Document 1: forme de départ
(C'est une longue liste compacte et sans espace de mot anglais suivi
de son équivalent en français - je l'ai écourtée car c'est juste pour
l'exemple):
http://cjoint.com/?igppXa1zeI
Ca donne qqchose comme (tout en une colonne A):
House
Maison
Wine
Vin
Bottle
Bouteille
etc...

====> Document 2: forme d'arrivée
http://cjoint.com/?igpqw3BNgn
Ca donne qqchose comme ceci (en deux colonnes cette fois, A pour les
"marqueurs", B pour les mots):
lx House
ps Nom commun
gn Maison

lx Wine
ps Nom commun
gn Vin

etc...

lx ps gn sont des marqueurs arbitraires (pour mon programme de
database, car à la fin je vais exporter ces fiches excel en format
spécial, comme du texte ou presque). NOTEZ: je dois non seulement
rajouter lx devant chaque mot anglais, et gn devant le mot
français, mais aussi insérer entre les deux une ligne avec la
catégorie grammaticale, pour ici: "nom commun" (ps = catégorie
grammaticale)

je peux moi même bien sûr déplacer la colonne A vers la colonne B, et
faire des copier-collés à répétition pour ajouter dans la colonne A
des séquences de lx ps gn... mais c'est long. Et surtout, je n'ai
pas moyen d'insérer à chaque fois la ligne "ps nom commun" entre
deux mots ! (j'ai plusieurs fichiers de 2000 lignes ou plus)

Tout ce que j'ai trouvé, c'est une macro qui permet d'insérer une
ligne vide entre chaque définition pour bien les séparer. Ca donne:

House
Maison

Wine
Vin

Bottle
Bouteille

etc... La macro est la suivante:

Sub ajoutdeligne()
Dim i As Long, x As Long, lr As Long
x = ActiveSheet.UsedRange.Rows.Count
lr = ActiveCell.SpecialCells(xlLastCell).Row
If 3 > lr Then Exit Sub
If lr / 2 = Int(lr / 2) Then lr = lr + 1
For i = lr To 3 Step -2
Rows(i).EntireRow.Insert
Next i
End Sub

je ne sais pas si ça peut vous aider.

Merci encore !!!










Avatar
LSteph
Sur ton classeur exemple qui démarre ligne1
je n'ai pas cette erreur en lançant phase1 et phase2 consécutivement
http://cjoint.com/?igt3AnOWBy

lSteph

"Mirandolle" a écrit dans le message de news:
42f4e93f$0$917$
Avec la phase 2 j'ai une erreur de débogage qui apparaît à cette ligne:

ActiveCell.Offset(-1, 0).Select

Et la première ligne (lx....) a disparu, donc cela a décallé tout le
reste :-(

Tu peux voir ce qui ne vas pas ? Au fait, si au lieu de tout faire en deux
colonnes A et B, tout était dans A, séparé par 1 simple espace, ça irait
aussi bien :-)

Merci
PS: mais bon, je peux me débrouiller avec ton autre macro (test 1 et 2),
elle marche bien :)

Mirandolle wrote:
Merci je vais l'essayer tout de suite :-)

Avec le premier je m'en sortais pas mal déjà ;-)

Merci à toi !!!

LSteph wrote:

Re, suite
J'avais ouvert le lien et squeezé la seconde partie, donc
consécutivemement
phase1 et phase2 sur tableau départ:
'***
Sub phase1()
Dim c As Range
Dim test As Boolean
test = True
For Each c In [b:b].Cells
If IsEmpty(c.Offset(0, -1)) Then Exit For
If test Then
c.Value = c.Offset(0, -1)
Else
c.Value = c.Offset(-1, -1)
End If
test = Not test
Next
[a:b].Select
Selection.Sort Key1:=Range("b1")
[b:b].ClearContents

End Sub



Sub phase2()

Application.ScreenUpdating = False
Columns(1).Insert
[b65536].End(xlUp).Offset(1, -1).Select

Do While ActiveCell.Row >= 2
ActiveCell.Offset(-1, 0).Select
ActiveCell = "/gn"
ActiveCell.EntireRow.Insert
ActiveCell = "/ps"
ActiveCell.Offset(0, 1) = "Nom Commun"
ActiveCell.Offset(-1, 0).Select
ActiveCell = "/lx"
ActiveCell.EntireRow.Insert

Loop
Application.ScreenUpdating = True
End Sub
'***
'lSteph





"Mirandolle" a écrit dans le message de news:
42f4b261$0$22299$

Un grand merci à vous tous pour les réponses!

La macro d'Yvan ne fait pas exactement ce que je voulais. Je ne
connaissais pas Cjoint, mais je viens d'uploader deux documents pour
vous montrer.

====> Document 1: forme de départ
(C'est une longue liste compacte et sans espace de mot anglais suivi de
son équivalent en français - je l'ai écourtée car c'est juste pour
l'exemple):
http://cjoint.com/?igppXa1zeI
Ca donne qqchose comme (tout en une colonne A):
House
Maison
Wine
Vin
Bottle
Bouteille
etc...

====> Document 2: forme d'arrivée
http://cjoint.com/?igpqw3BNgn
Ca donne qqchose comme ceci (en deux colonnes cette fois, A pour les
"marqueurs", B pour les mots):
lx House
ps Nom commun
gn Maison

lx Wine
ps Nom commun
gn Vin

etc...

lx ps gn sont des marqueurs arbitraires (pour mon programme de
database, car à la fin je vais exporter ces fiches excel en format
spécial, comme du texte ou presque). NOTEZ: je dois non seulement
rajouter lx devant chaque mot anglais, et gn devant le mot français,
mais aussi insérer entre les deux une ligne avec la catégorie
grammaticale, pour ici: "nom commun" (ps = catégorie grammaticale)

je peux moi même bien sûr déplacer la colonne A vers la colonne B, et
faire des copier-collés à répétition pour ajouter dans la colonne A des
séquences de lx ps gn... mais c'est long. Et surtout, je n'ai pas
moyen d'insérer à chaque fois la ligne "ps nom commun" entre deux mots
! (j'ai plusieurs fichiers de 2000 lignes ou plus)

Tout ce que j'ai trouvé, c'est une macro qui permet d'insérer une ligne
vide entre chaque définition pour bien les séparer. Ca donne:

House
Maison

Wine
Vin

Bottle
Bouteille

etc... La macro est la suivante:

Sub ajoutdeligne()
Dim i As Long, x As Long, lr As Long
x = ActiveSheet.UsedRange.Rows.Count
lr = ActiveCell.SpecialCells(xlLastCell).Row
If 3 > lr Then Exit Sub
If lr / 2 = Int(lr / 2) Then lr = lr + 1
For i = lr To 3 Step -2
Rows(i).EntireRow.Insert
Next i
End Sub

je ne sais pas si ça peut vous aider.

Merci encore !!!












Avatar
Mirandolle
Je viens de réessayé et cette fois ça à marché! Pas d'erreur.

En fait, dans ma database j'arrive maintenant à retrier par ordre
alphabétique, donc j'ai juste à appliquer la phase 2 sur les listes!!!
Génial!

ENCORE MILLE FOIS MERCI LSeph !!!!!!!

Mirandolle

LSteph wrote:
Sur ton classeur exemple qui démarre ligne1
je n'ai pas cette erreur en lançant phase1 et phase2 consécutivement
http://cjoint.com/?igt3AnOWBy

lSteph

"Mirandolle" a écrit dans le message de news:
42f4e93f$0$917$

Avec la phase 2 j'ai une erreur de débogage qui apparaît à cette ligne:

ActiveCell.Offset(-1, 0).Select

Et la première ligne (lx....) a disparu, donc cela a décallé tout le
reste :-(

Tu peux voir ce qui ne vas pas ? Au fait, si au lieu de tout faire en deux
colonnes A et B, tout était dans A, séparé par 1 simple espace, ça irait
aussi bien :-)

Merci
PS: mais bon, je peux me débrouiller avec ton autre macro (test 1 et 2),
elle marche bien :)

Mirandolle wrote:

Merci je vais l'essayer tout de suite :-)

Avec le premier je m'en sortais pas mal déjà ;-)

Merci à toi !!!

LSteph wrote:


Re, suite
J'avais ouvert le lien et squeezé la seconde partie, donc
consécutivemement
phase1 et phase2 sur tableau départ:
'***
Sub phase1()
Dim c As Range
Dim test As Boolean
test = True
For Each c In [b:b].Cells
If IsEmpty(c.Offset(0, -1)) Then Exit For
If test Then
c.Value = c.Offset(0, -1)
Else
c.Value = c.Offset(-1, -1)
End If
test = Not test
Next
[a:b].Select
Selection.Sort Key1:=Range("b1")
[b:b].ClearContents

End Sub



Sub phase2()

Application.ScreenUpdating = False
Columns(1).Insert
[b65536].End(xlUp).Offset(1, -1).Select

Do While ActiveCell.Row >= 2
ActiveCell.Offset(-1, 0).Select
ActiveCell = "/gn"
ActiveCell.EntireRow.Insert
ActiveCell = "/ps"
ActiveCell.Offset(0, 1) = "Nom Commun"
ActiveCell.Offset(-1, 0).Select
ActiveCell = "/lx"
ActiveCell.EntireRow.Insert

Loop
Application.ScreenUpdating = True
End Sub
'***
'lSteph





"Mirandolle" a écrit dans le message de news:
42f4b261$0$22299$


Un grand merci à vous tous pour les réponses!

La macro d'Yvan ne fait pas exactement ce que je voulais. Je ne
connaissais pas Cjoint, mais je viens d'uploader deux documents pour
vous montrer.

====> Document 1: forme de départ
(C'est une longue liste compacte et sans espace de mot anglais suivi de
son équivalent en français - je l'ai écourtée car c'est juste pour
l'exemple):
http://cjoint.com/?igppXa1zeI
Ca donne qqchose comme (tout en une colonne A):
House
Maison
Wine
Vin
Bottle
Bouteille
etc...

====> Document 2: forme d'arrivée
http://cjoint.com/?igpqw3BNgn
Ca donne qqchose comme ceci (en deux colonnes cette fois, A pour les
"marqueurs", B pour les mots):
lx House
ps Nom commun
gn Maison

lx Wine
ps Nom commun
gn Vin

etc...

lx ps gn sont des marqueurs arbitraires (pour mon programme de
database, car à la fin je vais exporter ces fiches excel en format
spécial, comme du texte ou presque). NOTEZ: je dois non seulement
rajouter lx devant chaque mot anglais, et gn devant le mot français,
mais aussi insérer entre les deux une ligne avec la catégorie
grammaticale, pour ici: "nom commun" (ps = catégorie grammaticale)

je peux moi même bien sûr déplacer la colonne A vers la colonne B, et
faire des copier-collés à répétition pour ajouter dans la colonne A des
séquences de lx ps gn... mais c'est long. Et surtout, je n'ai pas
moyen d'insérer à chaque fois la ligne "ps nom commun" entre deux mots
! (j'ai plusieurs fichiers de 2000 lignes ou plus)

Tout ce que j'ai trouvé, c'est une macro qui permet d'insérer une ligne
vide entre chaque définition pour bien les séparer. Ca donne:

House
Maison

Wine
Vin

Bottle
Bouteille

etc... La macro est la suivante:

Sub ajoutdeligne()
Dim i As Long, x As Long, lr As Long
x = ActiveSheet.UsedRange.Rows.Count
lr = ActiveCell.SpecialCells(xlLastCell).Row
If 3 > lr Then Exit Sub
If lr / 2 = Int(lr / 2) Then lr = lr + 1
For i = lr To 3 Step -2
Rows(i).EntireRow.Insert
Next i
End Sub

je ne sais pas si ça peut vous aider.

Merci encore !!!
















Avatar
LSteph
;-) Super!
A+

lSteph

"Mirandolle" a écrit dans le message de news:
42f4fa0d$0$25021$
Je viens de réessayé et cette fois ça à marché! Pas d'erreur.

En fait, dans ma database j'arrive maintenant à retrier par ordre
alphabétique, donc j'ai juste à appliquer la phase 2 sur les listes!!!
Génial!

ENCORE MILLE FOIS MERCI LSeph !!!!!!!

Mirandolle

LSteph wrote:
Sur ton classeur exemple qui démarre ligne1
je n'ai pas cette erreur en lançant phase1 et phase2 consécutivement
http://cjoint.com/?igt3AnOWBy

lSteph

"Mirandolle" a écrit dans le message de news:
42f4e93f$0$917$

Avec la phase 2 j'ai une erreur de débogage qui apparaît à cette ligne:

ActiveCell.Offset(-1, 0).Select

Et la première ligne (lx....) a disparu, donc cela a décallé tout le
reste :-(

Tu peux voir ce qui ne vas pas ? Au fait, si au lieu de tout faire en
deux colonnes A et B, tout était dans A, séparé par 1 simple espace, ça
irait aussi bien :-)

Merci
PS: mais bon, je peux me débrouiller avec ton autre macro (test 1 et 2),
elle marche bien :)

Mirandolle wrote:

Merci je vais l'essayer tout de suite :-)

Avec le premier je m'en sortais pas mal déjà ;-)

Merci à toi !!!

LSteph wrote:


Re, suite
J'avais ouvert le lien et squeezé la seconde partie, donc
consécutivemement
phase1 et phase2 sur tableau départ:
'***
Sub phase1()
Dim c As Range
Dim test As Boolean
test = True
For Each c In [b:b].Cells
If IsEmpty(c.Offset(0, -1)) Then Exit For
If test Then
c.Value = c.Offset(0, -1)
Else
c.Value = c.Offset(-1, -1)
End If
test = Not test
Next
[a:b].Select
Selection.Sort Key1:=Range("b1")
[b:b].ClearContents

End Sub



Sub phase2()

Application.ScreenUpdating = False
Columns(1).Insert
[b65536].End(xlUp).Offset(1, -1).Select

Do While ActiveCell.Row >= 2
ActiveCell.Offset(-1, 0).Select
ActiveCell = "/gn"
ActiveCell.EntireRow.Insert
ActiveCell = "/ps"
ActiveCell.Offset(0, 1) = "Nom Commun"
ActiveCell.Offset(-1, 0).Select
ActiveCell = "/lx"
ActiveCell.EntireRow.Insert

Loop
Application.ScreenUpdating = True
End Sub
'***
'lSteph





"Mirandolle" a écrit dans le message de news:
42f4b261$0$22299$


Un grand merci à vous tous pour les réponses!

La macro d'Yvan ne fait pas exactement ce que je voulais. Je ne
connaissais pas Cjoint, mais je viens d'uploader deux documents pour
vous montrer.

====> Document 1: forme de départ
(C'est une longue liste compacte et sans espace de mot anglais suivi
de son équivalent en français - je l'ai écourtée car c'est juste pour
l'exemple):
http://cjoint.com/?igppXa1zeI
Ca donne qqchose comme (tout en une colonne A):
House
Maison
Wine
Vin
Bottle
Bouteille
etc...

====> Document 2: forme d'arrivée
http://cjoint.com/?igpqw3BNgn
Ca donne qqchose comme ceci (en deux colonnes cette fois, A pour les
"marqueurs", B pour les mots):
lx House
ps Nom commun
gn Maison

lx Wine
ps Nom commun
gn Vin

etc...

lx ps gn sont des marqueurs arbitraires (pour mon programme de
database, car à la fin je vais exporter ces fiches excel en format
spécial, comme du texte ou presque). NOTEZ: je dois non seulement
rajouter lx devant chaque mot anglais, et gn devant le mot français,
mais aussi insérer entre les deux une ligne avec la catégorie
grammaticale, pour ici: "nom commun" (ps = catégorie grammaticale)

je peux moi même bien sûr déplacer la colonne A vers la colonne B, et
faire des copier-collés à répétition pour ajouter dans la colonne A
des séquences de lx ps gn... mais c'est long. Et surtout, je n'ai
pas moyen d'insérer à chaque fois la ligne "ps nom commun" entre deux
mots ! (j'ai plusieurs fichiers de 2000 lignes ou plus)

Tout ce que j'ai trouvé, c'est une macro qui permet d'insérer une
ligne vide entre chaque définition pour bien les séparer. Ca donne:

House
Maison

Wine
Vin

Bottle
Bouteille

etc... La macro est la suivante:

Sub ajoutdeligne()
Dim i As Long, x As Long, lr As Long
x = ActiveSheet.UsedRange.Rows.Count
lr = ActiveCell.SpecialCells(xlLastCell).Row
If 3 > lr Then Exit Sub
If lr / 2 = Int(lr / 2) Then lr = lr + 1
For i = lr To 3 Step -2
Rows(i).EntireRow.Insert
Next i
End Sub

je ne sais pas si ça peut vous aider.

Merci encore !!!

















1 2