XL 2013 besoins d'aide

esftel

XLDnaute Occasionnel
Bonjour le forum,

Sur une Table plusieurs colonnes sont rempli mais certaines colonne possèdent des cellules vide et je souhaiterais regrouper via une formule (éventuellement vba), les données cote à cote.
Bref je ne souhaiterais ne plus avoir de cellule vide sur une ligne de la gauche vers la droite, tout en gardant l'ordre des données d'origine.

Exemple:
Colonne 1 Colonne2 Colonne3
donnée1 xxxxxxxxxx Donnée2
xxxxxxxxxx Donnée1xxxxxxxxxxxx

Résultat souhaité:
Colonne 1 Colonne2 Colonne3
Donnée1 Donnée2
Donnée1

je vous propose de regarder le fichier joint pour un exemple plus claire.

Merci de votre aide
 

Pièces jointes

  • 20161015FTI.xlsx
    10.1 KB · Affichages: 58
Dernière édition:

Modeste

XLDnaute Barbatruc
Bonsoir esftel,

On est d'accord que par formule, la chose n'est possible que dans un second tableau (comme dans ton exemple)?
Si oui, alors essaie, en H4:
Code:
=SIERREUR(INDEX($C4:$F4;1;PETITE.VALEUR(SI($C4:$F4<>"";COLONNE($C4:$F4)-2);COLONNES($A:A)));"")
Attention, c'est une formule matricielle; il faut valider avec la combinaison Ctrl+Shift+Enter (au lieu de la seule touche Enter. Des accolades devraient apparaître autour de la formule)
 

esftel

XLDnaute Occasionnel
Bonsoir Modeste,

Oui en effet, via la méthode formule, il me faut un autre tableau pour rapprocher mes données.
Cela fait un moment que je suis dessus et je pensais à une matricielle, mais je ne savais pas comment l'aborder.
(il faut vraiment que je me mets à la matricielle)

Sans vouloir abusé, aurais tu une méthode non matricielle ou VBA.
Pour tout te dire, je traite un Table de plus de 10000 lignes et mon PC est un peu lent :)

En tout cas un grand merci pour cette matricielle, elle fonctionne super bien.

A+
 

Staple1600

XLDnaute Barbatruc
Bonsoir à tous, [pj]Modeste le grammophile ;)[/pj]

J'ai compris autre chose
(donc avec le tri, option gauche vers la droite)
VB:
Sub a()
Dim i As Long
For i = 4 To 7
Cells(i, "C").Resize(, 4).Sort Key1:=Cells(i, "C").Resize(, 4), Order1:=xlAscending, Orientation:=xlLeftToRight
Next
End Sub
 

Modeste

XLDnaute Barbatruc
Re,
Salut le grammophon e :)

On aurait aussi pu:

  • sélectionner la plage
  • appuyer sur F5 > Cellules... > Cellules vides > OK
  • une fois la sélection faite, Ctrl+- (touche Contrôle et signe moins) > Décaler les cellules vers la gauche
... Mais je n'y ai pensé qu'en voyant le joli tri horizontal de l'agrafe
 

esftel

XLDnaute Occasionnel
Salut a vous,

Vos méthodes sont supers, vraiment... , mais celles-ci me posent chacune un problème.
- Staple 1600 : pour ta méthode vba c'est le trie = je dois garder l'ordre des données
- Modeste : la tienne (que j'avais aussi oublié), c'est le décalage des colonnes vers la gauche ;)

En tous cas, je les gardes, je vais voir si je peux les adapter sur mon fichier de travail.

un très grand merci à vous
 

Modeste

XLDnaute Barbatruc
Bonjour esftel,
Salut au dernier fan (vivant) de Mireille :)

Si le décalage de cellules vers la gauche pose problème ... c'est donc qu'il y a quelque chose sur la même ligne (à droite)? Mais quoi? Le second tableau de l'exemple? Il doit donc exister obligatoirement? Et donc, tu ne peux pas non plus copier le premier tableau plus loin à droite et y refaire la manip pour supprimer les cellules vides?

Par ailleurs, en relisant ton premier message, j'y trouve "en gardant l'ordre des données d'origine" alors que dans ton fichier figurait discrètement "les intitulés de colonne peuvent changer d'un tableau à l'autre". En clair, donc, on recopie sur la même ligne, sans les cellules vides et on ne tient aucun compte des titres de colonnes?
 

Staple1600

XLDnaute Barbatruc
Bonjour à tous

