Erreur fonction application.match

walidelfilali

XLDnaute Nouveau
Bonjour le forum,

Je rencontre une petit souci en utilisant la fonction application.match :

D = Application.Match(CLng(Range("C75").Value), Range("C1:p1"), 0) + 2
F = Application.Match(CLng(Range("D75").Value), Range("C1:p1"), 0) + 2

Vue que c'est à l'utilisateur du fichier de renseigner le contenu des cellules C75 et D75 et que la macro en question s'exécute à l'ouverture du fichier, j'obtiens un message d'erreur "incompatibilité de type" lorsque celles-ci sont encore vides.

Auriez-vous une solution pour contourner ce problème , merci de votre aide .
 

GeoTrouvePas

XLDnaute Impliqué
Re : Erreur fonction application.match

Bonjour,

Pourquoi ne mets tu pas une condition à l'exécution de cette commande ? Du genre :

Code:
If Range("C75").Value <> "" Then D = Application.Match(CLng(Range("C75").Value), Range("C1:P1"), 0) + 2

If Range("D75").Value <> "" Then F = Application.Match(CLng(Range("D75").Value), Range("C1:P1"), 0) + 2

ou même encore mieux si l'utilisateur est capable de renseigner la valeur de ces deux cellules dès le ouverture :

Code:
If Range("C75").Value <> "" Then
D = Application.Match(CLng(Range("C75").Value), Range("C1:P1"), 0) + 2
Else
Range("C75").Value = InputBox("Veuillez saisir la valeur de C75")
D = Application.Match(CLng(Range("C75").Value), Range("C1:P1"), 0) + 2
End If

If Range("D75").Value <> "" Then
F = Application.Match(CLng(Range("D75").Value), Range("C1:P1"), 0) + 2
Else
Range("D75").Value = InputBox("Veuillez saisir la valeur de C75")
F = Application.Match(CLng(Range("D75").Value), Range("C1:P1"), 0) + 2
End If
 
G

Guest

Guest
Re : Erreur fonction application.match

Bonjour,

Application.Macth renvoie soit un entier soit une valeur d'erreur s'il ne trouve pas. Comme dans une feuille de calcul (fonction Equiv).
Voilà pourquoi tu as une erreur 13 "incompatibilité de type"

Donc la variable doit être de type 'Variant':
Code:
Dim D as variant
'ou
Dim D 'variant par défaut
D= Application.Match( citere,plage,typederetour)
Ensuite il faut Tester D


Code:
If not IsError(D) then
    'Action à exécuter
Else
    'Autre action
Endif

A+
 

walidelfilali

XLDnaute Nouveau
Re : Erreur fonction application.match

Salut hasco, GeoT

Merci de répondre à mon problème, Voici le code de ma macro que j'ai modifié de facon à ce qu'il teste le application.match comme tu me l'as indiqué, mais pourtant l'exécution donne toujours la meme erreur et au meme endroit.

Dim D As Variant, P(30) as double
D = Application.Match(CLng(Cells(75, 3).Value), Range("C1:CI1"), 0) + 2 ' Erreur 13
If Not IsError(D) Then
For j = D To 8
P(0) = P(0) + Cells(2, j).Value
P(1) = P(1) + Cells(9, j).Value * Cells(2, j).Value
P(2) = P(2) + Cells(16, j).Value * Cells(2, j).Value
P(3) = P(3) + Cells(23, j).Value * Cells(2, j).Value
Next j
Else
Exit Sub

End If

Je m'y prends peut etre mal ?
 
G

Guest

Guest
Re : Erreur fonction application.match

Re,

Dans le post #3 je disais:

Application.Macth renvoie soit un entier soit une valeur d'erreur s'il ne trouve pas

or donc si tu fais:
Code:
D = Application.Match(CLng(Cells(75, 3).Value), Range("C1:CI1"), 0) [COLOR=red][B]+2[/B][/COLOR]

et que Match n'a pas trouvé, c'est comme essayé d'ajouter des lapins à des poireaux, puisque D à ce moment là contient déjà une erreur.

Macth ne trouve rien -> D= une erreur
Match trouve -> D= un entier

Il faut donc incrémenter D après l'avoir testé:

Code:
D = Application.Match(CLng(Cells(75, 3).Value), Range("C1:CI1"), 0) 
 
If Not IsError(D) Then
[B][COLOR=red]D=D+2
[/COLOR][/B]For j = D To 8
P(0) = P(0) + Cells(2, j).Value
P(1) = P(1) + Cells(9, j).Value * Cells(2, j).Value
P(2) = P(2) + Cells(16, j).Value * Cells(2, j).Value
P(3) = P(3) + Cells(23, j).Value * Cells(2, j).Value
Next j
Else
Exit Sub

A+
 

Discussions similaires

Réponses
3
Affichages
588
Réponses
64
Affichages
6 K

Statistiques des forums

Discussions
312 294
Messages
2 086 896
Membres
103 404
dernier inscrit
sultan87