Problème Erreur 2042

yakutake83

XLDnaute Occasionnel
Bonjour à tous!

J'ai un problème dans une macro que j'utilise, je me retrouve avec une de mes variables qui prend la valeur "Erreur 2042"... je vous mets ci dessous mon code, en espérant que vous trouverez le problème!

Dim Maligne As Integer
Dim Soprano As Variant
Dim Variato As String
Dim Alto As Single
Dim Exo As Variant
Dim ColResultat As Integer
Dim ColSoprano As Integer
Dim ColVariato As Integer

Public Sub meth3()
ColSoprano = NumColumn("Soprano")
If ColIntrouvable = True Then GoTo fin
ColVariato = NumColumn("Variato")
If ColIntrouvable = True Then GoTo fin
Soprano = CVar(Worksheets("RCE").Cells(Maligne, ColSoprano))
Variato = CStr(Worksheets("RCE").Cells(Maligne, ColVariato))
If (Soprano = 0) Then
Exo = 0
Else
If ((Variato = "alpha") Or (Variato = "Beta") Or (Variato = "Gamma") Or (Variato = "delta") Or (Variato = "epsilon") Or (Variato = "voir Zeta") Or (Variato= "#N/A")) Then
Exo = Soprano
Else
Alto = CSng(Variato)
Exo = Soprano * (1 + Alto)
End If
End If
Cells(Maligne, ColResultat) = Exo
End Sub

Function NumColumn(TexteRech As String) As Byte
ColIntrouvable = False
On Error GoTo erreur
NumColumn = Range("A1:IV1").Find(TexteRech, lookat:=xlWhole).Column
Exit Function
erreur:
ColIntrouvable = True
End Function
Le problème se situe sur la variable Variato et c'est elle qui renvoie parfois l'erreur 2042! Elle peut prendre des valeurs numériques (ce qui est le mieux pour moi) ou bien des valeurs de texte (ce qui me dérange)! Lorsque ça prend une valeur non numérique, je veux que Exo renvoie Soprano; et lorsqu'il y a une valeur numérique, je veux que Exo renvoie la formule Soprano * (1 + Variato)!
J'ai donc créé une variable supplémentaire, Alto, qui est un nombre de type Single et qui prend la valeur numérique de Variato!

Comme on peut le remarquer, dans les valeurs que peut prendre Variato, il y a "#N/A", et je pense que c'est là mon problème, car il semble que, lorsque la macro rencontre la valeur "#N/A", il se déclenche une erreur... tout du moins, quand j'arrive à une erreur et que je survole les variables sur la ligne qui bloque, je vois marqué
Variato = "Erreur 2042"
Comment faire pour contrer cette erreur, sachant que je ne peux pas modifier mon fichier de base où se trouvent les valeurs?

Merci d'avance pour votre aide!
 
Dernière édition:

Toine

XLDnaute Occasionnel
Re : Problème Erreur 2042

bonjour
a mon avis sa vien de
Variato = CStr(Worksheets("RCE").Cells(Maligne, ColVariato))
tu veux faire quoi avec cette ligne ???
o vue de ce que me dit l'aide sa sert pas a grand chose ici je pense
Variato = Worksheets("RCE").Cells(Maligne, ColVariato)
parait sufisant
 
Dernière édition:

Catrice

XLDnaute Barbatruc
Re : Problème Erreur 2042

Bonjour,

comme tu le précises, Variato peut prendre la valeur #NA car la cellule calculée par Variato = CStr(Worksheets("RCE").Cells(Maligne, ColVariato)) contient #NA.
Il faut juste que tu testes la cellule qui peut contenir #NA et affecter une autre valeur à Variato ou faire un autre traitment le cas échéant.

Par exemple :
Variato = Worksheets("RCE").Cells(Maligne, ColVariato)
If Application.IsError(Variato) Then Variato = X Else Variato = CStr(Variato) 'X à définir

ou
If Application.IsNA(Variato) Then Variato = X Else Variato = CStr(Variato) 'X à définir

ou
If IsError(Variato.value) Then Variato = X Else Variato = CStr(Variato) 'X à définir
 
Dernière édition:

yakutake83

XLDnaute Occasionnel
Re : Problème Erreur 2042

bon, bin c'est extra, le problème est résolu! merci à vous deux ;)

juste un truc : j'ai du changer le type de Variato pour un Variant au lieu d'un String (je signale, ça peut servir à quelqu'un d'autre)
 
Haut Bas