Excel: Regroupement de cellules

Résolu
Comment regrouper dans une seule colonne les cellules (non vides) disséminées dans un tableau excel (plusieurs colonnes et plusieurs lignes).
Merci de l'aide

5 réponses

  1. Contributeur
    Bonjour,

    Merci de déposer le fichier xls sur cjoint.com et coller ici le lien fourni.
    Qu'on sache si les cellules supposées vides le sont réellement.
    Précise aussi dessus où tu veux le résultat.
    eric
    1. Bonjour,
      Voici le lien:
      https://www.cjoint.com/c/JDhilkHxImH

      Remarque: le document joint n'est qu'un court extrait pris au hasard dans les tableaux que j'ai à traiter (environ 25 tableaux de chacun 50 à 500 colonnes et 50 à 150 lignes).
      Dans ces tableaux, j'ai constaté que les cellules apparaissant vides répondent 'non vides' à la formule 'Estvide'.
      Merci de votre aide.
      André
      1. Contributeur
        Tu aurais pu lire jusqu'à la 3ème ligne et y répondre...

        Dans ces tableaux, j'ai constaté que les cellules apparaissant vides répondent 'non vides' à la formule 'Estvide'.
        donc tu fournis un fichier non conforme contrairement à ce qui était demandé...
    2. Contributeur
      Avec une macro :
      Sub concatNonVide()
          Const sep As String = ", "
          Dim datas, result() As String, lig As Long, col As Long, msg As String
          If Selection.Cells.Count = 1 Then MsgBox "Sélectionner une plage svp": Exit Sub
          If Selection.Column < 2 Then MsgBox "Il faut 1 colonne libre à gauche de la sélection": Exit Sub
          msg = "Cette action va écraser " & Selection.Resize(, 1).Offset(, -1).Address
          msg = msg & vbLf & "Continuer ?"
          If MsgBox(msg, vbOKCancel, "Confirmation") = vbOK Then
              datas = Selection.Value
              ReDim result(1 To UBound(datas), 1 To 1)
              For lig = 1 To UBound(datas, 1)
                  For col = 1 To UBound(datas, 2)
                      If datas(lig, col) <> "" Then result(lig, 1) = result(lig, 1) & sep & datas(lig, col)
                  Next col
                  If result(lig, 1) <> "" Then result(lig, 1) = Mid(result(lig, 1), Len(sep))
              Next lig
              Selection.Offset(, -1).Resize(UBound(result), 1) = result
          End If
      End Sub 


      la constante sep est le séparateur utilisé, ici ", "
      Pour un retour à la ligne remplacer par vblf

      Tous tes tableaux sont dans le même classeur ?
      Si tu as une multitude de classeur à traiter on peut faire en sorte que tu n'aies pas à copier la macro dans chacun.

      tableaux de chacun 50 à 500 colonnes
      une cellule ne peut contenir que 32000 caractères.

      Regarde si ça te va
      https://www.cjoint.com/c/JDhnKTVsbCV
      eric
      1. Ce résultat me convient totalement; un grand merci.
        Cordialement.
        André