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

XL 2019 Fonction Match

BNJ-ANIOL

XLDnaute Nouveau
Hello la communauté, (le 14/06/23)

Voici un petit défis : deux macros similaire, la première fonctionne, la seconde me sort une erreur : "Impossible de lire la propriété Match de la classe WorksheetFunction"

1)
ligne_sup = WorksheetFunction.Match([B4], Columns(2))
MsgBox (ligne_sup)

2)
Dim val_sup
val_sup = [B4]
ligne_sup = WorksheetFunction.Match(val_sup, Columns(2))
MsgBox (ligne_sup)

Merci pour vos lumières...

Le 15/06/23
J'ai avancé un peu sur mon problème (grâce à vos remarques...)
Donc pour ceux qui ont souligné le coté étrange de mon code [B4] et columns(2) , effectivement le résultat attendu est "4" , puisque B4 est dans la colonne 2 ; Mais parfois quand je galère sur un bug, j'essaie de me créer un code test basique pour voir où se trouve l'erreur.

Finalement, le bug vient de ma variable Sup_saisie
Au début, je n'avais pas précisé que Sup_saisie était une date
Mais même si j'écris : "Dim Sup_saisie as Date" , ça ne change pas mon problème
En revanche, si dans [B4] je mets un nombre classique ou du texte , alors il n'y a plus de problème.
Donc j'en viens à déduire que la fonction Match n'arrive pas à traiter les dates - à moins qu'il y aie une astuce...
 
Dernière édition:
Solution
bonjour
avec un fichier ca va beaucoup mieux
Dans la macro qui ne fonctionne pas ta valeur val_sup est une date qu'il faut transformer en double car la recherche se fait sur des valeurs numériques ( les dates en excel sont des valeurs numériques)
donc deux solutions déclarer
VB:
Dim val_sup As Double

ou transformer ta valeur en double.

Code:
ligne_sup = WorksheetFunction.Match(CDbl(val_sup), Columns(2))

dans le deuxième cas cela marche car il n'y a pas de variable

nota: avec un fichier résolu en 2 minutes ( et encore je suis large)

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonsoir,
Chez moi, Win10 XL2007, les deux marchent sans problème.

NB1: Vous n'avez pas de 3eme paramètre dans Match, donc vous recherchez la valeur inférieure la plus proche ?

NB2 :
Columns(2) étant la colonne B, B4 étant en colonne B.
La recherche de B4 dans la colonne B donnera 4. "Ya un truc qui m'échappe"
 

youky(BJ)

XLDnaute Barbatruc
Bonjour BNJ,
Déclarer val_sup et ligne_sup en variant car Match va renvoyer un N° de ligne et si il trouve pas une valeur d'error donc soit error soit un chiffre.
Essayer de supprimer option explicit pour tester et rien déclarer
Bruno
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonsoir Youky,
J'ai testé ça sans souci :
VB:
Sub Macro1()
ligne_sup = WorksheetFunction.Match([B4], Columns(2))
MsgBox (ligne_sup)
End Sub

Sub Macro2()
Dim val_sup
val_sup = [B4]
ligne_sup = WorksheetFunction.Match(val_sup, Columns(2))
MsgBox (ligne_sup)
End Sub
 

BNJ-ANIOL

XLDnaute Nouveau
Merci du retour,
J'avoue que mon exemple peu porter à confusion.
J'ai pas mis la totalité du code pour pas embrouiller les esprit, mais ma variable "Sup_Saisie" est récupérer dans une cellule [B4] d'un autre onglet. ; Cet onglet, est un onglet "synthèse"

Sup_saisie est une date d'enregistrement.
Pour ce qui est du 3ème paramètre, je cherche à supprimer la correspondance exacte (car effectivement si j'ai une ligne qui a été enregistré le 15/06/23 à 12:03:11 et une autre le 15/06/23 à 12:00:00 ; Si Sup_saisie= "15/06/23 12:03:11", je veux qu'il aille me supprimer uniquement la ligne qui à précisément cette valeur
 

BNJ-ANIOL

XLDnaute Nouveau
bonjour
Sans fichier joint, difficile de t'aider
contenu de B4 ?
Bonjour,
Merci du retour.
Alors [B4] est un exemple , mais peut-être un mauvais exemple puisqu'il s'agit de la colonne 2
Mais je vais tout de même creuser le problème pour voir si ça ne vient pas de là.

La valeur chercher se trouve dans un autre onglet.
Et c'est issue d'une macro "Now" , donc la valeur cherchée est une date au format jj/mm/aaaa hh:mm:ss
 

BNJ-ANIOL

XLDnaute Nouveau
Je viens de faire un test et le problème vient du format de ma cellule recherché (que ce soit [B4] ou un autre cellule)
Quand je fais Sup_Saisie=[B4] ,
Finalement, le bug vient de ma variable Sup_saisie
Au début, je n'avais pas précisé que Sup_saisie était une date
Mais même si j'écris : "Dim Sup_saisie as Date" , ça ne change pas mon problème
En revanche, si dans [B4] je mets un nombre classique ou du texte , alors il n'y a plus de problème.
Donc j'en viens à déduire que la fonction Match n'arrive pas à traiter les dates - à moins qu'il y aie une astuce...
 

BNJ-ANIOL

XLDnaute Nouveau
Finalement, le bug vient de ma variable Sup_saisie
Au début, je n'avais pas précisé que Sup_saisie était une date
Mais même si j'écris : "Dim Sup_saisie as Date" , ça ne change pas mon problème
En revanche, si dans [B4] je mets un nombre classique ou du texte , alors il n'y a plus de problème.
Donc j'en viens à déduire que la fonction Match n'arrive pas à traiter les dates - à moins qu'il y aie une astuce...

Et effectivement après, si la macro fonctionne ça donne 4 (dans cet exemple simplifié)
 

BNJ-ANIOL

XLDnaute Nouveau
Re,
Notre demandeur aurait-il fait une boulette dans sa demande ?
Pas de boulette particulière dans ma demande.
J'ai simplifier le code pour localiser le bug.
Mais j'ai homis de préciser que "Sup_saisie " est une variable type date
Si Sup_saisie est une variable type nombre ou type texte et si [B4] type nombre ou type texte , alors pas de soucis.
Mais si [B4] type date, alors problème

Donc j'ai un peu plus localisé mon problème :
Pourquoi la fonction match ne gère pas les dates ?
 

BNJ-ANIOL

XLDnaute Nouveau
Grâce à vos petite piste à droite et à gauche, j'ai pu contourner le problème

[B4].NumberFormat = "General"
Sup_Saisie = [B4]
ligne_sup = WorksheetFunction.Match(Sup_Saisie, Columns(2)) 'si Sup_Saisie directement = à [B4][B4].NumberFormat = "dd/mm/yyyy hh:mm:ss"
MsgBox (ligne_sup)

-> message afficher = 4 comme convenue
Si quelqu'un peut apporter d'autres explications à ce phénomène ou une autre syntaxe, je suis preneur
Sinon, je me contenterais de mon bidouillage ^^
 

Discussions similaires

Réponses
20
Affichages
559
  • Question
Microsoft 365 Code VBA
Réponses
10
Affichages
725
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…