Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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

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 !

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

 
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

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
 
Bonjour, la fonction ne fonctionne qu'avec Office365 ou Excel2021 .
Mais celle de @riton00 devrait convenir .
 
Bonjour Duriz, en effet la fonction filtre ne fonctionne pas avec office 2013.
Je te laisse choisir dans les autres solutions proposées
 
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

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

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 🙏
 
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

- 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

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…