Trie en deux colonnes excel

  • Initiateur de la discussion Initiateur de la discussion GWADAMAD
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

GWADAMAD

XLDnaute Nouveau
Bonjour,

Je galère un peu sous excel pour un sujet donné que je ne maitrise pas. Bon je vous fais le topo. Je voudrai faire le trie entre deux colonnes texte et avoir un resultat me donnant la difference. laisse un fichier qui pourra vous dire ce que je veux faire sachant sur la troisieme colonne j'aurais une formule qui me permettra de trouver les noms trouvé.. voila j'espere que vous aurez compris!!!!😱

A+
 

Pièces jointes

Re : Trie en deux colonnes excel

Bonsoir Gwadamad,

Un essai avec la formule ci dessous, en C1 et recopiée vers le bas:

Code:
=SI(ESTNA(RECHERCHEV(A2;D:D;1;FAUX));"Non Trouvé";"Trouvé")

Pour la seconde partie de la question, peut-être un simple filtre (En sélectionnant le 1ère ligne: Menu insertion filtre) et ensuite, choisir dans la colonne C le critère (Trouvé ou non Trouvé ou Tous)

Exemple dans ton fichier ci-joint,

Bien à toi,

mth
 

Pièces jointes

Re : Trie en deux colonnes excel

Salut MTH,
Je te remercie c'est exactement ce que je voulais mais par contre entre les deux colonnes, s'il y a des différences d' orthographe? le fait de le mettre a faux dans la formule risque de ne pas me donner le resultat escompté. je l'ai mis a vrai pour qu'il y ai plus tolerance mais que faire si sur la colonne A l'on a un nom du type "tartuffe samira" et "tartuffe semira", pour nous on pourra l'interprété comme trouvé alors qu'avec cette formule la réponse sera "non trouvé" as tu une soluce? j'ai cherché dans mon coin et il y un algo de Levenshtein sur la distance entre deux mots plus il temps vers 0 plus il y a de certitude que cela soit le bon mot...tu peux le voir j'ai fait la comparaison sur la cellule C2 on un resultat qui est egal a 1... mais comment arriver a faire une boucle avec notre fonction ou peut etre as tu une autre solution???
 

Pièces jointes

Re : Trie en deux colonnes excel

Bonsoir Gwadamad,

Je n'ai pas de solution si les noms sont différents (à part t'assurer en amont que tes bases soient propres, ou avoir un identifiant unique en commun comme un matricule ou autre ?)

A part ça rudement impressionnant ce code "Levenshtein" !!!
Mais bien trop difficile pour moi là .... 😱

Donc je passe la main, en espérant que d'autres auront de meilleures idées pour te venir en aide; mais je lirai avec intérêt la suite de ton fil.

Bonne soirée,

mth
 
Re : Trie en deux colonnes excel

Salut MTH,
Je te remercie c'est exactement ce que je voulais mais par contre entre les deux colonnes, s'il y a des différences d' orthographe? le fait de le mettre a faux dans la formule risque de ne pas me donner le resultat escompté. je l'ai mis a vrai pour qu'il y ai plus tolerance mais que faire si sur la colonne A l'on a un nom du type "tartuffe samira" et "tartuffe semira", pour nous on pourra l'interprété comme trouvé alors qu'avec cette formule la réponse sera "non trouvé" as tu une soluce? j'ai cherché dans mon coin et il y un algo de Levenshtein sur la distance entre deux mots plus il temps vers 0 plus il y a de certitude que cela soit le bon mot...tu peux le voir j'ai fait la comparaison sur la cellule C2 on un resultat qui est egal a 1... mais comment arriver a faire une boucle avec notre fonction ou peut etre as tu une autre solution??? et encore merci
 

Pièces jointes

Re : Trie en deux colonnes excel

Bonjour Gwadamad,

