Regrouper cellules non vide dans colonne

Bonjour,

je souhaiterai copier toutes les cellules non vides d'un tableau

dans une colonne séparée de la même feuille

les cellules se copiant les unes à la suite des autres

dans l'ordre de lecture colonne /ligne

eg: A1,A2,A45 etc,B1,B56 etc

40 colonnes, 500 lignes par colonnes

Bonsoir,

A essayer :

Sub Rassembler()
    Dim T(), i%, k%, n%
    With ActiveSheet.Range("A1:AN500")
        n = WorksheetFunction.CountA(.Cells)
        ReDim T(1 To n, 1 To 1): n = 0
        For k = 1 To 40
            For i = 1 To 500
                If Not IsEmpty(.Cells(i, k)) Then
                    n = n + 1: T(n, 1) = .Cells(i, k)
                End If
            Next i
        Next k
        .Range("AP1:AP" & n).Value = T
    End With
End Sub

Cordialement.

Bonjour MFerrand,

Merci pour la réponse rapide

la réponse est bien dans le sens que j'espérai

la colonne AP de regroupement se remplie

avec les valeurs des autres colonnes

mais en faisant un saut de 500 lignes

entre les valeurs récupérées de chaque colonne

d'autre part, si c'est possible, je souhaiterai démarrer le scan des valeurs à la ligne 5

cordialement

Bonjour,

mais en faisant un saut de 500 lignes

Pas possible !

L'affectation se fait par tableau en une seule fois.

Ci joint fichier après application du code tel quel

en colonne AP la collecte des valeurs semble tenir compte du nombre de ligne initial

189regroupement.xlsx (196.52 Ko)

Fichier xlsx (sans macro !). Je ne peux donc voir ce que tu as appliqué !

erreur de débutant

197regroupe.xlsm (202.58 Ko)

Le nombre de valeurs dénombrées dans ton fichier est de 14385 dans la plage A5:AN500 !

Voilà qui explique l'extension...

Je regarderai de plus près plus tard (infirmière en vue...)

Test : j'efface une cellule "vide" : le nombre de valeurs diminue d' 1, 14384 !

Quelle est l'origine de ce tableau ?

Version adaptée aux particularités de ton fichier :

Sub Rassembler()
    Dim T(), i%, k%, n%
    With ActiveSheet.Range("A5:AN500")
        'n = WorksheetFunction.CountA(.Cells)
        n = .Cells.Count - WorksheetFunction.CountBlank(.Cells)
        ReDim T(1 To n, 1 To 1): n = 0
        For k = 1 To 40
            For i = 1 To 495
                'If Not IsEmpty(.Cells(i, k)) Then
                If .Cells(i, k) <> "" Then
                    n = n + 1: T(n, 1) = .Cells(i, k)
                End If
            Next i
        Next k
        .Range("AP1:AP" & n).Value = T
    End With
End Sub

On ne dimensionne plus en utilisant CountA mais avec CountBlank qui compte les cellules vides et contenant des valeurs "vides" qu'on soustrait du nombre total de cellules (CountIf ne donnerait pas non plus le bon résultat dans ce cas).

Et on teste avec <>"" (qui élimine de la même façon les cellules vides ou contenant des chaînes vides.

Pour ramener la plage à A5:AN500, on met cette plage au lieu de A1:AN500 au départ. Et on modifie la boucle i = 1 to 495 (puisqu'il n'y a plus que 495 lignes). Et pas d'autres modifications car tous les autres adressages réfèrent à cette plage (adressé donc comme si A5 était A1...)

Cordialement.

90laucsap-regroupe.xlsm (107.07 Ko)
Rechercher des sujets similaires à "regrouper vide colonne"