XL pour MAC Tri sur listes noms composés

pierlille

XLDnaute Nouveau
Bonjour,
J'ai une très longue liste composées de PRENOMS et NOMS
Je parviens à l'aide d'une macro à trier cette liste afin de séparer les données qui sont des PRENOMS ou des NOMS composés

VB:
Sub jj()
Dim Derlg As Long, C As Object
Feuil2.Columns("a:b").Clear
Feuil3.Columns("a:b").Clear
For Each C In Range("A1:A" & Cells(Rows.Count, 1).End(xlUp).Row)
    If C Like "* *" Or C Like "*-*" Or C.Offset(, 1) Like "* *" Or C.Offset(, 1) Like "*-*" Then
        Derlg = Feuil2.Cells(Rows.Count, 1).End(xlUp).Row + 1
        Feuil2.Cells(Derlg, 1) = C
        Feuil2.Cells(Derlg, 2) = C.Offset(, 1)
    Else
        Derlg = Feuil3.Cells(Rows.Count, 1).End(xlUp).Row + 1
        Feuil3.Cells(Derlg, 1) = C
        Feuil3.Cells(Derlg, 2) = C.Offset(, 1)
    End If
Next
End Sub

Par contre je ne sais pas comment faire pour trier la même liste qui contient 3 colonnes.
En fait je voudrais faire la même chose qu'avec le code précédent mais en ajoutant un colonne "VILLE"
Mon fichier exemple est disponible ici : LIEN

Merci d'avance pour votre aide.

Pierre
 

Pièces jointes

  • trinoms.xlsm
    22.6 KB · Affichages: 13

Jacky67

XLDnaute Barbatruc
Bonjour,
J'ai une très longue liste composées de PRENOMS et NOMS
Je parviens à l'aide d'une macro à trier cette liste afin de séparer les données qui sont des PRENOMS ou des NOMS composés

VB:
Sub jj()
Dim Derlg As Long, C As Object
Feuil2.Columns("a:b").Clear
Feuil3.Columns("a:b").Clear
For Each C In Range("A1:A" & Cells(Rows.Count, 1).End(xlUp).Row)
    If C Like "* *" Or C Like "*-*" Or C.Offset(, 1) Like "* *" Or C.Offset(, 1) Like "*-*" Then
        Derlg = Feuil2.Cells(Rows.Count, 1).End(xlUp).Row + 1
        Feuil2.Cells(Derlg, 1) = C
        Feuil2.Cells(Derlg, 2) = C.Offset(, 1)
    Else
        Derlg = Feuil3.Cells(Rows.Count, 1).End(xlUp).Row + 1
        Feuil3.Cells(Derlg, 1) = C
        Feuil3.Cells(Derlg, 2) = C.Offset(, 1)
    End If
Next
End Sub

Par contre je ne sais pas comment faire pour trier la même liste qui contient 3 colonnes.
En fait je voudrais faire la même chose qu'avec le code précédent mais en ajoutant un colonne "VILLE"
Mon fichier exemple est disponible ici : LIEN

Merci d'avance pour votre aide.

Pierre
Bonjour
Essaye comme ceci
VB:
Sub jj()
    Dim Derlg As Long, C As Object
    Application.ScreenUpdating = False
    Feuil2.Columns("a:c").Clear: Feuil3.Columns("a:c").Clear
    Feuil1.Range("A1:C1").Copy Feuil2.[a1]: Feuil1.Range("A1:C1").Copy Feuil3.[a1]
    For Each C In Range("A2:A" & Cells(Rows.Count, 1).End(xlUp).Row)
        If C Like "* *" Or C Like "*-*" Or C.Offset(, 1) Like "* *" Or C.Offset(, 1) Like "*-*" Then
            Derlg = Feuil2.Cells(Rows.Count, 1).End(xlUp).Row + 1
            Feuil2.Cells(Derlg, 1) = C
            Feuil2.Cells(Derlg, 2) = C.Offset(, 1)
            Feuil2.Cells(Derlg, 3) = C.Offset(, 2)
        Else
            Derlg = Feuil3.Cells(Rows.Count, 1).End(xlUp).Row + 1
            Feuil3.Cells(Derlg, 1) = C
            Feuil3.Cells(Derlg, 2) = C.Offset(, 1)
            Feuil3.Cells(Derlg, 3) = C.Offset(, 2)
        End If
    Next
    Application.CutCopyMode = False
End Sub
 
Dernière édition:

Jacky67

XLDnaute Barbatruc
Merci Jacky !

J'ai copié/collé le code que vous proposez mais... cela ne fonctionne pas !... Et je ne comprends pas pourquoi ?
Re...
Et qu'est qui ne fonctionne pas ?
Cette macro avec un clic sur le bouton rajoute les villes comme demandé
//En fait je voudrais faire la même chose qu'avec le code précédent mais en ajoutant un colonne "VILLE"//
Si elle est lancé dans l'editeur vba, la feuil1 doit être active, sinon il faut préciser la feuil1 dans
For Each C In Range("A2:A" & Cells(Rows.Count, 1).End(xlUp).Row)
 