J'ai regardé ton fichier et créer une formule rechdl(cellule,selection,critere) qui permet de faire la boucle en vérifiant les noms à l'aide de l'algorithme de Levenshtein. Dans l'exemple j'ai mis 3 en critère ce qui veut dire que tu peux avoir 3 lettres de différence entre les 2 noms comparés.

A+
 

Pièces jointes

Re : Trie en deux colonnes excel

Bonjour à tous
GWADAMAD a sa réponse : tant mieux... Mais un mot pour dire, avec mth, que
à part t'assurer en amont que tes bases soient propres, ou avoir un identifiant unique en commun comme un matricule ou autre
est le seul conseil qui vaille si on veut faire du travail sérieux. Je ne vois pas pourquoi, si Jacques Du Pont s'appelle Jacques Du Pont, je me permettrais de le nommer Jack Du Pont ou Jacques Dupont. La moindre des marques de correction est de respecter l'identité des gens à qui l'on a affaire. Ne pas le faire n'est rien d'autre que du manque de considération, voire du mépris.
À part ça, mth, la fonction de Vladimir Levenshtein (Владимир Иосифович Левенштейн) est un bel exemple de procédure récursive, c'est à dire de fonction qui s'appelle elle-même au cours de son exécution. Les procédures récursives bien écrites fournissent souvent un code compact et élégant, mais elles ont l'inconvénient d'être très gourmandes en ressources et pas toujours très rapides à exécuter. D'autres part, leur emploi nécessite une bonne connaissance de leur cadre d'emploi : la fonction s'appelle elle-même, l'instance appelée peut encore s'appeler elle-même et on peut atteindre des profondeurs de récursivité importantes. Encore faut-il que l'environnement accepte suffisamment d'appels successifs. Avec Visual Basic pour Applications, je ne sais pas qu'elle est la profondeur de récursivité maximale autorisée.
Bonne journée,
ROGER2327
 
Re : Trie en deux colonnes excel

Bonjour à tous 🙂

merci à JPP57 pour sa mise en pratique sur cet exemple, et merci beaucoup Roger pour tes explications très instructives (comme toujours ...)

Pour le cas de Gwadamad, il convient d'être prudent effectivement ... (au bureau je connais un Pascal Gérard et un Pascal Girard, deux personnes qui s'appellent Jean Gomez, deux qui s'appellent Stéphane Vincent, un Michel André et une Michèle André, j'imagine les belles bourdes que l'on peut faire en ne comparant que des noms, "à peu près pareils" ...)

En tout cas intellectuellement c'est passionnant, et je vous remercie de m'avoir fait découvrir tout ça, même si, comme l'explique parfaitement Roger, il semble qu'il faille rudement maîtriser son sujet pour employer ce code!

Très bon après midi à vous,

mth
 
Re : Trie en deux colonnes excel

Re...
En tout cas intellectuellement c'est passionnant, et je vous remercie de m'avoir fait découvrir tout ça, même si, comme l'explique parfaitement Roger, il semble qu'il faille rudement maîtriser son sujet pour employer ce code!
dit mth. Je suis d'accord avec elle. En revanche, je pense qu'on peut comprendre la récursivité sans être un grand spécialiste (la preuve ? Je crois bien avoir compris !). Je vais essayer d'en donner un exemple avec le cas classique (inutile, mais intellectuellement passionnant) du calcul d'une factorielle.
C'est inutile une fois parce que la fonction intégrée FACT d'Excel existe.
C'est inutile deux fois parce qu'un code non récursif simple fait la même chose :
Code:
[B]Function factorielle_roger1(n As Integer) As Double
Dim i As Long
   factorielle_roger1 = 1
   For i = 2 To n[/B] [COLOR="SeaGreen"]'si n < 2 cette boucle n'est pas exécutée.[/COLOR]
      [B]factorielle_roger1 = i * factorielle_roger1[/B] [COLOR="SeaGreen"]'Calcul évident : à chaque boucle,
'la valeur de factorielle_roger1 est remplacée par i*factorielle_roger1.
   'On obtient donc 1*2*3*...*(n-1)*n[/COLOR]
   [B]Next i
