Microsoft 365 Créer une liste sans cellules vides à partir d'un fichier

MARION 13

XLDnaute Nouveau
Bonjour à tous
Ma demande est probablement modeste mais je me casse les dents sur: Créer une liste sans cellules vides à partir d'un fichier

J'ai un fichier contenant des données sur 92 colonnes et 395 lignes, avec des cellules vides. je dois récupérer par colonne le contenu des cellules non vides.
je précise que ces données sont le résultat de formule (résultats non collés bien sur :)

Help! mon fichier ma demandé toute la semaine ( j'ai appris beaucoup de choses!) mais là je suis épuisée.
S' il y a une âme charitable pour me venir en aide...

1666951580500.png
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonjour,

Enfin pour terminer via VBA. La mise à jour se fait quand on sélectionne la feuille Feuil2.
Les lignes suivantes permettent d'indiquer la source et la cible (à adapter à chaque cas).
Le code est dans le module de la feuille "Feuil2"
VB:
Private Sub Worksheet_Activate()
Dim F1 As Worksheet, base1, nlig1, ncol1, F2 As Worksheet, base2, t, i&, j&, n&, max
   Set F1 = Worksheets("Feuil1"): base1 = "A1": nlig1 = 395: ncol1 = 92
   Set F2 = Worksheets("Feuil2"): base2 = "B3"
   t = F1.Range(base1).Resize(nlig1, ncol1)
   For j = 1 To UBound(t, 2)
      n = 0
      For i = 1 To UBound(t)
         If t(i, j) <> "" Then n = n + 1: t(n, j) = t(i, j)
      Next i
      For i = n + 1 To UBound(t): t(i, j) = "": Next
      If n > max Then max = n
   Next j
   Application.ScreenUpdating = False
   F2.Range(base2).Resize(nlig1, ncol1).Clear
   F2.Range(base2).Resize(UBound(t), UBound(t, 2)) = t
   F1.Range(base1).Resize(max, ncol1).Copy
   F2.Range(base2).PasteSpecial xlPasteFormats
   Application.Goto F2.Range("a1"), True
   Application.CutCopyMode = False
End Sub
 

Pièces jointes

  • MARION 13- copie sans vide- v1.xlsm
    139.8 KB · Affichages: 4

Duriz

XLDnaute Nouveau
Bonjour Marion et bienvenue sur le forum.
Tu trouveras en PJ une proposition qui utilise la fonction filtre.

Bien à toi
Bonjour WTF et à tous ceux qui me liront,
j'ai téléchargé ta PJ, elle ne fonctionne pas pour mon tableau : j'ai un #NOM?
J'ai office 2013 (j'ai modifié les références des cellules à traiter, essayé de bricoler mais ... échec). Pourrais tu m'aider à résoudre mon problème stp ? La fonction "filtre" n'est pas dans la liste de celles proposées via f(x)...
Un grand merci par avance pour ton aide !
Bonne journée
 

fanch55

XLDnaute Barbatruc
Bonjour WTF et à tous ceux qui me liront,
j'ai téléchargé ta PJ, elle ne fonctionne pas pour mon tableau : j'ai un #NOM?
J'ai office 2013 (j'ai modifié les références des cellules à traiter, essayé de bricoler mais ... échec). Pourrais tu m'aider à résoudre mon problème stp ? La fonction "filtre" n'est pas dans la liste de celles proposées via f(x)...
Un grand merci par avance pour ton aide !
Bonne journée
Bonjour, la fonction ne fonctionne qu'avec Office365 ou Excel2021 .
Mais celle de @riton00 devrait convenir .
 

WTF

XLDnaute Impliqué
Bonjour WTF et à tous ceux qui me liront,
j'ai téléchargé ta PJ, elle ne fonctionne pas pour mon tableau : j'ai un #NOM?
J'ai office 2013 (j'ai modifié les références des cellules à traiter, essayé de bricoler mais ... échec). Pourrais tu m'aider à résoudre mon problème stp ? La fonction "filtre" n'est pas dans la liste de celles proposées via f(x)...
Un grand merci par avance pour ton aide !
Bonne journée
Bonjour Duriz, en effet la fonction filtre ne fonctionne pas avec office 2013.
Je te laisse choisir dans les autres solutions proposées
 

Duriz

XLDnaute Nouveau
Bonjour, le fichier téléchargé marche -jusque là tout va bien!- mais quand j'essaye d'appliquer la formule matricielle sur mon classeur, je n'ai pas le résultat escompté... Je joint un fichier (Mayday1)qui montre mon problème. Le tableau ne commence pas ligne 1 ni colonne A volontairement. J'ai essayé pas mal de choses, mais manifestement pas la bonne!
Pouvez vous m'aider svp ?
Merci par avance.
Duriz
 

Pièces jointes

  • Mayday1.xlsx
    10.2 KB · Affichages: 2

job75

XLDnaute Barbatruc
Bonjour Duriz, le fil,

Formule matricielle en P14 :
Code:
=SIERREUR(PETITE.VALEUR(SI(ESTNUM(D$14:D$44);D$14:D$44);LIGNE(P1));"")
à valider par Ctrl+Maj+Entrée et tirer à droite et vers le bas.

A+
 

Pièces jointes

  • Mayday1.xlsx
    15 KB · Affichages: 3

Duriz

XLDnaute Nouveau
Bonjour job75,
ta solution fonctionne à merveille, je l'ai testé avec mise à jour sur plusieurs mois.
Tu as résolu mon problème 3/4 d'heure après que je l'ai exposé vs moi qui me casse les dents dessus depuis 2 semaines !!!
Ton aide a été déterminante MERCI 🙏
 

job75

XLDnaute Barbatruc
S'il y a beaucoup de cellules le recalcul des formules prendra du temps.

Pour aller vite on peut utiliser cette macro :
VB:
Sub Grouper()
Dim nlig&, ncol%, tablo, resu(), j%, n&, i&
With Range("D13:L" & Cells.SpecialCells(xlCellTypeLastCell).Row)
    nlig = .Rows.Count
    ncol = .Columns.Count
    tablo = .Value 'matrice, plus rapide
    ReDim resu(1 To nlig, 1 To ncol)
    For j = 1 To ncol
        n = 0
        For i = 1 To nlig
            If tablo(i, j) <> "" Then
                n = n + 1
                resu(n, j) = tablo(i, j)
            End If
    Next i, j
    .Offset(, 12) = resu
End With
End Sub
Testée en recopiant la plage D14:L43 sur 30 000 lignes elle s'exécute en 0,3 seconde.
 

Pièces jointes

  • Mayday VBA(1).xlsm
    18.8 KB · Affichages: 3

Discussions similaires

Statistiques des forums

Discussions
312 196
Messages
2 086 102
Membres
103 117
dernier inscrit
augustin.morille