VBA – procédure Function – fonction match

Hub

XLDnaute Occasionnel
Bonjour à tous,

Je souhaiterai réaliser une macro toute simple, probablement avec function puisque je dois reconduire cette macro dans différentes cellules de la même colonne.
Cette macro permettrait de récupérer la position du contenu de la cellule considérée avec la fonction Match et de la copier le résultat dans une cellule.
Quelque chose comme Match(H3, Worksheets(1).Range("$B$3:B301"), 0)

Comment faut il s’y prendre ?

Merci d’avance pour votre aide,

@+
 

Hub

XLDnaute Occasionnel
Re : VBA – procédure Function – fonction match

Bonjour,

Comme demandé, voici le fichier joint.

Rappel, je suis débutant en VBA et j’essaye de progresser étape par étape. Je sais que l’on peut faire beaucoup plus simple avec Excel et la fonction Filtre. Mais le but de cet exercice est d’apprendre VBA

Actuellement, dans la colonne J j’utilise la fonction EQUIV. Mon objectif est de réaliser une macro qui groupera la fonction Match et « PosiCell » de la colonne K.
Ensuite je pourrai l’intégrée dans celle de la feuille 1

J’espère être un peu plus clair dans mes explications.

Et encore merci pour votre aide.

@+
 

Pièces jointes

  • 0 liste des courses e.xls
    76.5 KB · Affichages: 40
  • 0 liste des courses e.xls
    76.5 KB · Affichages: 49

youky(BJ)

XLDnaute Barbatruc
Re : VBA – procédure Function – fonction match

Bonjour Hub, CPK,

Code:
Sub FindFirst()
    Dim lig As Long
    'Feuil1 est le codename de l'onglet et non le nom
    lig = Application.Match(Feuil1.[H3], Feuil1.[B1:B301], 0)
    'ou bien  de B3 mais faut ajouter +2
    'lig = Application.Match(Feuil1.[H3], Feuil1.[B3:B301], 0)+2
    'Feuil1.cells(lig,col)="tontruc"
    MsgBox lig
End Sub

Cet exemple utilise que la cellule H3
Si boucle utiliser Range plutôt que les crochets []

Bruno
 

CPk

XLDnaute Impliqué
Re : VBA – procédure Function – fonction match

Bonjour hub, Bruno.

Une autre façon d'obtenir le résultat. J'ai choisi des mots assez simple dans l'espoir que leur combinaison ne vous perde pas trop en route. N'hésitez pas à questionner dès la moindre incompréhension.

Code:
Sub course()

'Déclaration des variables
'-------------------------
Dim quoi As String 'indique que je vais rechercher un texte
Dim trouve As Range 'indique que ma variable va contenir une cellule et ses propriétés
Dim i As Integer 'i va être une variable qui va servir d'index

i = 3 'on dit que la valeur de i = 3

'Boucle qui va lire chaque cellule de la colonne h tant que les cellules ne seront pas vide

While Feuil1.Cells(i, 8) <> "" 'tant que ma cellule de la colonne h et de la ligne i est différente de rien
quoi = Feuil1.Cells(i, 8) ' j'intègre dans ma variable "quoi" la valeur de la cellule h et de la ligne i
Set trouve = Feuil1.Range(Cells(3, 2), Cells(Rows.Count, 2).End(xlUp)).Find(quoi, lookat:=xlWhole) 'je recherche dans ma colonne 2 une cellule ayant la valeur de la variable "quoi"
If Not trouve Is Nothing Then 'si je trouve une cellule correpondante
Feuil1.Cells(i, 10) = trouve.Row 'au croisement de la ligne i et de la colonne 10 j'inscrit le numéro de ligne de la valeur trouvée
Feuil1.Cells(i, 11) = trouve.Offset(0, 2).Address(False, False)  'au croisement de la ligne i et de la colonne 11, j'inscrit l'adresse de la cellule trouvée.
End If 'fin de mon programme d'execution dans le cas où j'ai trouvé une cellule correspondante
i = i + 1 'j'augmente la valeur i de 1 de façon a lire, dans la colonne h, la valeur suivante
Wend 'si dans l'execution de la boucle on rencontre une cellule vide alors la condition s'arrête (while = tant que)
End Sub
 

Discussions similaires