Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2019 incompatibilité de type avec le fonction MATCH

RichardS

XLDnaute Junior
Dans un fichier, il y a des champs contenant des n° de chèques sous la forme suivante : CHQ. N.6886949. J'extrait le n° du chèque par des extraction gauche et droite dans un variable : Zone que je déclare en string. Dans un autre fichier, je possède un tableau contenant en colonne 1 (déclaré en numérique) le n° du chèque et dans les autres colonnes des informations que je souhaite extraire.
Sub test2()

Dim N%, Zone$, Zone2&
Dim Fh As Worksheet, Mn As Worksheet
Set Fh = Workbooks("Fic-J - 2020.xlsx").Sheets("Chèques")
Set Mn = Workbooks("Menu budget - 2020.xlsm").Sheets("Libellé=")

Zone = Left(Mn.Cells(8, 1), 14)
Zone = Right(Zone, 7)

N = Application.Match(Zone, Fh.Columns(1), 0)
If IsError(N) Then
MsgBox "non trouvé"
Else
MsgBox N
End If

End Sub

n°chèqueDate émissionDate dépot
4 823 22525/09/1828/09/18
4 823 22625/09/1804/04/19
4 823 22725/09/1810/01/19
4 823 23412/01/1917/01/19
4 823 23517/01/1924/01/19
Dans ce cas, il est normal qu'il y ai une incompatibilité de type puisque Zone est alpha et la colonne 1 est numérique
Si à la place de Zone = Right(Zone, 7), j'écris Zone2 = Right(Zone, 7) sachant que Zone2 est numérique, cela fonctionne et il trouve mon n° de chèque dans la colonne.
Par contre, si le n° de chèque ne figure pas dans la colonne il y a incompatibilité de type. Pourquoi ???
 

Staple1600

XLDnaute Barbatruc
Re

En copiant, le tableau du message#1, dans une feuille, le test ci-dessous est chez moi OK
VB:
Sub test_OK()
Dim Z$, Zone&
Z = "CHQ. N.4823227"
Zone = Split(Z, ".")(UBound(Split(Z, ".")))
N = Application.Match(Zone, Columns(1), 0)
If IsError(N) Then
MsgBox "Non trouvé!", vbCritical
Else
MsgBox (Cells(N, 1) & "| " & Cells(N, 2) & "| " & Cells(N, 3))
End If
End Sub
 

RichardS

XLDnaute Junior
pour mon manque de courtoisie mais j'étais vraiment agacé et polarisé par mon problème.
Aujourd'hui, je prends le temps de te dire bonjour et de te demander si tu peux prendre la peine de m'aider car, je suis d'accord avec toi, cela fonctionne, si le nombre cherché existe dans le tableau, mais dans mon exemple aussi.
Par contre dans mon exemple, si le nombre cherché ne figure pas dans le tableau, alors il m'affiche une incompatibilité de type ... Pourquoi ?
Par contre dans ton programme, cela fonctionne que le nombre existe ou pas.
Je ne vois qu'une différence entre ton programme et le mien, c'est la façon d'obtenir Zone. Moi avec LEN et RIGHT et toi avec SPLIT et UBOUND SPLIT.
D'ailleurs, si tu pouvais m'expliquer comment les utiliser cela me ferait plaisir.
Merci encore pour ton indulgence.
 

Staple1600

XLDnaute Barbatruc
Bonjour le fil, RichardS

Ouf, tu as perçu la pointe d'humour glissée dans le message#2
Et tu n'est pas parti en fulminant contre ce Staple "bisouillard"
Mieux, tu es revenu!

Pas de souci pour t'expliquer et t'aider.
Et j'évoquerai ici encore la charte qui dit que l'adjonction par le demandeur d'un petit fichier exemple facilite la résolution de la question.

Un fichier avec des données fictives bien entendu et allégé au possible.

NB: Mon code fonctionne parce j'ai répandu du gros sel sous mon clavier pour éloigner le mauvais oeil

PS: Tu veux une explication sur le fonction de Split?
OK, le temps de finir de souper et je te fais un petit exemple.
 

Staple1600

XLDnaute Barbatruc
Re

Voici un exemple illustratif avec Split
VB:
Sub test_split()
Dim dicton$, vArr
dicton = "Garde-toi du printemps de janvier !"
vArr = Split(dicton) ' on obtient un tableau (Array)
MsgBox vArr((LBound(vArr))) '1er élément du tableau
MsgBox vArr(2)
MsgBox vArr((UBound(vArr))) 'dernier élément du tableau
End Sub
 

RichardS

XLDnaute Junior
Merci pour tes explications je comprends mieux pour le split et Ubound
Ah oui, j'ai fini par trouver la même qualité de sel que toi et j'en ai saupoudré mon clavier et ça marche.
En fait j'avais fait une erreur dans mes nombres de caractères droite et gauche ce qui emmagasinait un espace.
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…