Modeste
Nous avons Mireille, vous aviez Yvonne
Et faudrait voir à pas trop me titiller, parce que c'est quand même votre beau pays qui nous a refilé le petit Jean-Philippe S. ;)
(heureusement pour compenser y'a le grand Jacques)

Pour revenir à la question, , si le tri [gauche vers la droite] n'est pas la solution, alors tout comme toi je ne comprends pas ce qu'il faut faire.
 

Modeste

XLDnaute Barbatruc
Pour J-P S., justement on ne savait pas quoi en faire ... on a botté en touche ... et pas regardé où il atterrissait. Mais j'en connais qui aiment (si, si!)
Pour Yvonne, par contre, je m'incline: c'est vache de faire ça à n'importe quel tympan! Toutes nos excuses a posteriori (non, je ne demande pas pardon à un chanteur italien!)
Je ne dirai rien de Jacques: je me ferais des ennemis pour l'éternité (il aura peut-être aussi le Nobel un jour) :cool:
 

Modeste

XLDnaute Barbatruc
pourquoi le tri ne convient pas à ton avis ?
C'est esftel qui devrait répondre, mais avec le tri horizontal, à la ligne 5 de son fichier, "aliment" passerait à gauche de "four" ... l'ordre des données apparemment ne doit pas être modifié, crois-je comprendre ;)

Et attention, ce Jacques-là, auteur au génie incontesté de "El quèzène au Mambourg" a déjà un Boulevard à son nom (... du Boulevard au Nobel, à Charleroi, il n'y a qu'un pas!) ... @gosselien pourrait t'interpréter la chanson, si ça se trouve!
 

esftel

XLDnaute Occasionnel
Bonjour Messieurs,

Staple 1600,
Pour la question en effet le tri a gauche ne convient pas pour l'ordre des données.
Je souhaiterais que les données soient décalées vers la gauche tout en gardant l'ordre de saisie comme l'indique Modeste.
Exemple : Four Aliment - et non - Aliment Four

Modeste,
"les intitulés de colonne peuvent changer d'un tableau à l'autre". En clair, donc, on recopie sur la même ligne, sans les cellules vides et on ne tient aucun compte des titres de colonnes?

En effet, il y a autre chose derrière et c'est justement le regroupement des données et là l'intitulé des colonnes n'ont plus d'importance.
Cela dit l'idée de copier le tblx d'origine est en effet une solution peut être même la solution !
Mais, pour tout te dire, je ne sais pas encore si il y aura encore autre chose derrière. (désolé pour ce manque d'info).

En tous cas, grasse à vous deux j'ai déjà plusieurs pistes fiable pour mon fichier.

Encore merci pour vos réponses,

a+
 

Paf

XLDnaute Barbatruc
Bonjour esftel, Modeste, staple1600,

un essai macro :

VB:
Private Sub CommandButton1_Click()
Dim Tablo, OK As Boolean, Plage As Range, i As Long, j As Long, k As Long
With Worksheets("Feuil1")
Tablo = Range("C4:F" & .Range("A" & Rows.Count).End(xlUp).Row) ' à adapter
For i = LBound(Tablo, 1) To UBound(Tablo, 1)
    OK = False
    x = 0
    For j = LBound(Tablo, 2) To UBound(Tablo, 2)
        If Tablo(i, j) <> "" Then x = x + 1
    Next
    If x > 0 Then
        While OK = False
            For j = LBound(Tablo, 2) To UBound(Tablo, 2) - 1
                If Tablo(i, j) = "" Then
                    temp = Tablo(i, j)
                    Tablo(i, j) = Tablo(i, j + 1)
                    Tablo(i, j + 1) = temp
                End If
            Next
            For k = 1 To x
                OK = True
                If Tablo(i, k) = "" Then OK = False
            Next
        Wend
    End If
Next
.Range("C4").Resize(UBound(Tablo, 1), UBound(Tablo, 2)) = Tablo
End With
End Sub

A+
 

Chris401

XLDnaute Accro
Bonjour

Bon, rien à voir avec le code de Paf mais puisque j'en ai fait un, le voici :
VB:
Sub Test()

Dercol = Cells(3, Columns.Count).End(xlToLeft).Column
Derlg = Range("A" & Rows.Count).End(xlUp).Row

For i = Dercol To 3 Step -1
    For j = Derlg To 4 Step -1
        If Cells(j, i) = "" Then Cells(j, i).Delete Shift:=xlToLeft
    Next j
Next i

Range(Cells(4, 3), Cells(Derlg, Dercol)).Borders.Value = 0
Range(Cells(4, 3), Cells(Derlg, Dercol)).BorderAround , xlMedium

End Sub
 

Membres actuellement en ligne

Statistiques des forums

Discussions
312 105
Messages
2 085 350
Membres
102 870
dernier inscrit
Armisa