Classer par ordre croissant avec critère texte situés dans 2 colonnes en VBA

Fermé
rorocr Messages postés 81 Date d'inscription mardi 8 septembre 2015 Statut Membre Dernière intervention 8 juin 2022 - 10 juin 2020 à 10:52
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 - 16 juin 2020 à 22:03
Bonjour le Forum,


J'ai besoin de créer une fonction en VBA qui me permettrait de classer des dates par rapport à un critère texte.
Là ou ça se complique, c'est que le texte est associé forcément à une date mais cela peu être dans 2 tableaux différents.


Je joint un exemple pour détailler mon problème.

https://cjoint.com/c/JFki0lVqHZw


Merci d'avance

Cordialement
A voir également:

21 réponses

rorocr Messages postés 81 Date d'inscription mardi 8 septembre 2015 Statut Membre Dernière intervention 8 juin 2022 1
16 juin 2020 à 15:22
Re,

Voici un fichier exemple que j'ai mis à jour pour mieux expliquer mon problème et mes besoins.

https://www.cjoint.com/c/JFqnvMaoW4G
1
ccm81 Messages postés 10851 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 16 avril 2024 2 404
10 juin 2020 à 11:29
Bonjour

1. Pourquoi ce sujet est il fermé ?
2. Tu n'as pas répondu clairement à mes questions. Est ce que la macro produit le résultat attendu ?

Cdlmnt
0
rorocr Messages postés 81 Date d'inscription mardi 8 septembre 2015 Statut Membre Dernière intervention 8 juin 2022 1
10 juin 2020 à 13:44
Bonjour,

Je ne sais pas pourquoi il est fermé, j'ai bien répondu à vos questions hier soir à 20h17 et 20h40 mais j'ai répondu en passant par "commenter" au lieu de répondre.

Peu-être le problème vient-il de là?
Je n'ai pas tout vérifier mais ca à l'air de bien fonctionner mais j'aurais besoin de ne pas lancer une macro mais plutôt de créer une fonction d'ou ma nouvelle question de ce matin.

