Tri de données, cellules fusionnées

Bonjour à tous,

Après avoir usez des cours de VBA du site et des nombreux postes du forum, je me suis lancé pour créer mon premier sujet ne trouvant pas de réponse clair pour moi.

J'ai créer un classeur pour mon père restaurateur, qui lui permet de renseigner une base fournisseurs, unités, et produits.

Afin de pouvoir rentrer au fur et à mesure les prix des produits qu'il achète et ainsi voir le coût de fabrication d'un plat au jour le jour.

(Les prix peuvent varier du simple au triple en fonction de la saison et problème diverse)

J'ai renseigné la base de produit de la sorte et maintenant qu'il a commencé à le renseigner je ne peut plus le changer.

Ma macro pour renseigner cette base va chercher un masque en J11:R13, décale de trois ligne la base existante et colle le masque au début de la base.

Tout fonctionne nickel.

Maintenant il voudrait pouvoir trier les produits par ordre alphabétique plus simple pour faire mise à jour des prix.

Mais impossible d'utiliser la fonction tri ou filtre native d'excel à cause des cellules fusionnées.

C'est la où je m'en remet à vous pour m'aiguiller sur une solution en VBA si cela vous semble faisable.

(Sachant que la base va être alimenter régulièrement)

MERCI D'AVANCE

Je vous joint en P-J un exemple de la feuille qui me pose problème.

Bonjour Jack,

voici ton fichier mais je crains que toute ta belle mécanique ne puisse plus fonctionner en l'état!

Trier ton tableau comme il était présenté relevait de la gageure!

Aussi ai-je opté pour une solution radicale que tu es évidemment libre de rejeter!

Je te conseille vivement de continuer dans cette voie-ci, nettement plus facile à gérer, à manipuler, à exploiter même si il y a encore moyen de l'améliorer! A chaque jour suffit sa peine!

Il manque encore quelques éléments de recherche, de modification, etc...

A toi de voir mais il te faudrait plancher sur un système plus rationnel!

Pour l'instant, tu as juste un petit bouton rouge à cliquer, bouton qui disparaîtra, son office terminé!

Bon courage!

A+

30trifusion.xlsm (28.61 Ko)

Bonjour, Salut Curulis !

La modification apportée par Curulis est quelque peu timide... et je conseille vivement d'aller au bout de la transformation en base de données.

Soit : commencer ligne 1 : ligne 1 = ligne d'en-têtes ;

supprimer le quadrillage ;

ne pas amalgamer plusieurs fournisseurs sur la même ligne : une ligne distincte par produit-fournisseur en répétant les infos communes ;

