Incompatibilité de type - erreur d'exécution 13

Bonjour à tous,

Je reviens sur une demande récente pour laquelle Galopin01 m'a fait une proposition très intéressante qui fonctionne bien, sauf pour la partie Function SpecReplace(i&) si les champs contiennent du texte et non pas des chiffres.

La fonction SpecReplace traite la colonne L dans laquelle j'ai volontairement mis "Test" pour créer l'erreur (incompatibilité de type - erreur d'exécution 13.

Je pense à un problème de déclaration de variable, mais je n'ai pas réussi à trouver la bonne solution.

J'ajoute le fichier ex. dans lequel se trouve déjà ce code.

Merci d'avance pour votre aide.

Bonne journée

Dan

Option Explicit

Sub Macro3()
Dim k&, iLC%, iLR&, iR&, Arr, vC&
Application.ScreenUpdating = False
iLC = Cells(Columns.Count).End(xlToLeft).Column
For k = 1 To iLC
   iLR = IIf(Cells(Rows.Count, k).End(xlUp).Row > iLR, Cells(Rows.Count, k).End(xlUp).Row, iLR)
Next
With Range(Cells(1, 1), Cells(iLR, iLC))
    .Replace What:="Te", Replacement:="Terrain", LookAt:=xlWhole
    .Replace What:="Do", Replacement:="Domaine", LookAt:=xlWhole
    .Replace What:="In", Replacement:="Inventaire", LookAt:=xlWhole
End With
For k = 1 To iLC
 If Cells(1, k) = "Referencement" Then
   With Range(Cells(1, k), Cells(iLR, k))
     .Replace What:=1, Replacement:="Géoréférencement", LookAt:=xlWhole
     .Replace What:=2, Replacement:="Ratchmt. géographique", LookAt:=xlWhole
   End With
 End If
Next
For k = 1 To iLC
 If Cells(1, k) = "VersionME" Then
   With Range(Cells(1, k), Cells(iLR, k))
     .Replace What:=1, Replacement:="Rapportage 2010", LookAt:=xlWhole
     .Replace What:=2, Replacement:="V. interne 2013", LookAt:=xlWhole
   End With
 End If
Next
For k = 1 To iLC
 If Cells(1, k) = "Observation" Then
   With Range(Cells(1, k), Cells(iLR, k))
     .Replace What:=1, Replacement:="Vu", LookAt:=xlWhole
     .Replace What:=2, Replacement:="Entendu", LookAt:=xlWhole
   End With
 End If
Next
'Et ainsi de suite pour tous les replacements directs
For k = 1 To iLC
   If Cells(1, k) = "TaColonneSpecialRemplacementsMultiples" Then
      Arr = Range(Cells(1, k), Cells(iLR, k)).Value
      For iR = 2 To iLR
      vC = Arr(iR, 1)
         Arr(iR, 1) = SpecReplace(vC)
      Next
      Range(Cells(1, k), Cells(iLR, k)) = Arr
   End If
Next
End Sub
Function SpecReplace(i&)
Select Case i
Case 1: SpecReplace = "bla"
Case 2: SpecReplace = "blabla"
Case 3: SpecReplace = "blablabla"
Case 4: SpecReplace = "blablablabla"
Case 5: SpecReplace = "blablblablabla"
Case "Test": SpecReplace = "blablblablablabla"
End Select
End Function

bonjour,

Dans la Macro3 déclarer

vc$ ('as string..)

et modifier la fonction :

Function SpecReplace(s$)
Select Case s
Case "A": SpecReplace = "bla"
Case "B": SpecReplace = "blabla"
Case "C": SpecReplace = "blablabla"
Case "D": SpecReplace = "blablablabla"
Case "E": SpecReplace = "blablblablabla"
End Select
End Function

...et gare à la casse ! ("A"<>"a" !)

S'il y a des problèmes de casse mettre :

Select Case Ucase(s)
'et tous les case en "MAJUSCULE"

A+

Merci beaucoup pour tes explications très claires et ton aide toujours sympa.
Je vais essayer d'ajouter ce test dans la boucle, car comme précisé, le même champ peut contenir soit des chiffres soit des lettres.
Je passe le sujet en résolu.
Bonne journée et bon WE

Dan

Ça ne marchera pas pour des chiffres sauf s'ils ont été traités comme du texte.

Bref c'est l'exemple typique d'un fichier joint nul à c... !

Edit : Remplacer l'appel de fonction pa
      vC = UCase(CStr(Arr(iR, 1)))

et la function :

Function SpecReplace(s$)
Select Case s
Case "A": SpecReplace = "bla"
Case "B": SpecReplace = "blabla"
Case "C": SpecReplace = "blablabla"
Case "D": SpecReplace = "blablablabla"
Case "1": SpecReplace = "bli"
Case "2": SpecReplace = "blibli"
Case "3": SpecReplace = "bliblibli"
End Select
End Function

A+

Rechercher des sujets similaires à "incompatibilite type erreur execution"