"remplacer par" en grosse quantité

Sheldor

XLDnaute Occasionnel
Supporter XLD
excelliens... bonjour!

désolé par avance si j'ai mal cherché

j'utilise des base de données avec des noms latins (des jolis poissons)
je rencontre deux types de problèmes que je dois corriger:

1- des fautes de frappes
2- des noms qui changent dans le temps: un poisson s'appelle A aujourd'hui mais dans 1 mois il peut changer de nom "valide" et s'appeler B, A sera alors synonyme non valide de B

je répertories les fautes et les changement que je rencontre et ensuite je les garde de façon à appliquer facilement un traitement (une sorte de nettoyage) à une sélection de cellule:

For Each cell In Selection

'exemple changement de nom
If cell.Value = "Lepidonotothen mizops" Then cell.Value = "Lindbergichthys mizops"

'exemple faute de frappe connue
If cell.Value = "Lindbergictis mizops" Then cell.Value = "Lindbergichthys mizops"

Next


ça ça marche.

par contre j'envisage de le faire avec un nombre de données beaucoup plus important et la méthode ci dessus sera trop lente (genre j'ai 10000 cellules à nettoyer et j'ai 10000 synonymes)

ma question: vers quoi est-ce que je pourrais me diriger?

j'ai pensé à un fichier txt (mise à jour facile sans modifier mon code) qui contient toutes mes combinaisons de correspondances erroné/valide, le contenu serait chargé dans un object dictionnaire (mondico = CreateObject("scripting.dictionary") etc) pour faire les remplacements rapidement

je ne m'y connais pas assez, je ne demande pas une solution toute faite mais juste si quelqu'un a une idée de vers quelle méthode je pourrais m'orienter ce serait magnifique

mille merci de m'avoir lu !!

amicalement
nico
 

Pièces jointes

  • Classeur2.xls
    26 KB · Affichages: 31
  • Classeur2.xls
    26 KB · Affichages: 33
  • Classeur2.xls
    26 KB · Affichages: 38

david84

XLDnaute Barbatruc
Re : "remplacer par" en grosse quantité

Bonjour,
une idée à creuser (ou pas) : faire un tableau de correspondance avec dans la 1ère colonne les mots mal orthographiés et dans la 2ème colonne la bonne orthographe. Il suffit ensuite de boucler sur la colonne 1 pour voir si le mot mal orthographié est trouvé en utilisant Cells.Find et s'il est trouvé de le remplacer par le mot à sa droite en utilisant Cells.Replace.
L'utilisation de l'enregistreur de macro te permettra de récupérer une structure de code que tu pourras ensuite affiner.
A+
 

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
Re : "remplacer par" en grosse quantité

Bonjour,

Pour repérer très rapidement les mots mal orthographiés, il faut créer un dictionnaire (objet Dictionary)

Clé: mot mal orthographié Item:mot bien orthographié


Il faudrait un fichier + explicite pour connaître la présentation des données à corriger:

-Mot dans une cellule?
-Phrase?

Objet dictionary

Code:
Sub essai()
  Set d = CreateObject("Scripting.Dictionary")
  a = [H2:I2].Resize([h65000].End(xlUp).Row)
  For i = LBound(a) To UBound(a)
    d(a(i, 1)) = a(i, 2)
  Next i  
  For Each c In Selection
    If d.exists(c.Value) Then c.Value = d(c.Value)
  Next
End Sub

Si la sélection est grande, on peut la transférer dans un tableau.

JB
 

Pièces jointes

  • Classeur2-1.xls
    37 KB · Affichages: 39
  • Classeur2-1.xls
    37 KB · Affichages: 48
  • Classeur2-1.xls
    37 KB · Affichages: 44
Dernière édition:

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
Re : "remplacer par" en grosse quantité

Voir 2e solution mais pas + rapide.

Code:
Sub essai2()
  Dim b()
  t = Timer
  Application.ScreenUpdating = False
  Set d = CreateObject("Scripting.Dictionary")
  a = [H2:I2].Resize([h65000].End(xlUp).Row)
  For i = LBound(a) To UBound(a)
    d(a(i, 1)) = a(i, 2)
  Next i
  '----
  If Selection.Count > 1 Then
    b = Selection
  Else
    ReDim b(1 To 1, 1 To 1)
    b(1, 1) = ActiveCell
  End If
  For i = LBound(b) To UBound(b)
    For j = LBound(b, 2) To UBound(b, 2)
       If d.exists(b(i, j)) Then Selection.Cells(i, j) = d(b(i, j))
    Next j
  Next
  MsgBox Timer() - t
End Sub

JB
 

Pièces jointes

  • Classeur2-1.xls
    667.5 KB · Affichages: 36
  • Classeur2-1.xls
    667.5 KB · Affichages: 43
  • Classeur2-1.xls
    667.5 KB · Affichages: 40

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
Re : "remplacer par" en grosse quantité

3eme solution qui semble + rapide.

Code:
Sub essai3()
  Dim b()
  Application.ScreenUpdating = False
  Set d = CreateObject("Scripting.Dictionary")
  a = [H2:I2].Resize([h65000].End(xlUp).Row)
  For i = LBound(a) To UBound(a)
    d(a(i, 1)) = a(i, 2)
  Next i
  '----
  If Selection.Count > 1 Then
    b = Selection
  Else
    ReDim b(1 To 1, 1 To 1)
    b(1, 1) = ActiveCell
  End If
  For i = LBound(b) To UBound(b)
    For j = LBound(b, 2) To UBound(b, 2)
       If d.exists(b(i, j)) Then b(i, j) = d(b(i, j))
    Next j
  Next
  Selection.Value = b
End Sub

Peut être adapté au remplacement de mot dans une phrase http://boisgontierjacques.free.fr/fichiers/Cellules/RemplacerParMultiple.xls

JB
 

Pièces jointes

  • Classeur2-1.xls
    671.5 KB · Affichages: 45
  • Classeur2-1.xls
    671.5 KB · Affichages: 47
  • Classeur2-1.xls
    671.5 KB · Affichages: 49
Dernière édition:

Statistiques des forums

Discussions
312 177
Messages
2 085 973
Membres
103 073
dernier inscrit
MSCHOE16