Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Microsoft 365 Comparaison de deux cellules et afficher la différence

Nicolise

XLDnaute Nouveau
Bonjour à tous,

Je suis nouveau sur ce forum et également débutant en programmation et surtout en VBA.

Je souhaite comparer deux cellules et afficher la différence de texte (indépendamment des majuscules/minuscules et de l'ordre des mots) dans la 3ème colonne.
Par exemple :
30 Janvier 2020 // 30 Janvier // 2020
15 Février // février // 15
20 mars 2015 // Mars 2015 // 20

Sub remplacer()
tablo = Range("B1:B" & Range("B65536").End(xlUp).Row)
For n = 1 To Range("A65536").End(xlUp).Row
Range("C" & n) = Replace(Range("A" & n), tablo(n, 1), "")
Next n

End Sub

Pouvez vous s'il vous plait m'indiquer ce qui ne va pas dans mes lignes de commande ?
Bien cordialement,
 
Dernière édition:
Solution
Re,
je n'ai pas tout compris. Pour moi :
'30 Janvier 2020 // '2020 30 donne Janvier. Pouvez vous préciser en quoi c'est faux ?

Sinon pur minuscule/majuscule utilisez Lcase, Ucase. Là j'ai tout mis en minuscules :
VB:
Sub remplacer()
ListeA = Range("B65536").End(xlUp).Row  ' Taille de la liste
For i = 1 To ListeA                     ' Pour toute phrase en A
    tablo = Split(Range("B" & i), " ")  ' On sépare les mots en B
    Range("C" & i) = LCase(Range("A" & i))     ' On copie mot A dans C
    For j = 0 To UBound(tablo)          ' Pour tout mot dans B
        Range("C" & i) = Replace(Range("C" & i), LCase(tablo(j)), "") ' On supprime le mot en C
    Next j
Next i
End Sub

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Nicolise,
Testez ce bout de code :
VB:
Sub Remplacer()
ListeA = Range("B65536").End(xlUp).Row  ' Taille de la liste
For i = 1 To ListeA                     ' Pour toute phrase en A
    tablo = Split(Range("B" & i), " ")  ' On sépare les mots en B
    Range("C" & i) = Range("A" & i)     ' On copie mot A dans C
    For j = 0 To UBound(tablo)          ' Pour tout mot dans B
        Range("C" & i) = Replace(Range("C" & i), tablo(j), "") ' On supprime le mot en C
    Next j
Next i
End Sub

Mais j'ai testé aussi votre code, il donne le bon résultat. Le seul problème est que les mots doivent se suivent.
( par ex avec '30 Janvier 2020 // '30 2020, votre code donne 30 Janvier 2020, le mien donne Janvier )

Où se trouve votre problème mise à part celui ci ?
 
Dernière édition:

Nicolise

XLDnaute Nouveau


Bonjour Sylvanu,

merci pour votre réponse rapide. Effectivement votre résultat est celui que je recherche. Mais si on a 30 Janvier 2020 // 2020 30 on aura la première proposition qui n'est pas le résultat recherché à savoir Janvier. Je ne vois pas comment classer des mots.
J'ai également le problème des majuscules/minuscules qui doivent être considérés comme des mots identiques. Il y a un paramètre dans Excel qui fige ceci ?

Merci pour votre aide.
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Re,
je n'ai pas tout compris. Pour moi :
'30 Janvier 2020 // '2020 30 donne Janvier. Pouvez vous préciser en quoi c'est faux ?

Sinon pur minuscule/majuscule utilisez Lcase, Ucase. Là j'ai tout mis en minuscules :
VB:
Sub remplacer()
ListeA = Range("B65536").End(xlUp).Row  ' Taille de la liste
For i = 1 To ListeA                     ' Pour toute phrase en A
    tablo = Split(Range("B" & i), " ")  ' On sépare les mots en B
    Range("C" & i) = LCase(Range("A" & i))     ' On copie mot A dans C
    For j = 0 To UBound(tablo)          ' Pour tout mot dans B
        Range("C" & i) = Replace(Range("C" & i), LCase(tablo(j)), "") ' On supprime le mot en C
    Next j
Next i
End Sub
 

Discussions similaires

Réponses
7
Affichages
686
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…