Voila les réponses que je vous avait donné hier soir:
réponse au 1er message (je n'avais pas encore vu le 2 eme avec la macro)
Bonjour ccm81,

Pour le 1er tableau, j'ai concatener dans la colonne A les noms qui se trouvent en C et D pour faire une recherche uniquement dans la colonne A au lieu d'en faire 2 en colonne C et D.
Même raisonnement pour le deuxième tableau, les colonnes H et I sont concatenées en colonne F.

Pour être plus clair, j'ai besoin de classer par ordre croissant les dates concernant les noms en colonne K qu'ils soient en colonne C ou D pour le 1er tableau et en colonne H ou I dans le deuxième tableau.

Pour répondre a ta question,
si on cherche à classer les dates pour Xavier,
il faut effectivement prendre en compte le PascalXavier en A3 (date associée = 17/08/2013) et le XavierPascal en F5 (date associée = 11/08/2013)
Je devrais donc retrouver la date 11/08/2013 en L4 (date la plus petite) et 17/08/2013 en M4 (car deuxième date la plus petite) etc. etc. jusqu’à ce qu'il n'y ai plus de date à classer pour Xavier.

J'espère avoir été plus clair cette fois et merci pour votre aide.

Cordialement,


et la réponse au 2eme message:

Re bonjour ccm81,

Votre solution est déjà très intéressante mais mon réel fichier étant rempli au fur et a mesure du temps, (c'est à dire que des noms déjà existants peuvent être ajoutés dans une des 4 colonnes avec la date correspondante)
Est-il possible de zapper l'étape ctrl+k et de créer une formule du type :
Compter le nombre de fois que le nom apparaît dans les colonnes A et F (ou bien en C D H et I) pour ne rien renvoyer si l'on demande un numéro de rang supérieur au nombre de fois que le nom apparaît.
De cette manière, au fur et à mesure que le tableau ce remplirait, les dates s'ajouteraient directement dans le tableau de classement.

Merci d'avance,

Dites moi si je dois faire quelque chose par rapport au sujet précédent?

Cordialement
0
ccm81 Messages postés 10851 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 16 avril 2024 2 404
Modifié le 10 juin 2020 à 16:15
1. Pour la fermeture, je ne sais pas, as tu créé ce nouveau sujet avant que le précédent soit fermé ?
2. Expliques moi exactement comment ça se passe quand une nouvelle entrée est saisie, (colonnes A à D par exemple) quelle est la colonne remplie en dernier (C puis D puis B )?
3. Quand une nouvelle date est saisie, est elle toujours postérieures aux dates déjà présentes (colonnes C et G) ?
4. J'ai vérifié (du moins le début) pour Leon et Elisabeth, est ce que ça correspond ?
5. Tu n'as pas répondu à ma remarque
RQ. S'il y a 2 dates identiques pour un même nom, je n'en ai retenu qu'une

5. Est-il possible de zapper l'étape ctrl+k
Si ton fichier n'est pas tellement plus gros que ça, l'exécution de ma macro ne prend pas beaucoup de temps
On peut faire en sorte qu'une macro réagisse à un changement (ajout) dans la feuille, mais est ce vraiment nécessaire
et de créer une formule du type :
Compter le nombre de fois que le nom apparaît dans les colonnes A et F (ou bien en C D H et I) pour ne rien renvoyer si l'on demande un numéro de rang supérieur au nombre de fois que le nom apparaît.

Là, j'avoue que je ne comprend pas bien où tu veux en venir
Donnes un exemple
0

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

Posez votre question
rorocr Messages postés 81 Date d'inscription mardi 8 septembre 2015 Statut Membre Dernière intervention 8 juin 2022 1
10 juin 2020 à 22:48
Bonsoir ccm81,

1.Non j'ai créé ce nouveau sujet en fin de matinée alors que je t'avais répondu hier soir, je ne sais pas du tout à quoi c'est dû.

2.Alors, je n'inscris jamais rien en colonnes A ou F puisqu'il y a la fonction concatener. Je rentre des données en C puis D et après je renseigne la date en B pour le premier tableau. En H et I puis G pour le deuxième tableau.
Par contre les données sont rentrées complètement aléatoirement entre le tableau 1 et 2. il peut m'arriver de remplir 60 lignes d'affilée sur le 1er tableau avant de rentrer des nouvelles données dans le 2eme.

3.Pour les dates, non elle ne sont pas forcément postérieures car il peut m'arriver de rentrer des noms mais de mettre la date bien plus tard, du coup il peut y avoir un trou dans la colonne B, je continue de remplir les noms avec des dates et le trou est rempli ultérieurement.

4.Oui j'ai vérifié également et ça m'a l'air bon.

5.1.J'avais pas fait attention a ta remarque mais c'est impossible dans mon fichier de base.
Pour un nom que ce soit en colonne C ou D pour le tableau 1 (H ou I pour le tableau 2), il ne peut y avoir qu'une seule date. C'est aussi impossible qu'il y ai une date identique dans le tableau 1 et 2 avec le même nom.
Si c'est le cas dans le fichier exemple, c'est une erreur de saisie de ma part.

5.2.Je voulais zappé le ctrl+K car oui mon fichier est assez gros et s'agrandi de jour en jour mais aussi pour éviter de mettre à jour au fur et à mesure. Car j'ai peur de lire le tableau classement qui serait faux si j'avais oublié de relancer la macro.

Actuellement, j'ai une combinaison de fonctions qui me permettent de classer les dates mais dans un seul tableau :

Voici le même fichier exemple mais avec la formule en question pour Elisabeth pour que tu comprennes ce que je veux dire:

https://cjoint.com/c/JFkuReCYoc6


Au final, je n'ai pas réussi à trouver de formule qui me permettrait de classer les dates par rapport au nom qui figurerait dans 2 tableaux différents d'ou mon appel à l'aide.

Merci encore,
Cordialement
0
rorocr Messages postés 81 Date d'inscription mardi 8 septembre 2015 Statut Membre Dernière intervention 8 juin 2022 1
11 juin 2020 à 14:43
Bonjour ccm81,

Qu en penses tu?
Ca te parait faisable via une fonction créée en vba ?

Cordialement
0
ccm81 Messages postés 10851 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 16 avril 2024 2 404
11 juin 2020 à 15:24
Ca te parait faisable via une fonction créée en vba ?
Faut voir

Une autre question : Peut il apparaitre un nouveau nom ?

Cdlmnt
0
ccm81 Messages postés 10851 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 16 avril 2024 2 404
Modifié le 11 juin 2020 à 16:18
Un essai, à tester
https://mon-partage.fr/f/7m4Y3q0x/

La procédure Worksheet_Change(ByVal Target As Range) réagit à l'entrée d'une nouvelle date
et OKnom(d, nom) met à jour la liste des dates pour ce nom

Cdlmnt
0
ccm81 Messages postés 10851 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 16 avril 2024 2 404
11 juin 2020 à 17:26
Désolé
Tu as du avoir des ennuis, un misérable 5 s'est mystérieusement inséré ici
5 If Not Intersect(Target, Union(Columns(coda1), Columns(coda3))) Is Nothing Then
A corriger comme ceci
If Not Intersect(Target, Union(Columns(coda1), Columns(coda3))) Is Nothing Then

Cdlmnt
0
rorocr Messages postés 81 Date d'inscription mardi 8 septembre 2015 Statut Membre Dernière intervention 8 juin 2022 1
11 juin 2020 à 17:35
Alors ça a fonctionné correctement quand j'ai mis la date pour ton exemple, par contre en essayant de rajouter 2 noms la ligne en dessous avec une date, la date est apparue dans le tableau classement seulement après avoir lancer la macro.

Pour les noms, les noms sont connus pour chaque fichier (on a plusieurs fichier avec des noms différents) dès le début de création du tableau 1 mais chaque fichier ne comporte pas le même nombre de noms, ça peut varier entre 10 et 30 noms par fichier.
En fait la liste en colonne K de nom est récupérée dans un autre onglet du fichier.
des nouveaux peuvent apparaître dans le tableau 2 mais je n'ai besoin que de créer un classement pour les noms du tableau 1.

Cdlt
0
ccm81 Messages postés 10851 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 16 avril 2024 2 404
11 juin 2020 à 19:45
As tu fait la correction ?
Si tu as rentré la date puis les noms, ça ne va pas fonctionner
  If nom1 <> "" Then Call OKnom(d, nom1)
If nom2 <> "" Then Call OKnom(d, nom2)

Pour les dates, non elle ne sont pas forcément postérieures car il peut m'arriver de rentrer des noms mais de mettre la date bien plus tard,

J'ai testé, en ajoutant deux noms en ligne 137, j'ai bien retrouvé les dates
0
rorocr Messages postés 81 Date d'inscription mardi 8 septembre 2015 Statut Membre Dernière intervention 8 juin 2022 1
12 juin 2020 à 16:11
Bonjour ccm81,

Tout d'abord, je te remercie beaucoup pour ta solution et le temps que tu y as passé.
Ça m'a l'air de fonctionner correctement...
J'aimerais quand même tester d'une autre manière,

ta réponse hier à 15h24 était :
Ca te parait faisable via une fonction créée en vba ?
Faut voir

Quand tu dis "Faut voir", penses tu que ce soit impossible à faire ou même trop compliqué ou je peux encore espérer que quelqu'un me trouve ce genre de solution (qui me parait plus pratique pour l'utilisation de mon réel fichier car c'est un fichier partagé sur lequel beaucoup de personnes de notre société peu ajouter des données, j'ai donc peur que l'ordre des saisies ne soit pas toujours respecté)

Cordialement,
0
ccm81 Messages postés 10851 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 16 avril 2024 2 404
Modifié le 12 juin 2020 à 20:14
Bonjour
RQ1. le Ctrl+k reste valable pour traiter toutes les données en un coup
RQ2. Pour la mise à jour au fur et à mesure des entrées,une solution
La mise à jour peut être lancée lors d'un changement dans l'une des 3 colonnes B,C,D ou G,H,I à condition que les 3 cellules soient renseignées (nom1, nom2, date), il suffit de modifier un peu la procédure Worksheet_Change
RQ3. c'est un fichier partagé sur lequel beaucoup de personnes de notre société peu ajouter des données, j
Tu n'avais pas dit, et ça change beaucoup de choses. Le processus n'est pas du tout sécurisé. Il suffit de se placer dans une cellule déjà remplie, de valider et c'est (mal) parti !
donc RE Faut voir
0
Bonjour ccm81,

Effectivement je ne l'avais pas précisé car je n'avais pas réalisé que c'était important... et j'en suis désolé !
Est-il donc possible de trouver une solution avec une fonction créée en VBA comme demandé dans l' enoncé ou faut-il reposté la question en donnant plus de précisions pour espérer une solution adaptée a mon besoin?

Cordialement,
0
ccm81 Messages postés 10851 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 16 avril 2024 2 404
15 juin 2020 à 09:41
Bonjour

Une façon de sécuriser :
Les cellules qui ont été transférées sont vérouillées par la macro et la feuille est protégée(pas de mot de passe)
https://mon-partage.fr/f/5oK6ewPE/
A tester

Cdlmnt
0
rorocr Messages postés 81 Date d'inscription mardi 8 septembre 2015 Statut Membre Dernière intervention 8 juin 2022 1
15 juin 2020 à 13:09
Bonjour et merci encore ccm81 mais j'ai vraiment besoin d'une solution avec formule et non pas avec macro... Est-ce possible en créant la formule en VBA ?
Si oui, dois-je créer un nouveau sujet?

Cordialement,
0
ccm81 Messages postés 10851 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 16 avril 2024 2 404
15 juin 2020 à 16:02
Désolé, je crois qu'on s'est mal compris, je pensais que tu voulais automatiser la mise à jour des dates (colonnes K, L, ...) , et remplacer la formule matricielle que tu as en ligne 13 (au passage, somme.si.ens, n'est pas reconnue par mon vieil excel 2003 et donc difficile pour moi de la reconstituer) par une procedure vba qui ferait le boulot (ce que je t'ai proposé)

Il doit être possible de créer une formule excel ou une fonction personnalisée depuis vba qui réponde exactement à ta question, mais de mon côté je vais arrêter là.

Bonne fin de journée
0
rorocr Messages postés 81 Date d'inscription mardi 8 septembre 2015 Statut Membre Dernière intervention 8 juin 2022 1
16 juin 2020 à 09:59
Merci quand même pour ton aide.


Bien cordialement,
0
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
16 juin 2020 à 14:25
bonjour,
1) pourquoi as-tu besoin d'une solution avec formule et non pas avec macro?
2) cherches-tu uniquement à compléter un tableau avec des dates trouvées dans différentes feuilles?
0
rorocr Messages postés 81 Date d'inscription mardi 8 septembre 2015 Statut Membre Dernière intervention 8 juin 2022 1
16 juin 2020 à 15:14
Bonjour Yg_be

