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

Microsoft 365 VBA Match: comment éviter l'erreur?

Simon 1234

XLDnaute Junior
Bonjour à tous. Je coince depuis hier...
Excel 365 et VBA, fonction MATCH: j'essaie de faire un petit formulaire qui ajoute une ligne dans une feuille OU qui, si elle existe déjà, vient corriger cette ligne. J'utilise MATCH pour trouver cette ligne si elle existe (NumLigne). Bon ça, ça semble marche. Là où ça coince, c'est si MATCH ne trouve rien.

VB:
Sub SAUVER_AVALIDER()
'copier depuis la fiche vers la base de données "A_VALIDER"
Dim NomFeuil As Variant 'on y stocke le nom de la feuille où stocker les données (action)
NomFeuil = Range("AA24").Value

'ci dessous ne marche pas si numligne n'existe pas
Dim NumLigne As Long
NumLigne = Application.Match(Range("T1").Value, Worksheets(NomFeuil).Range("A:A"), 0) ' laligne où se trouve l'IDU
If IsError(NumLigne) Then
Sheets(NomFeuil).Rows("1:1").Insert 'insérer une ligne
NumLigne = 1
ElseIf NumLigne > 0 Then 'reference existante
MsgBox "ref trouvée"
End If

'ci dessous ce sont les cellules où sont les données que je veux stocker dans la feuille
Source = Array("t1", "u16", "n8", "u21", "x21", "aa21", "ad21", "u24", "x24", "aa23", "aa24")

'on copie/colle en masse
For i = 0 To UBound(Source) ' Les tableaux commencent en 0, Ubound donne la fin
      Worksheets(NomFeuil).Cells(NumLigne, i + 1) = Worksheets("FICHE").Range(Source(i)).Value 'j'aime bien cette ligne <3
Next
MsgBox "La fiche a été stockée."

End Sub

Qu'est-ce que je ne comprends pas?
Je suis presque sûr que c'est presque rien... AU SECOURS!
 
Solution
Si une âme égarée cherche la même chose que moi, ceci semble fonctionner
VB:
Sub VALIDER_ACTION()
Dim NumLigne
If Not IsError(Application.Match(Range("A1").Value, Worksheets("FEUILLE").Range("A:A"), 0)) Then
   NumLigne = Application.Match(Range("A1").Value, Worksheets("FEUILLE").Range("A:A"), 0) ' la ligne où se trouve l'IDU
   MsgBox "Ligne trouvée"
Else
    MsgBox "ligne non trouvee"
End If
End Sub
Avec A1 la cellule qui contient la valeur à chercher dans ta feuille "FEUILLE"

Simon 1234

XLDnaute Junior
Oui en effet, je l'ai vu plus tard. J'ai quand meme toujours une incompatibilité de type qui traine sur ma ligne match et les contournements d'erreur ne fonctionnent pas...
J'ai vraiment pas du comprendre comment foncitonne match...
 

Simon 1234

XLDnaute Junior
De rien, c'est une joie d'essayer de t'aider.

Au moins je t'ai trouvé ton erreur de guillemets.
Je devrais mettre des smileys partout. J'écris vite et je ne prends pas le temps de faire de jolies phrases, autant pour moi. J'ai remercié d'avoir essayé, je vais chercher à comprendre MATCH en premier puis ça devrait passer. Je n'ai jamais eu besoin de m'n servir et j'ai cru piger ce qu'il fallait faire mais je me suis planté. Difficile de dire si quelqu'un est sympathique avec trois phrases... Je prèffère m'y remettre que d'ennuyer trois personnes...
 

TooFatBoy

XLDnaute Barbatruc
J'écris vite et je ne prends pas le temps de faire de jolies phrases, autant pour moi.
Au temps pour toi, soit. Mais je crois surtout que si tu allais moins vite, et que tu prennes le temps de poster un petit classeur, Dranreb t'aurait réglé ton problème depuis longtemps.
Et ensuite tu aurais pu analyser sa façon de procéder, pour t'apprendre à utiliser le Match.
 

Simon 1234

XLDnaute Junior
Si une âme égarée cherche la même chose que moi, ceci semble fonctionner
VB:
Sub VALIDER_ACTION()
Dim NumLigne
If Not IsError(Application.Match(Range("A1").Value, Worksheets("FEUILLE").Range("A:A"), 0)) Then
   NumLigne = Application.Match(Range("A1").Value, Worksheets("FEUILLE").Range("A:A"), 0) ' la ligne où se trouve l'IDU
   MsgBox "Ligne trouvée"
Else
    MsgBox "ligne non trouvee"
End If
End Sub
Avec A1 la cellule qui contient la valeur à chercher dans ta feuille "FEUILLE"
 

Dranreb

XLDnaute Barbatruc
Pourquoi le tentez vous une seconde fois, c'est inutile ! Dans ce cas ceci devrait aussi être bon :
VB:
Sub VALIDER_ACTION()
   Dim NumLigne
   NumLigne = Application.Match(Range("A1").Value, Worksheets("FEUILLE").Range("A:A"), 0) ' la ligne où se trouve l'IDU
      If Not IsError(NumLigne) Then
      MsgBox "Ligne trouvée"
   Else
      MsgBox "ligne non trouvee"
      End If
   End Sub
 
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…