[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. Contributeur
    bonjour

    Lorsque tu fait ta "recherchevmulti" pourquoi ne ventiles-tu pas tes données directement dans le bon tableau ?
    1. Bonjour,

      Simplement que je ne sais pas mettre de conditions sur ma recherchevmulti.
      Si je l'a fait en un seul bloc, les 01, 02.. et les 99 ne sont pas séparés, ce qui posent problème au niveau de la présentation.

      C'est sûr que si je pouvais dire à la recherchevmulti que si ce qu'elle trouve commence par 99 doit se placer dans telles cellules, cela deviendrai facile. Mais cependant, je ne sais pas le faire :)

      Merci de ta réponse plutôt rapide gbinforme, en espérant que tu pourras m'aider.

      Cordialement.
      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. Contributeur
          bonjour

          la recherchevmulti

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

          Une requête SQL ?
          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.
              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 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. 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 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 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

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

                          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. Bonjour bonjour,

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

                            (Petit up caché)

                            Merci :)
                            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 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
                                  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. Oui j'avais bien mis les deux points virgules. J'ai même copié collé ta formule en fait.
                                    • 1
                                    • 2