Plage vers une colonne

Bonjour a tous,

J'ai un fichier dans lequel j'ai une plage de données (dynamique).

J'aimerais extraire chaque nom de cette liste pour la réunir en une seule colonne(a), pour pouvoir compter le nombre d'occurence de chaque.

Mais la je coince....

J'ai commencé quelque chose, mais je ne sais pas ou je m'en vais. Est ce que quelqu'un peut m'aider?

Merci

8test2.xlsm (20.09 Ko)

Bonjour,

Un essai ...

Copier les colonnes à la queue leu leu en A

Supprimer les doublons

Sub Bouton4_cliquer()
Dim DCol As Integer
Dim dLig1 As Integer
Dim dLig2 As Integer
Dim X As Integer

DCol = Cells(2, Cells.Columns.Count).End(xlToLeft).Column   ' dernière colonne

For X = 3 To DCol                                           ' de la colonne 3 à la dernière colonne
   dLig1 = Cells(Rows.Count, "A").End(xlUp).Row + 1         ' dernière ligne de A
   dLig2 = Cells(Rows.Count, X).End(xlUp).Row               ' dernière ligne de la colonne copiée
   Range(Cells(2, X), Cells(dLig2, X)).Copy Cells(dLig1, "A")  ' copie la colonne en A
Next X

   dLig1 = Cells(Rows.Count, "A").End(xlUp).Row + 1         ' dernièr ligne de A
    Columns("A:A").Select
    ActiveSheet.Range("$A$1:$A$" & dLig1).RemoveDuplicates Columns:=1, Header:=xlYes   ' supprime les doublons
   Cells(2, 2).ClearContents                                                           ' vide B2
   Cells(2, 2).Value = Application.WorksheetFunction.CountA(Range("A1:A" & Cells(Rows.Count, "A").End(xlUp).Row)) ' écrit le nombre en B2
   Cells(2, 2).Select
End Sub

ric

bonjour,

edit : salut ric

une proposition (ne fonctionne pas sur mac)

Sub Bouton4_Cliquer()
    derncol = Cells(2, Cells.Columns.Count).End(xlToLeft).Column
    Set dict = CreateObject("scripting.dictionary")
    For col = 3 To derncol
        dl = Cells(Rows.Count, col).End(xlUp).Row
        For lig = 2 To dl
            dict(Cells(lig, col).Value) = dict(Cells(lig, col).Value) + 1
        Next lig
    Next col
    Cells(2, 1).Resize(dict.Count) = Application.Transpose(dict.keys)
    Cells(2, 2).Resize(dict.Count) = Application.Transpose(dict.items)
End Sub

Bonjour à tous,

le code proposé ne fonctionne pas car la détermination de la ligne "libre" colonne A est erronée

li = Range("a1").End(xlUp).Row + 1

à chaque itération de la boucle For i=... quelles que soient les cellules "occupées"

Range("a1") = on se positionne en A1

.End(xlUp) = on "remonte" vers la première ligne occupée (donc A1)

.Row = on renvoie le N° de ligne ( donc 1)

il faudrait utilisé l'instruction proposée par ric ou celle ci:

li = Range("A" & Rows.Count).End(xlUp).Row + 1

Range("A" & Rows.Count) = on se positionne sur la toute dernière ligne de la colonne A

.End(xlUp) = on remonte à la première ligne occupée (A1 en première itération, Ax à la seconde...)

A+

bonjour,

edit : salut ric

une proposition (ne fonctionne pas sur mac)

Sub Bouton4_Cliquer()
    derncol = Cells(2, Cells.Columns.Count).End(xlToLeft).Column
    Set dict = CreateObject("scripting.dictionary")
    For col = 3 To derncol
        dl = Cells(Rows.Count, col).End(xlUp).Row
        For lig = 2 To dl
            dict(Cells(lig, col).Value) = dict(Cells(lig, col).Value) + 1
        Next lig
    Next col
    Cells(2, 1).Resize(dict.Count) = Application.Transpose(dict.keys)
    Cells(2, 2).Resize(dict.Count) = Application.Transpose(dict.items)
End Sub

Merci h2so4

C'est exactement ce que je voulais.

Merci a tous pour vos réponses

bonjour,

edit : salut ric

une proposition (ne fonctionne pas sur mac)

Sub Bouton4_Cliquer()
    derncol = Cells(2, Cells.Columns.Count).End(xlToLeft).Column
    Set dict = CreateObject("scripting.dictionary")
    For col = 3 To derncol
        dl = Cells(Rows.Count, col).End(xlUp).Row
        For lig = 2 To dl
            dict(Cells(lig, col).Value) = dict(Cells(lig, col).Value) + 1
        Next lig
    Next col
    Cells(2, 1).Resize(dict.Count) = Application.Transpose(dict.keys)
    Cells(2, 2).Resize(dict.Count) = Application.Transpose(dict.items)
End Sub

Est ce normal qu'il me compte aussi les cellules vide?

En fin de liste j'ai une cellule vide et un nombre a coté.

Bonjour,

s'il y a des cellules vides avant le dernière ligne des colonnes contenant les prénoms, c'est normal.

voici une correction

Sub Bouton4_Cliquer()
    derncol = Cells(2, Cells.Columns.Count).End(xlToLeft).Column
    Set dict = CreateObject("scripting.dictionary")
    For col = 3 To derncol
        dl = Cells(Rows.Count, col).End(xlUp).Row
        For lig = 2 To dl
            If Cells(lig, col) = "" Or Trim(Cells(lig, col)) = " " Then
            Else
                dict(Cells(lig, col).Value) = dict(Cells(lig, col).Value) + 1
            End If
        Next lig
    Next col
    Cells(2, 1).Resize(dict.Count) = Application.Transpose(dict.keys)
    Cells(2, 2).Resize(dict.Count) = Application.Transpose(dict.items)
End Sub

Non, il n'y a pas de cellule vide dans les plages, mais ça compte la dernière cellule de la colonne qui elle est vide.

Mais merci de ta réponse

Bonjour,

Non, il n'y a pas de cellule vide dans les plages, mais ça compte la dernière cellule de la colonne qui elle est vide

c'est que la dernière ligne (d'une) des plages contient autre chose que du vide ou des espaces.

avec le fichier exemple que tu as mis, il n'y a pas ce comptage. Peux-tu mettre un fichier dans lequel tu as ce problème ?

Bonjour,

Non, il n'y a pas de cellule vide dans les plages, mais ça compte la dernière cellule de la colonne qui elle est vide

c'est que la dernière ligne (d'une) des plages contient autre chose que du vide ou des espaces.

avec le fichier exemple que tu as mis, il n'y a pas ce comptage. Peux-tu mettre un fichier dans lequel tu as ce problème ?

Honte a moi, j'ai fait une mauvaise manipulation en copiant des données et il y avait des formules dans des cellules.

Ca fonctionne Nickel

Encore Merci

Rechercher des sujets similaires à "plage colonne"