Incompatibilité de type

Bonjour,
J'ai récemment eu à écrire un script ayant pour but de rajouter des traductions.
J'ai un fichier de base, avec un liste de 1000 noms d'options en français (sur lequel le script est lancé), et un autre fichier comprenant une listes de tous les noms en français existant (dans l'entreprises), et leurs traductions en plusieurs langues.
Le but est, pour chaque ligne de mon fichier de base, de vérifier si le même nom ne peut pas être trouvé dans la colonne français du second fichier. Si jamais cela arrivait, copier dans les colonnes adjacentes leurs traductions (colonnes adjacentes, sur la même ligne, du second fichier "traduction").
Le fichiers traductions fait environs 10400 lignes et 4 colonnes (1 par langue).

Cependant, à la ligne 10, détaillée-ci après, après avoir réussi un "match" (donc plusieurs boucles), le programme me dit cela : Incompatibilité de type
Il n'y a sur les 2 fichiers, normalement, que du texte, (string).
Une idée ?

Voici mon script :


Sub ref2()
Dim i As Integer
Dim j As Integer
Dim wbfil As Workbook
Dim wbre As Worksheet
Set wbfil = Workbooks.Open("chemin_du_excel_avec_tarductions")
Set wsre = wbfil.Worksheets("PME")
For j = 1 To 1000
For i = 1 To 10400
If ThisWorkbook.Worksheets("RefOpt").Range("C" & j) = wsre.Range("H" & i) Then
ThisWorkbook.Worksheets("RefOpt").Range("D" & j) = wsre.Range("F" & i)
ThisWorkbook.Worksheets("RefOpt").Range("E" & j) = wsre.Range("E" & i)
ThisWorkbook.Worksheets("RefOpt").Range("F" & j) = wsre.Range("G" & i)
End If
Next
Next
Set wsre = Nothing
Set wbfil = Nothing

End Sub

et voici la ligne 10 :


If ThisWorkbook.Worksheets("RefOpt").Range("C" & j) = wsre.Range("H" & i) Then

Merci d'avance !

PS : Est-il possible de mettre une condition sur le type ? avec string par exemple ?

7 réponses

  1. Bonjour,

    quand vous avez l'erreur, click sur debugage, passez le curseur souris sur la ligne en erreur pour voir le contenu de vos deux range
    1. Merci, j'ai pu voir qu'une de mes 2 cases était de type Nothing, je voudrais donc "sauter" les cases de type Nothing. J'ai fait cela mais il me dit encore la même chose à :

      b = wsre.Range("H" & i)

      Savez vous comment faire ?

      Merci d'avance,

      Mon script :


      Sub ref2()
      Dim i As Integer
      Dim j As Integer
      Dim a As String
      Dim b As String
      Dim wbfil As Workbook
      Dim wbre As Worksheet
      Set wbfil = Workbooks.Open("chemin_excel_traductions")
      Set wsre = wbfil.Worksheets("PME")
      For j = 1 To 1000
      For i = 1 To 10400
      a = ThisWorkbook.Worksheets("RefOpt").Range("C" & j)
      Do While wsre.Range("H" & i) is Nothing
      i = i + 1
      Loop
      b = wsre.Range("H" & i)
      If a = b Then
      ThisWorkbook.Worksheets("RefOpt").Range("D" & j) = wsre.Range("F" & i)
      ThisWorkbook.Worksheets("RefOpt").Range("E" & j) = wsre.Range("E" & i)
      ThisWorkbook.Worksheets("RefOpt").Range("F" & j) = wsre.Range("G" & i)
      End If
      Next
      Next
      Set wsre = Nothing
      Set wbfil = Nothing

      End Sub

      1. Bonjour,

        il faudrait vos fichiers pour tester.
        1. J'ai le regret de devoir vous répondre défavorablement, ces fichiers sont internes à l'entreprise, et ne peuvent être divulgués.
          Toutes mes excuses,

          Pensez vous pour autant que le script est conforme (ou non) à mes attentes ? (surtout pour la partie while et b=.. )

          Merci d'avance,
      2. Contributeur
        Bonjour à tous,

        surtout 10 400 000 de boucles ça doit être terriblement lent.
        C'est optimisable.

        eric
        1. Mes tests restent infructueux jusqu'ici..
          Une idée ?

          Merci d'avance,

          Victor
          1. Contributeur
            Bonjour,

            oui, que tu mettes à dispo un fichier de travail avec les différents cas rencontrés.
            20 lignes suffisent.

            eric
        2. J'ai finalement trouvé la cause de mon problème.
          Dans le fichier traduction que l'on m'avait donné, certaines cases contenaient des erreurs (#VALEUR!), je les ai donc supprimé manuellement au fil des 10400 lignes.
          Le script a ensuite fonctionné.
          Merci beaucoup de votre aide quoi qu'il en soit,
          Pour information, quel type est affecté à ce type de case ?
          Cordialement,

          Victor
          1. Contributeur
            Bonjour,

            if iserror(...) then

            eric
          2. Merci !