ajout des champs nécessaires à l'identification de l'utilisation (produits en cours d'utilisation ou qui ne le sont plus...

A partir de là on pourra avoir un outil qui commencera à pouvoir être utilisé. Il conviendra de bâtir des procédures de mise à jour, et des procédures correspondant aux diverses utilisations qu'on souhaite en faire...

Mais en l'état, ce n'est en rien une base de données et elle ne sert à rien.

Cordialement.

Tout d'abord merci Curulis et MFerrand,

Je précise que je n'ai aucune notion en terme de gérance de stock, base de donée ou autre et que j'ai développé ce fichier à la bougie le soir ^^. D'ailleurs mes codes VBA doivent certainement être maladroit.

Le premier fichier que j'ai envoyer n'était qu'un tout petit bout du fichier principal. Je pensais pas que ça pouvait poser autant de problème ces cellules fusionnées. Même si elle m'ont bien fait galérer pour les copier:coller en VBA.

De plus je ne peut pas trop me permettre de tout changer étant donné qu'il a commencé à l'utiliser.

La demande de tri alphabétique est venu une fois le fichier livré et ne faisait pas partie du CDC du début.

Mais pour papa j’essaie ...

MFerrand a écrit :

ne pas amalgamer plusieurs fournisseurs sur la même ligne : une ligne distincte par produit-fournisseur en répétant les infos communes ;

J'ai choisi cette solution car les données du produit étant utilisée dans d'autres feuilles, j'ai toujours la dernière MàJ à coté du produit et associer à chaque case, un nom de cellule pour les afficher de suite dans chaque fiche technique.

MFerrand a écrit :

A partir de là on pourra avoir un outil qui commencera à pouvoir être utilisé. Il conviendra de bâtir des procédures de mise à jour, et des procédures correspondant aux diverses utilisations qu'on souhaite en faire...

Cela fonctionne, je joint le fichier complet avec une fiche technique, tu pourras te rendre compte que le fonctionnement y est.

Curulis a écrit :

Je te conseille vivement de continuer dans cette voie-ci, nettement plus facile à gérer, à manipuler, à exploiter même si il y a encore moyen de l'améliorer! A chaque jour suffit sa peine!

Merci du conseille, je penserais à l'avenir à voir plus loin des le début. on apprend de ses erreurs.

Mais dans le cas présent, étant donné la complexité du travail pour arriver au tri parfait, je pense le laissé utiliser la fonction recherche

Je vous joint le fichier casi complet (j'ai laissé une seul recette/fiche technique)

Encore merci de votre aide

Bonjour,

Beaucoup de problèmes reposent sur la confusion particulièrement fréquente entre Base de données et la façon dont on veut les voir ou y accéder pour les modifier, etc.

Il faut penser la Base de données comme une organisation des données qui permet de les stocker de façon fiable et d'aller les chercher ou les mettre à jour le plus efficacement et rapidement possible, ET QUE L'ON NE DOIT JAMAIS VOIR !

Ce que l'on voit, ce sont des interface d'accès ou de présentation...

Mise à Jour : une interface dédiée qui facilite la recherche des données à modifier et l'enregistrement des modifications...

Consultation : interface qui présente les données cherchées selon la façon dont on veut les voir...

Etc.

Sur ce schéma on pourra construire tous les processus adaptés que l'on peut souhaiter et les faire évoluer...

Hors de ce schéma, on ne peut que rencontrer des problèmes à chaque opération nouvelle ou à chaque évolution que l'on voudrait introduire...

Cordialement.

Bonjour,

je suis complètement d'accord avec les commentaires qui précèdent.

Voici cependant une macro, pas performante, qui fait le tri des lignes, malgré la mise en page inadéquate de cette base de données.

Sub aargh()
    dl = Cells(Rows.Count, "s").End(xlUp).Row ' dl nombre de lignes à trier
    For i = 15 To dl - 3 Step 3 ' on parcourt la feuille par groupe de 3 lignes, on recherche l'ingrédient qui doit venir en position i
        k = i ' 
        For j = i + 3 To dl Step 3 'on parcourt la liste des ingrédients restants à la recherche du plus petit
            If UCase(Cells(j, "J")) < UCase(Cells(k, "j")) Then k = j ' on a trouvé un ingrédient plus petit on mémorise sa position dans k
            ' end if 'on met un end if si pas d'instruction sur la même ligne que le then
        Next j
        If k <> i Then 'si l'élément le plus petit n'est pas déjà en position i
           ' on echange l'ingrédient I et l'ingrédient k
            Rows(i & ":" & i + 2).Cut
            Rows(k).Insert shift:=xlDown
            Rows(k & ":" & k + 2).Cut
            Rows(i).Insert shift:=xlDown
        End If
    Next i 
End Sub

Bonsoir,

MFerrand, je prend note de tout tes conseils pour mes futurs projets mêmes hors excel/VBA et je te remercie pour cela.

H2so4 cela fonctionne parfaitement, merci beaucoup.

Cependant, j'aime bien comprendre un peu pour m'en resservir autrement pour autre chose

    
Sub aargh()
'dl prend la valeur du nombre de ligne pleine dans la colonne S     
dl = Cells(Rows.Count, "s").End(xlUp).Row
        For i = 15 To dl - 3 Step 3
            k = i
            For j = i + 3 To dl Step 3
                  'Ucase permet de mettre en majuscule ? Et on vient tester que la position de la case du dessus par rapport à celle du dessous et le déplacer si k différent de i  et je ne comprend pas pourquoi il n'y a pas de End If pour cette condition.
                  If UCase(Cells(j, "J")) < UCase(Cells(k, "j")) Then
                      k = j 
            Next j
            If k <> i Then
                Rows(i & ":" & i + 2).Cut
                Rows(k).Insert shift:=xlDown
                Rows(k & ":" & k + 2).Cut
                Rows(i).Insert shift:=xlDown
            End If                       '1 end if pour deux if ??
        Next i
    End Sub

Si tu peux me donner juste une petite explication.

En tout cas merci beaucoup

Bonsoir,

j'ai mis des commentaires dans mon message précédent.

Encore Merci h2so4

Rechercher des sujets similaires à "tri donnees fusionnees"