[Excel] Tri de données

Résolu/Fermé
Eskow Messages postés 46 Date d'inscription vendredi 9 janvier 2009 Statut Membre Dernière intervention 30 juillet 2009 - 23 juin 2009 à 08:47
Eskow Messages postés 46 Date d'inscription vendredi 9 janvier 2009 Statut Membre Dernière intervention 30 juillet 2009 - 26 juin 2009 à 10:42
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
A voir également:

22 réponses

gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 684
23 juin 2009 à 09:27
bonjour

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

la recherchevmulti

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

Une requête SQL ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Eskow Messages postés 46 Date d'inscription vendredi 9 janvier 2009 Statut Membre Dernière intervention 30 juillet 2009 1
23 juin 2009 à 12:42
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.
0
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 684
23 juin 2009 à 18:49
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 ?
0
Raymond PENTIER Messages postés 58388 Date d'inscription lundi 13 août 2007 Statut Contributeur Dernière intervention 17 avril 2024 17 088
23 juin 2009 à 19:03
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.
0
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 684
23 juin 2009 à 21:25
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 !
0
Raymond PENTIER Messages postés 58388 Date d'inscription lundi 13 août 2007 Statut Contributeur Dernière intervention 17 avril 2024 17 088
23 juin 2009 à 21:38
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.
0
Eskow Messages postés 46 Date d'inscription vendredi 9 janvier 2009 Statut Membre Dernière intervention 30 juillet 2009 1
24 juin 2009 à 08:43
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.
0
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 684
24 juin 2009 à 10:05
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.
0
Eskow Messages postés 46 Date d'inscription vendredi 9 janvier 2009 Statut Membre Dernière intervention 30 juillet 2009 1
24 juin 2009 à 10:35
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
0
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 684
24 juin 2009 à 14:19
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 ?
0
Eskow Messages postés 46 Date d'inscription vendredi 9 janvier 2009 Statut Membre Dernière intervention 30 juillet 2009 1
24 juin 2009 à 14:29
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.
0
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 684
24 juin 2009 à 14:48
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.
0
Eskow Messages postés 46 Date d'inscription vendredi 9 janvier 2009 Statut Membre Dernière intervention 30 juillet 2009 1
24 juin 2009 à 14:55
Très bien, merci beaucoup, A demain ;)
0
Eskow Messages postés 46 Date d'inscription vendredi 9 janvier 2009 Statut Membre Dernière intervention 30 juillet 2009 1
25 juin 2009 à 11:52
Bonjour bonjour,

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

(Petit up caché)

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