[Excel] Tri de données

Résolu
Bonjour à toutes et à tous,

Je m'adresse à vous en espérant recevoir une petite aide, où même une petite idée, qui me permettrait d'avancer dans mon travail.

Pour commencer, j'ai utilisé une recherchevmulti pour ramener des donnnées.

Ces données se présentent sous la forme suivante :

01.CECI01
02.CECI02
02.CECI03
11.CELA1000.4
99.EMBAL01
99.EMBAL150
TS12.5
IT700.14
etc..

J'aimerai trier ces données en deux tableaux distincts, selon deux critères différents.

Dans le premier tableau, je voudrai mettre toutes les références ne commençant pas par 99.
Et dans mon second, toutes les références commençant par 99.

Ces deux tableaux se situe dans un formulaire, à des endroits bien distincts, par soucis de présentation.

En espérant avoir été plus ou moins clair dans mes explications, je vous remercie d'avance pour votre aide.

Je reste evidement disponible et le plus réactif possible pour répondre à d'éventuelles questions.

Eskow
Configuration: Windows XP Internet Explorer 6.0

22 réponses

  1. Alors je ne serai expliquer le pourquoi du comment, mais j'ai mon pc qui a planté, à redémarré tout seul, et depuis, çà marche !

    Merci infiniment gbinforme pour tout le temps que tu m'as consacré.
    Ce forum est définitivement génial.

    Encore MERCI :)

    Je passe le sujet en résolu, nul doute que cela servira à d'autres.
    1. Contributeur
      bonjour

      Pourtant cela fonctionne ici :

      http://www.cijoint.fr/cjlink.php?file=cj200906/cijgiZKETh.jpg

      Peux-tu mettre ton fichier sur http://www.cijoint.fr/ pour voir le souci qui est généré.
      1. Oui j'avais bien mis les deux points virgules. J'ai même copié collé ta formule en fait.
        1. Contributeur
          bonjour,

          Si tu as bien recopié la macro modifiée dans ton classeur, cela ne peut venir que du paramétrage de l'appel de la fonction qui n'est pas correct.
          Tu avais :
          =RECHERCHEVmulti('[Classeur1.xls]Articles'!$A$3;'Option machine'!$G$3;'[Classeur1.xls]Articles'!$K$3)
          

          Tu devrais mettre :
          =RECHERCHEVmulti('[Classeur1.xls]Articles'!$A$3;'Option machine'!$G$3;'[Classeur1.xls]Articles'!$K$3;;"#99")
          et
          =RECHERCHEVmulti('[Classeur1.xls]Articles'!$A$3;'Option machine'!$G$3;'[Classeur1.xls]Articles'!$K$3;;"=99")

          Attention aux deux points virgules qui se suivent car dans ta macro tu as une possibilité de limiter ta plage et c'est sans doute de là que vient ton souci.
          1. Bonjour gbinforme, et merci.

            La formule n'a pas l'air de fonctionner.
            Elle me renvoit #VALEUR.
            Les deux classeurs sont ouverts, cela ne peut venir de là.
            Ca vient obligatoirement de la formule puisque si j'enlève les "#99" et "=99", cela me renvoit les bonnes valeurs.

            Merci d'essayer gbinforme :)
            1. Contributeur
              bonsoir Eskow,

              Voilà, je voulais te faire ton tableau avec des formules mais comme je n'ai pas trop le temps, je t'ai modifié la fonction RECHERCHEVmulti en rajoutant un paramètre pour tester tes 2 types de résultats.

              Dans l'appel de la fonction, il faut rajouter "=99" ou "#99" selon le cas

              http://www.cijoint.fr/cjlink.php?file=cj200906/cijIggNJsr.xls

              Bon test.
              1. Bonjour bonjour,

                Si vous avez besoin de plus amples informations, n'hésitez pas.

                (Petit up caché)

                Merci :)
                1. Contributeur
                  bonjour

                  Bon cette fois-ci, j'ai compris ce que tu recherches à faire et j'ai les moyens de chercher comment.

                  Cependant je dois me déconnecter et je regardes cela demain matin.
                  à bientôt.
                  1. Exactement gbinforme.

                    Sinon voici un exemple de la recherchevmulti dans mon cas :

                    =RECHERCHEVmulti('[Classeur1.xls]Articles'!$A$3;'Option machine'!$G$3;'[Classeur1.xls]Articles'!$K$3)

                    Classeur 1 : Là où se situe les Articles et Nomenclatures (onglet Articles)
                    Option machine : l'onglet du classeur n°2 où il y a la feuille de saisie et donc les deux tableaux à remplir en fonction de l'article saisie.
                    1. Contributeur
                      bonjour

                      le paramétrage de ta "RechercheVmulti" ?

                      j'attendais ta façon pour l'appeler la fonction, quelque chose comme :
                      =RechercheVmulti($C$3;$B$3;$H$3)

                      Tu as donc une autre feuille ou un autre classeur (?) où tu as Article en colonne A et Nomenclature en colonne B et tu veux obtenir toute la colonne B qui a en A le code article choisi ?

                      Cela ventilé dans 2 tableaux en fonction des 2 premiers caractères de la colonne B ?
                      1. Bonjour gbinforme et encore merci de prendre le temps de me répondre.

                        Déjà, désolé si j'ai employé un vocabulaire non approprié, je n'y connais pas grand chose.

                        il faudrait avoir la structure de ton tableau de recherche ou au moins le paramétrage de ta "RechercheVmulti"

                        Qu'entends-tu par structure de ton tableau de recherche et par le paramétrage de ta "RechercheVmulti" ?

                        Je vais essayer d'avancer une réponse :

                        Voici le code de la recherchevmulti que j'ai copié collé dans le Module de ma base de données :

                        Option Explicit

                        'RD =cellule où commencer la recherche
                        'RC = cellule critère
                        'RDT = cellule où chercher la donnée
                        'Ligne rechercher jusque ligne... (optional) si 0 cherche jusqu'au bout de la ligne

                        Public Function RechercheVmulti(RD As Range, RC As Range, RDT As Range, _
                        Optional Ligne As Long = 0)

                        Dim i As Integer, e As Integer, Txt As String
                        Dim LigE As Long, ColE As Long 'où écrire résultats
                        Dim Col As Integer
                        Dim Lig As Long, Occ As Long
                        Dim FeuilE As Worksheet, FeuilRD As Worksheet, FeuilRDT As Worksheet

                        On Error GoTo sortie
                        LigE = Application.Caller.Row
                        ColE = Application.Caller.Column
                        Set FeuilE = Application.Caller.Parent
                        Application.Volatile
                        Lig = RD.Row ' Ligne où commencer la recherche
                        Col = RD.Column 'Colonne où commencer la recherche
                        Set FeuilRD = RD.Parent
                        Set FeuilRDT = RDT.Parent
                        If Ligne = 0 Then
                        Ligne = Range(FeuilRD.Cells(65536, Col), FeuilRD.Cells(65536, Col)).End(xlUp).Row
                        End If
                        'Recherche le numéro de l'occurrence à trouver
                        For Occ = LigE - 1 To 1 Step -1
                        Txt = FeuilE.Cells(Occ, ColE).Formula
                        If Txt = FeuilE.Cells(LigE, ColE).Formula Then
                        e = e + 1
                        End If
                        Next Occ
                        For i = Lig To Ligne
                        If FeuilRD.Cells(i, Col) = RC Then
                        If e <> 0 Then
                        e = e - 1
                        Else
                        RechercheVmulti = FeuilRDT.Cells(i, RDT.Column)
                        Exit Function
                        End If
                        End If
                        Next i
                        'Si plus trouvé de concordance
                        RechercheVmulti = ""
                        Exit Function
                        sortie:
                        'si erreur dans la formule, non détectée par Excel.
                        RechercheVmulti = "#FAUTE!"
                        End Function

                        Et voici un exemple de ma base de données, concernant ce dont nous avons besoin (enfin je crois)

                        www.cijoint.fr m'a l'air d'avoir un problème, je vais essayer d'être clair sans illustration.

                        Article
                        A1 BA006.67
                        A2 BA006.67
                        A3 BA006.67
                        A4 BA006.67
                        A5 BA006.67
                        A6 BA006.67
                        A7 BA006.67

                        Nomenclature
                        B1 08.ABS967
                        B2 09.W002
                        B3 11.MAK030
                        B4 99.CA01
                        B5 99.PC02
                        B6 99.PLU
                        B7 TS500.01

                        La seule raison pour laquelle j'ai utilisé cette recherchevmulti vient du fait que je ne connaissais que la recherchev "basique" et qu'elle ne me permettait pas, avec mes compétences, de faire ce que cette recherchevmulti me permet de faire, à savoir me rappatrier toutes les nomenclatures liées à l'article.

                        Si tu as des questions, ou des informations à m'apporter quant à mon vocabulaire, je suis preneur :)

                        Merci, Eskow
                        1. Contributeur
                          bonjour Eskow,

                          Ces deux tableaux se situe dans un formulaire

                          Attention au vocabulaire employé, car tes deux tableaux se situent dans ta feuille de calcul et nullement dans un formulaire qui sous excel est une fenêtre de saisie, et donc cela m'a orienté sur une piste qui n'en est pas du tout la tienne.

                          à mon avis, cette "RechercheVmulti" n'est pas adaptée à ton problème car elle a été conçue pour une utilisation différente de la tienne.

                          L'on peut réaliser ce que tu veux avec des fonctions standard, mais il faudrait avoir la structure de ton tableau de recherche ou au moins le paramétrage de ta "RechercheVmulti" car cela détermine la codification des formules.

                          Je pense que le simple fait de supprimer des blancs dans un tableau

                          La façon la plus simple, c'est de ne pas en créer sinon tu n'auras pas de formule miracle car il faudrait agir sur d'autres cellules et aucune fonction standard ne te le permettra.
                          1. Bonjour :)

                            Merci à vous deux pour vos réponses.

                            Cette fonction RechercheVmulti me permet de rappatrier, ligne après ligne, les données liées à un article (que l'utilisateur aura marqué dans le formulaire)
                            Si j'avais fait çà avec une recherchev "normale", çà ne m'aurait rappatrié qu'une seule ligne, la première, de ma liste de données. En tout cas je ne sais faire autrement.

                            Je vous joint un screen du formulaire, avec quelques explications.
                            http://www.cijoint.fr/cjlink.php?file=cj200906/cijbYU8KT7.xls

                            Le problème de cette formule Raymond, c'est qu'elle ne me supprime pas les blancs et donc je me retrouve avec des trous dans mes tableau.

                            Je pense que le simple fait de supprimer des blancs dans un tableau me permettrait de bien faire fonctionner ce formulaire.

                            Si vous avez des idées, je suis preneur, et encore merci de m'avoir répondu.
                            1. Contributeur
                              bonjour Raymond,

                              Si ta liste est en colonne A,

                              C'est un peu plus compliqué, car sa liste virtuelle est constituée par le résultat d'une fonction VBA et c'est bien là le souci car pour démarrer dans la gestion d'un formulaire VBA il y a beaucoup de choses à découvrir pour comprendre le mécanisme.

                              ps :
                              un petit coucou à toi sous le soleil car en métropole l'été est encore bien virtuel !
                              1. Contributeur
                                Oui, gbinforme, je sais : j'en reviens tout juste (Paris et Lyon) et j'ai ramené une belle crève !

                                Pour ce qui est de ma proposition, je l'ai faite "à l'aveugle", ne sachant pas du tout à quoi ressemble le fichier de notre ami ...
                                D'autre part, il est toujours délicat de demander de l'aide pour une fonction "fabriquée" que ne connaissent que celui qui l'a inventée et quelques rares utilisateurs ...
                                Amicalement.
                            2. Contributeur
                              Bonjour.
                              Si ta liste est en colonne A, tu mets en colonne B la formule
                              =SI(GAUCHE(A:A;2)="99";A:A;"") et en colonne C la formule =SI(B:B="";A:A;"").
                              Il ne te reste qu'à recopier les 2 colonnes B et C en supprimant les cellules vides.
                              1. Contributeur
                                bonjour

                                Il me semble que la solution ne correspond pas tellement à ce que tu veux faire et qu'elle te complique la situation.

                                Lorsque l'utilisateur valide son choix, il faut plutôt lancer un recherche itérative de la référence et en fonction du résultat ventiler dans l'un ou l'autre de tes tableaux : c'est beaucoup plus simple et efficace.

                                Tes tableaux sont constitués par quel contrôle ?
                                1. Contributeur
                                  bonjour

                                  la recherchevmulti

                                  Qu'est-ce que tu entends par là ?

                                  Une requête SQL ?
                                  1. Désolé de faire mon impatient, étant un forum, vous avez tout à fait le droit de ne pas avoir le temps de répondre, je veux juste remonter le topic, avant qu'il ne sombre dans les profondeurs du forum :)
                                    • 1
                                    • 2