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