XL pour MAC Tri sur listes noms composés

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

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:
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:
...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
 
...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
 
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

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
4
Affichages
400
Réponses
10
Affichages
714
Réponses
2
Affichages
285
Retour