End Function[/B]
Mais je pense qu'il vaut la peine de décortiquer le code commenté suivant :
Code:
[B]Function factorielle_roger2(n As Integer) As Double
   If n > 1 Then[/B]
[COLOR="SeaGreen"]'[U]La ligne qui suit appelle factorielle_roger2[/U] (avec le paramètre n-1
'au lieu de n) [U]avant de pouvoir s'exécuter[/U] :
'Il arrivera un moment où elle appelera factorielle_roger2(1).[/COLOR]
      [B]factorielle_roger2 = n * factorielle_roger2(n - 1)[/B] [COLOR="SeaGreen"]'***[/COLOR]
   [B]Else[/B]
[COLOR="SeaGreen"]'Lorsque n=1, cette ligne est exécutée. À cet instant, factorielle_roger2
'prend la valeur 1.[/COLOR]
      [B]factorielle_roger2 = 1
   End If[/B]
[COLOR="SeaGreen"]'La fonction semble se terminer ici et [U]on pourrait craindre[/U]
'[U]qu'elle renvoyât toujours 1[/U].
'C'est vrai pour n=1, mais [U]comme cette fonction a été appelée n fois,[/U]
'[U]chaque appel doit se terminer. Elle devra donc se terminer n fois[/U].
'Elle va donc se terminer pour n=2, en renvoyant le calcul de
'la ligne marquée '***.
'Avec n=2, factorielle_roger2 prend la valeur n * factorielle_roger2(n - 1), i.e
'en remplaçant n par 2 :     2 * factorielle_roger2(1) soit 2*1=2.
'Puis elle se termine pour n=3 en donnant 3 * factorielle_roger2(2) soit 3*2=6.
'Puis elle se termine pour n=4 en donnant 4 * factorielle_roger2(3) soit 4*6=24.
'...et ainsi de suite jusqu'à atteindre la valeur passée au paramètre n.[/COLOR]
[B]End Function[/B]
On peut observer tout cela en exécutant la fonction pas à pas et en regardant comment évoluent les valeurs des variables.
Voilà... Ce n'est pas long, mais ça fait plaisir tout de même !​
À plus tard...
ROGER2327

__________________