Non le but final n'est pas de classer par ordre croissant les dates en question mais c'est une étape indispensable pour exploiter mon fichier par la suite.

Il me faut une formule car mon fichier de base est rempli quasiment tous les jours et par différentes personnes. Avec une formule, j'aurais moins de soucis.

Cordialement
0
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
16 juin 2020 à 15:26
si c'était une macro qui refaisait le travail automatiquement chaque fois qu'on ouvre le fichier, ne serait-ce pas suffisant?
0
rorocr Messages postés 81 Date d'inscription mardi 8 septembre 2015 Statut Membre Dernière intervention 8 juin 2022 1 > yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024
16 juin 2020 à 16:34
Non car il est possible que le fichier reste ouvert sur un poste durant un laps de temps assez long et que nous ayons besoin d’interpréter les résultats sans rouvrir le fichier alors que la base de données ai été modifiée.
Il me faut vraiment une solution par formule et non pas par macro
0
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476 > rorocr Messages postés 81 Date d'inscription mardi 8 septembre 2015 Statut Membre Dernière intervention 8 juin 2022
Modifié le 16 juin 2020 à 19:00
la macro pourrait aussi s'exécuter chaque fois que quelque chose change dans les données qui servent de base au calcul.
par ailleurs, je suggère que tu décrives ce que tu fais ensuite, il y a peut-être une manière plus simple de faire l'ensemble en une seule fois. je me demande, par exemple, pourquoi ce travail ne pourrait pas être fait au moment où les résultats sont interprétés, au lieu de le faire à chaque fois que les données sont modifiées.
de toutes façons, une formule me semble complètement hors de question dans ton contexte.
0