[Excel] Tri de données [Résolu/Fermé]

Signaler
Messages postés
46
Date d'inscription
vendredi 9 janvier 2009
Statut
Membre
Dernière intervention
30 juillet 2009
-
Messages postés
46
Date d'inscription
vendredi 9 janvier 2009
Statut
Membre
Dernière intervention
30 juillet 2009
-
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

22 réponses

Messages postés
14934
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 240
bonjour

Lorsque tu fait ta "recherchevmulti" pourquoi ne ventiles-tu pas tes données directement dans le bon tableau ?
Messages postés
46
Date d'inscription
vendredi 9 janvier 2009
Statut
Membre
Dernière intervention
30 juillet 2009
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.
Messages postés
46
Date d'inscription
vendredi 9 janvier 2009
Statut
Membre
Dernière intervention
30 juillet 2009
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 :)
Messages postés
14934
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 240
bonjour

la recherchevmulti

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

Une requête SQL ?
Messages postés
46
Date d'inscription
vendredi 9 janvier 2009
Statut
Membre
Dernière intervention
30 juillet 2009
1
C'est une recherchev améliorée, faites par quelqu'un de ce forum et recommandée par Pilas afin de m'aider à importer ces données 01,02...99.

http://www.commentcamarche.net/forum/affich 12950173 excel formule?#18

Voici le lien de la précédente discussion.
Fonction à copier dans Module.
Messages postés
14934
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 240
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 ?
Messages postés
52719
Date d'inscription
lundi 13 août 2007
Statut
Contributeur
Dernière intervention
24 novembre 2020
14 664
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.
Messages postés
14934
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 240
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 !
Messages postés
52719
Date d'inscription
lundi 13 août 2007
Statut
Contributeur
Dernière intervention
24 novembre 2020
14 664
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.
Messages postés
46
Date d'inscription
vendredi 9 janvier 2009
Statut
Membre
Dernière intervention
30 juillet 2009
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.
Messages postés
14934
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 240
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.
Messages postés
46
Date d'inscription
vendredi 9 janvier 2009
Statut
Membre
Dernière intervention
30 juillet 2009
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
Messages postés
14934
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 240
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 ?
Messages postés
46
Date d'inscription
vendredi 9 janvier 2009
Statut
Membre
Dernière intervention
30 juillet 2009
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.
Messages postés
14934
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 240
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.
Messages postés
46
Date d'inscription
vendredi 9 janvier 2009
Statut
Membre
Dernière intervention
30 juillet 2009
1
Très bien, merci beaucoup, A demain ;)
Messages postés
46
Date d'inscription
vendredi 9 janvier 2009
Statut
Membre
Dernière intervention
30 juillet 2009
1
Bonjour bonjour,

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

(Petit up caché)

Merci :)
Messages postés
14934
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 240
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.
Messages postés
46
Date d'inscription
vendredi 9 janvier 2009
Statut
Membre
Dernière intervention
30 juillet 2009
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 :)
Messages postés
14934
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 240
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.
Messages postés
46
Date d'inscription
vendredi 9 janvier 2009
Statut
Membre
Dernière intervention
30 juillet 2009
1
Oui j'avais bien mis les deux points virgules. J'ai même copié collé ta formule en fait.