Rappel inutile à certains, utile à d'autres :
Factorielle d'un entier positif n se note n! et vaut 1 x 2 x 3 x .... x (n - 1) x n.
Exemple : 5! = 1 x 2 x 3 x 4 x 5 = 120.
Cas particuliers :
1! = 1
0! = 1 (Ce n'est pas un calcul, mais une convention généralement acceptée.)
 
Dernière édition:
Re : Trie en deux colonnes excel

Bonjour a tous

Un très grand merci à ROGER pour ses explications concernant les macros recursives
J'ai tenté d'y voir plus clair en essayant de suivre ce qu'il se passe lors de l'appel a factorielle_roger2(10) en mettant des msgbox me permettant de suivre les valeurs de n et factorielle_roger2 comme ceci:

Code:
Function factorielle_roger2(n As Integer) As Double
   If n > 1 Then
'La ligne qui suit appelle factorielle_roger2 (avec le paramètre n-1
'au lieu de n) avant de pouvoir s'exécuter :
'Il arrivera un moment où elle appelera factorielle_roger2(1).
      [COLOR=blue]MsgBox ("n avant " & n)[/COLOR]
       factorielle_roger2 = n * factorielle_roger2(n - 1) '***
      [COLOR=blue]MsgBox ("n apres " & n)[/COLOR]
   Else
'Lorsque n=1, cette ligne est exécutée. À cet instant, factorielle_roger2
'prend la valeur 1.
      factorielle_roger2 = 1
   End If
  [COLOR=blue]MsgBox (n & " " & factorielle_roger2)[/COLOR]
'La fonction semble se terminer ici et on pourrait craindre
'qu'elle renvoyât toujours 1.
'C'est vrai pour n=1, mais comme cette fonction a été appelée n fois,
'chaque appel doit se terminer. Elle devra donc se terminer n fois.
'Elle va donc se terminer aussi pour n=2, en renvoyant le calcul de
'la ligne marquée '***.
'Avec n=2, factorielle_roger2 prend la valeur n * factorielle_roger2(n - 1), i.e
'en remplaçant n par 2 :     2 * factorielle_roger2(1) soit 2*1=2.
'Puis elle se termine pour n=3 en donnant 3 * factorielle_roger2(2) soit 3*2=6.
'Puis elle se termine pour n=4 en donnant 4 * factorielle_roger2(3) soit 4*6=24.
'...et ainsi de suite jusqu'à atteindre la valeur passée au paramètre n.
End Function

et la, comme l'a si bien dit Raymond DEVOS , je crois que mon chromosome en trop s'est mis a tourner en rond dans la case qui me manque

Il semble que n evolue d'abord de 10 a 1 (pour pouvoir sortir je suppose) puis remonte (comment ??? ) vers 10 avec une sortie a chaque valeur
 

Pièces jointes

Re : Trie en deux colonnes excel

Il semble que n evolue d'abord de 10 a 1 (pour pouvoir sortir je suppose) puis remonte (comment ??? ) vers 10 avec une sortie a chaque valeur
C'est exactement cela ! La procédure est engagée avec 10 (pour prendre l'exemple de pierrejean). Elle appelle immédiatement la procédure avec n-1 soit 9 qui, étant strictement supérieur à 1, provoque l'appel de la procédure avec 8
...puis 7
...puis 6
...puis 5
...puis 4
...puis 3
...puis 2
...puis 1; Là, 1 n'étant pas strictement supérieur à 1, pas de nouvel appel de procédure (c'est le Else...).
factorielle_roger2 prend la valeur 1 est la procédure avec n = 1 est terminée.
Les procédures encore inachevées vont s'achever dans l'ordre inverse de leur appel.
Donc, la procédure avec n = 2 s'achève en exécutant la ligne
Code:
       factorielle_roger2 = n * factorielle_roger2(n - 1) [COLOR="SeaGreen"]'***[/COLOR]
Comme à cet instant, n "vaut" 2 et factorielle_roger2 "vaut" 1, factorielle_roger2 devient 2 x 1 soit, sauf erreur, 2.
Reste à achever la procédure avec avec n = 3. Elle le fait en exécutant la ligne
Code:
       factorielle_roger2 = n * factorielle_roger2(n - 1) [COLOR="SeaGreen"]'***[/COLOR]
Mais à cet instant, n "vaut" 3 et factorielle_roger2 est devenu 2.
factorielle_roger2 devient donc 3 x 2 soit 6.
Reste à achever la procédure avec avec n = 4. Elle le fait en exécutant la ligne
Code:
       factorielle_roger2 = n * factorielle_roger2(n - 1) [COLOR="SeaGreen"]'***[/COLOR]
Mais à cet instant, n "vaut" 4 et factorielle_roger2 est devenu 6.
factorielle_roger2 devient donc 4 x 6 soit 24.
Et ainsi de suite...
Et ainsi de suite...
Jusqu'à épuisement...​
Bonne nuit,
ROGER2327
 
Dernière édition:
Re : Trie en deux colonnes excel

re 🙂
bonsoir à tous,

Et plus exactement mes respects Roger 🙂 , et merci pour tout le soin que tu as déployé autour de ton fichier exemple et tes explications.
(et notamment celle-ci "Les procédures encore inachevées vont s'achever dans l'ordre inverse de leur appel". )

J'ai pas mal joué avec ton fichier depuis tout à l'heure, et je me sauvegarde tout ça pour essayer de le mettre en application un jour 🙂

Vraiment merci à toi et à une prochaine fois,
(et merci a gwadamad qui a lancé ce fil 🙂 )

mth
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
10
Affichages
613
Retour