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 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 ?


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
315

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 069
Messages
2 085 037
Membres
102 762
dernier inscrit
Ucef