Vous utilisez un navigateur obsolète. Il se peut que ce site ou d'autres sites Web ne s'affichent pas correctement. Vous devez le mettre à jour ou utiliser un navigateur alternatif.
conserver lignes et colonnes non vides d'un tableau
Voici mon problème. J'ai un fichier avec un tableau récapitulatif avec + de 50 colonnes et 100 lignes. Dans ce tableau certaines colonnes et lignes non adjacentes peuvent être vides ou pas.
Je voudrais épurer ce tableau sur un nouvel onglet de façon à ne garder que les lignes non vides. Je crois qu'il faudrait utiliser une fonction genre INDEX, EQUIV, ou quelque chose comme ça mais je ne les maitrise pas du tout et tous les exemples vus par ailleurs ne me parlent pas !!
Quelqu'un peut-il m'aider ?? Merci pour votre aide
Une mise en forme conditionnelle sur chaque zone A3:B40 complète le dispositif pour les encadrements et la couleur des cellules.
Formule matricielle: Elle doit être validée par la combinaison des touches Ctrl+Maj+Entrée au lieu de la seule touche Entrée comme une formule classique.
Si la validation matricielle est correcte, alors Excel entoure la formule d'accolades {=.......}.
Chaque fois que cette formule sera modifiée, la validation devra se faire par Ctrl+Maj+Entrée. Les accolades apparaissent à la validation et ne doivent pas être saisies au clavier.
Re : conserver lignes et colonnes non vides d'un tableau
Ma pomme
Pourrais-tu à nouveau m'aider stp.
Avec le fichier de ta version améliorée, "filename" fait référence au nom de l'onglet dans cette formule : =STXT(CELLULE("filename";A1);TROUVE("]";CELLULE("filename";A1))+1;99)
Peut-on faire référence à une autre cellule dans l'onglet "récap" ? En fait après réflexion je voudrais regrouper dans le même onglet le panier sous forme ticket (donc sans les lignes vides) et pour plusieurs clients.
Avec le fichier de ta version améliorée, "filename" fait référence au nom de l'onglet dans cette formule : =STXT(CELLULE("filename";A1);TROUVE("]";CELLULE("filename";A1))+1;99)
Peut-on faire référence à une autre cellule dans l'onglet "récap" ? En fait après réflexion je voudrais regrouper dans le même onglet le panier sous forme ticket (donc sans les lignes vides) et pour plusieurs clients.
Excuse moi car j'avais mis ton message de côté et j'ai oublié d'y revenir. Peux-tu fournir un exemple de présentation de la feuille "récap" avec plusieurs clients pour avoir une idée de ce que tu désires ? J’essaierai de joindre également les explications des formules.
Une p'tite question : voulez-vous imprimer un client par feuille ou bien tous les clients à la suite (avec possibilité dans ce cas cas d'avoir plusieurs clients sur la même feuille) ?
Une p'tite question : voulez-vous imprimer un client par feuille ou bien tous les clients à la suite (avec possibilité dans ce cas cas d'avoir plusieurs clients sur la même feuille) ?
Re : conserver lignes et colonnes non vides d'un tableau
Bonsoir elido,
Une autre version avec un peu de VBA. La feuille Data comprend la base de données des produits (avec un type et une famille) et la base des clients. les boutons en ligne 1 servent à faire des tris. J'ai fait cette base pour préserver l'avenir car ton projet semble évolutif. Cette base sert à alimenter la feuille de saisie des produits et quantités des client sur la deuxième feuille. Les feuilles 3 et 4 font un bilan par client et par produit des commandes.
rem : sur la feuille de saisie des commandes, un double-clique sur une cellule recopie la valeur de la cellule juste au dessus pour faciliter la saisie.
Re : conserver lignes et colonnes non vides d'un tableau
Bonjour Mapomme
Merci pour le travail que tu as fait mais hélas il ne correspond pas à mes besoins, peut-être dans un second temps...
Je reviens un peu sur l'histoire de mon fichier et je t'explique le fonctionnement.
Tu as compris qu'il s'agit de faire un panier de produits (locaux). Toutes les semaines j’envoie au groupe de personnes (50 noms actuellement) ce fichier avec un lien internet sur ExcelOnline. Chaque personne enregistre directement sa commande sur sa feuille personnelle et celle-ci est comptabilisée dans le tableau "récap commandes".
Dans un premier temps j'avais fait un fichier avec macro vba mais avec Online ça ne marche pas d'où ma demande de ne pas utiliser le VBA.
Aujourd'hui je voudrais donc comme précisé dans ma demande de départ avoir un récapitulatif du panier sur une nouvelle feuille seulement pour les gens qui ont passé commande.
Je joint mon fichier actuel allégé (j'ai laissé 1 dizaine de personnes).
Re : conserver lignes et colonnes non vides d'un tableau
Bonjoue elido,
Je comprends mieux le pourquoi. Je vais réfléchir pour pour voir comment faire. Je serai peut-être amené à utiliser une feuille ou des colonnes auxiliaires. Je ne pense pas que ça puisse gêner ?
Re : conserver lignes et colonnes non vides d'un tableau
Bonsoir Elido,
Voici un fichier sans aucune macro. Il faudra vérifier les résultats. Je l'ai fait mais il vaut mieux revérifier.
Dans la liste des prix, j'ai rajouté à gauche des tableaux une colonne "Indic" avec une formule qui renvoie un "x" si la ligne comporte à la fois un nom de produit et une unité de produit. La formule retourne "" sinon.
Cet indicateur est utilisé dans les formules de la feuille "récap panier". Elle sert à distinguer au sein de la feuille "récap commandes" les 'vraies' lignes produits des autres lignes (notamment les lignes comportant des totaux et totaux partiels que vous avez saisis).
La liste des clients est saisie manuellement dans les cellules F1 à BC1 sur la feuille "récap commandes". Il existe une méthode pour lister les onglets avec un nom défini à l'aide d'une macro Excel 4 (mais on y a pas droit ). Les noms doivent être identiques strictement au nos de chaque onglet client.
La feuille "récap commandes" a été un tout petit peu remaniée afin de rajouter aux tableaux une colonne à gauche qui est la recopie des colonnes "indic" des tableaux de prix. Les formules de ce tableau utilisent la fonction INDIRECT pour aller rechercher dans le bon onglet les quantités de chaque client.
C'est ensuite, à partir de la feuille "récap commandes" qu'on va élaborer les tableaux récapitulatifs de chaque client sur la feuille "récap panier". il y a trois principales formules :
Une formule pour récupérer les noms des clients en B3:
Une Mise en Forme Conditionnelle est ensuite appliquée sur la cellule A4, une deuxième sur la cellule B4.
Les deux formules matricielles (A4 et B4) sont ensuite tirées/copiées vers le bas jusqu'à la ligne 50.
On recopie ensuite les colonnes A à C sur les colonnes D à ET pour arriver aux 50 clients potentiels.
Une MFC sur les cellules A4 à ES50 vient compléter la mise en forme.
NB: Des noms ont été définis:
cmde_client
='récap commandes'!$F$1:$BC$1
liste des clients
cmde_indic
='récap commandes'!$A$7:$A$200
colonne des "Indic"
cmde_produit
=DECALER(cmde_indic;0;1)
colonne des produits
cmde_qte
=DECALER(cmde_indic;0;4)
colonne des quantités
Limitations :
la dernière ligne des produits est la ligne 200 sur la feuille "récap commandes".
On considère un max de 50 clients.
Rem :
Pour ajouter un client, il suffit de dupliquer une feuille client existante, de la renommer avec le nom du nouveau client puis d'aller saisir ce nom à l'identique dans la première cellule vide de la plage F1:BC1 sur la feuille "récap commandes".
Re : conserver lignes et colonnes non vides d'un tableau
Bonsoir elido, mapomme, le forum
Avec le fichier joint du post #8 :
Résultat dans la feuille "paniers"
VB:
Option Explicit
Sub Paniers()
Dim myAreas As Areas, w(), n As Long, y, x As Byte, w2 As Long
Dim i As Long, j As Long, k As Long
Application.ScreenUpdating = True
With Sheets("récap")
On Error Resume Next
Set myAreas = .Columns("A").SpecialCells(2).Areas
On Error GoTo 0
End With
If Not myAreas Is Nothing Then
With CreateObject("Scripting.Dictionary")
.CompareMode = 1
For i = 1 To myAreas.Count
If myAreas(i).Rows.Count > 1 Then
For j = 3 To myAreas(i).CurrentRegion.Columns.Count
If Not .exists(myAreas(i)(1, j).Value) Then
ReDim w(1 To 2, 1 To Application.CountA(myAreas(i).Columns(j)))
w(1, 1) = "Panier du client"
w(2, 1) = myAreas(i)(1, j).Value
If Application.CountA(myAreas(i).Columns(j)) > 1 Then
For k = 2 To myAreas(i).Rows.Count
If myAreas(i)(k, j).Value <> "" Then
x = x + 1
w(1, x + 1) = myAreas(i)(k, 1).Value
w(2, x + 1) = myAreas(i)(k, j).Value
End If
Next
End If
.Item(myAreas(i)(1, j).Value) = w
x = 0
Else
w = .Item(myAreas(i)(1, j).Value)
w2 = UBound(w, 2)
If Application.CountA(myAreas(i).Columns(j)) > 1 Then
ReDim Preserve w(1 To 2, 1 To UBound(w, 2) + Application.CountA(myAreas(i).Columns(j)) - 1)
For k = 2 To myAreas(i).Rows.Count
If myAreas(i)(k, j).Value <> "" Then
x = x + 1
w(1, w2 + x) = myAreas(i)(k, 1).Value
w(2, w2 + x) = myAreas(i)(k, j).Value
End If
Next
.Item(myAreas(i)(1, j).Value) = w
x = 0
End If
w2 = 0
End If
Next
End If
Next
y = .items
End With
With Sheets("paniers")
.Cells.Clear
For i = 0 To UBound(y)
If UBound(y(i), 2) > 1 Then
With .Cells(n + 1, 1)
.Resize(UBound(y(i), 2), UBound(y(i), 1)).Value = Application.Transpose(y(i))
With .CurrentRegion
With .Rows(1)
.Font.Bold = True
.Interior.ColorIndex = 36
.BorderAround Weight:=xlThin
End With
.Borders(xlInsideVertical).Weight = xlThin
.BorderAround Weight:=xlThin
End With
End With
n = n + UBound(y(i), 2) + 1
End If
Next
With .Columns(1).Resize(, 2)
.Font.Name = "calibri"
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.AutoFit
End With
.Activate
End With
If n = 0 Then MsgBox "Pas de paniers en commande"
End If
Application.ScreenUpdating = True
End Sub
Ce site utilise des cookies pour personnaliser le contenu, adapter votre expérience et vous garder connecté si vous vous enregistrez.
En continuant à utiliser ce site, vous consentez à notre utilisation de cookies.