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 Functionbonjour,
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 FunctionA+