Dernière édition:

pierlille

XLDnaute Nouveau
...en fait avec ce code qui est adapté de ce que vous avez proposé j'obtiens ce que je voulais.
Merci beaucoup Jacky :)

VB:
Sub jj()
Dim Derlg As Long, C As Object
Feuil2.Columns("a:b").Clear
Feuil3.Columns("a:b").Clear
For Each C In Range("A1:A" & Cells(Rows.Count, 1).End(xlUp).Row)
    If C Like "* *" Or C Like "*-*" Or C.Offset(, 1) Like "* *" Or C.Offset(, 1) Like "*-*" Then
        Derlg = Feuil2.Cells(Rows.Count, 1).End(xlUp).Row + 1
        Feuil2.Cells(Derlg, 1) = C
        Feuil2.Cells(Derlg, 2) = C.Offset(, 1)
        Feuil2.Cells(Derlg, 3) = C.Offset(, 2)
    Else
        Derlg = Feuil3.Cells(Rows.Count, 1).End(xlUp).Row + 1
        Feuil3.Cells(Derlg, 1) = C
        Feuil3.Cells(Derlg, 2) = C.Offset(, 1)
        Feuil3.Cells(Derlg, 3) = C.Offset(, 2)
    End If
Next
End Sub
 

Jacky67

XLDnaute Barbatruc
...en fait avec ce code qui est adapté de ce que vous avez proposé j'obtiens ce que je voulais.
Merci beaucoup Jacky :)

VB:
Sub jj()
Dim Derlg As Long, C As Object
Feuil2.Columns("a:b").Clear
Feuil3.Columns("a:b").Clear
For Each C In Range("A1:A" & Cells(Rows.Count, 1).End(xlUp).Row)
    If C Like "* *" Or C Like "*-*" Or C.Offset(, 1) Like "* *" Or C.Offset(, 1) Like "*-*" Then
        Derlg = Feuil2.Cells(Rows.Count, 1).End(xlUp).Row + 1
        Feuil2.Cells(Derlg, 1) = C
        Feuil2.Cells(Derlg, 2) = C.Offset(, 1)
        Feuil2.Cells(Derlg, 3) = C.Offset(, 2)
    Else
        Derlg = Feuil3.Cells(Rows.Count, 1).End(xlUp).Row + 1
        Feuil3.Cells(Derlg, 1) = C
        Feuil3.Cells(Derlg, 2) = C.Offset(, 1)
        Feuil3.Cells(Derlg, 3) = C.Offset(, 2)
    End If
Next
End Sub
Re..
Si tu es certain fait le….
Tu n'effaces pas la colonne C des feuilles concernées
Tu commences la lecture en ligne 1 alors que les noms commencent en ligne 2
Tu n' as pas de titre correcte
Mais bon, c'est toi qui vois
 

job75

XLDnaute Barbatruc
Bonsoir pierlille, Jacky67,

Puisque la la liste est longue il ne faut surtout pas travailler sur les cellules mais utiliser des tableaux VBA :
VB:
Sub jj()
Dim ncol%, tablo, resu1(), resu2(), i&, n&, j%, p&
ncol = 3 'nombre de colonnes à adapter éventuellement
tablo = Feuil1.[A1].CurrentRegion.Resize(, ncol) 'matrice, plus rapide
ReDim resu1(1 To UBound(tablo), 1 To ncol)
ReDim resu2(1 To UBound(tablo), 1 To ncol)
For i = 2 To UBound(tablo)
    If InStr(tablo(i, 1) & tablo(i, 2), " ") + InStr(tablo(i, 1) & tablo(i, 2), "-") Then
        n = n + 1
        For j = 1 To ncol: resu1(n, j) = tablo(i, j): Next j
    Else
        p = p + 1
        For j = 1 To ncol: resu2(p, j) = tablo(i, j): Next j
    End If
Next i
With Feuil2.[A2]
    If n Then .Resize(n, ncol) = resu1
    .Offset(n).Resize(Rows.Count - n - .Row + 1, ncol).ClearContents 'RAZ en dessous
End With
With Feuil3.[A2]
    If p Then .Resize(p, ncol) = resu2
    .Offset(p).Resize(Rows.Count - p - .Row + 1, ncol).ClearContents 'RAZ en dessous
End With
End Sub
A+
 

Pièces jointes

  • trinoms(1).xlsm
    24.1 KB · Affichages: 13

Discussions similaires

Statistiques des forums

Discussions
315 098
Messages
2 116 198
Membres
112 681
dernier inscrit
romain38