Match double

Bonjour à tous

jusqu'ici j'employais le match ci dessous

Match = Application.Match(ProjectId & "_1", Worksheets("Partners").Columns("A"), 0)

céci étant dit j'ai besoin désormais de modifier afin que ce fasse un double match autre:

par exemple:

match "3" en colonne E

match "Acronyme 1" en colonne C

le tout dans la worksheet partners

Comment procéder svp?

Merci

Bonjour Darkangel,

peux-tu joindre un petit fichier exemple de tes données ?

Voici un fichier exemple

je connais l'id projet et j'ai besoin de connaitre la position la plus elevee

exemple je cherche id 101005159 et j'ai besoin que ca me retourne 4 +1 afin que mon nouvel enregistrement soit positon 5

mais le tout en vba..

mais je dois avouer ne pas savoir comment m'y prendre!

merci par avance

3exemple2.xlsm (14.92 Ko)

re,

à tester,

Sub test()
Dim id As Long
id = 101005159
n = Application.Index(Range("D:D"), Application.Match(id, Range("B:B"), 0) + Application.CountIf(Range("B:B"), id) - 1) + 1
End Sub

Bonjour

je vais être honnête votre formule fonctionne très bien dans le fichier exemple

ceci étant dit j'arrive à adapter la formule en question dans ma base mais ca bug

n = Application.Index(Worksheets("Partners").Range("E:E"), Application.Match(ProjectId, Worksheets("Partners").Range("B:B"), 0) + Application.CountIf(Range("B:B"), ProjectId) - 1) + 1

le problème ne vient pas de votre formule mais de l'ID .

si je tente au préalable de récupérer ProjectId via msgbox ca me donne 19201

si j'ajoute comme dans votre exemple Dim ProjectId As Long la valeur retournée est de 0

si je lance votre formule ca me donne une incompatibilité de type...

par contre si je tente

Dim ProjectId As Long

'ProjectId = 19201

là cela fonctionne bien

Comment formater le ProjectId afin que cela fonctionne s'il vous plait?

Merci à vous pour votre assistance en tout cas

re,

à tester,

Sub test()
Dim id As String
Dim ProjectId As Long
id = "101005159"  'numéro provenant d'un TextBox ou autre
ProjectId = CLng(id)
n = Application.Index(Range("D:D"), Application.Match(ProjectId, Range("B:B"), 0) + Application.CountIf(Range("B:B"), ProjectId) - 1) + 1
End Sub

Re,

Merci à vous cela fonctionne parfaitement désormais

Je classe cette assistance en soulevant néanmoins une question d'interprétation

Je comprends bien la teneur du formatage nécessaire mais voudrait en comprendre la raison si possible.

Merci à vous I20100

re,

sur la feuille de calcul les id sont au format numérique

alors si tu recherche un id qui est au format texte cela retourne un erreur

fait le test sur la feuille de calcul des 2 formules suivante

=EQUIV("101005159";B:B;0) ---> retourne un erreur

=EQUIV(101005159;B:B;0) ---> retourne un bon résultat

Ok super merci à vous.

Je ferais le test afin de bien comprendre!

Même si je ne prendrais a priori pas le risque de modifier dans la base pour éviter les conflits sur d’autres formules de mon userform

Même si je ne prendrais a priori pas le risque de modifier dans la base pour éviter les conflits sur d’autres formules de mon userform

c'est une bonne décision, il vaut mieux faire la transformation via vba des id (texte) en id (numérique)

Merci pour ce conseil!

bien que ce post soit clôturé, je me permet de revenir vers vous I20100 concernant la 2ème partie de mon problème

je fichier exemple reste d'actualité j'ai juste ajouter 2 lignes de plus

via le code que vous m'avez soumis il m'est possible de faire ressortir la dernière position, encore merci.

Néanmoins j'ai besoin de laisser le choix entre

1) la dernière position, ça s'est reglé

2) une position antérieure d'un établissement supprimé

Dans le fichier exemple on a le projet 101005159 et on voit que la position 2 et 6 ont été supprimé

je voudrais que le système puisse détecter les positions manquante et proposer de les prendre

admettons que j'ajoute un centre 6 et choisisse le choix 2, le système devrait alors me proposer les positions inexistantes 2 et 6, à l'utilisateur de choisir laquelle prendre.

Une idée de comment je pourrais procéder?

Ps: j'ai fais le test des equiv mais c'est à là que c'est bizarre aucun ne donne d'erreur mais les deux me donnent des résultats à valeur beaucoup trop haute quasi l'intégralité de ma colonne...

du coup j'ai passer toute la colonne en nombre et maintenant

=EQUIV("952438";B:B;0) => donne N/A

l'autre me donne un chiffre mais non correspondant au réel

aussi comment forcer lors de l'enregistrement que l'id soit au format nombre?

Merci par avance

3exemple2.xlsm (15.34 Ko)

re,

voici un exemple pour récupérer une position libre,

Sub RechercheLibre()
Dim keywords As String, firstAddress As String, c As Range
Dim id As String
Dim ProjectId As Long
id = "101005159"  'numéro provenant d'un TextBox ou autre
ProjectId = CLng(id)

  With ActiveSheet.Range("B:B")
    Set c = .Find(ProjectId, LookIn:=xlValues, LookAt:=xlPart)
    If Not c Is Nothing Then
        firstAddress = c.Address
        Do
            k = Cells(c.Row, "D").Value - Cells(c.Row - 1, "D").Value
            If k > 1 Then
                MsgBox "libre " & Cells(c.Row - 1, "D").Value + 1
                Exit Sub
            End If
            Set c = .FindNext(c)
        Loop While Not c Is Nothing And c.Address <> firstAddress
    End If
 End With
End Sub

aussi comment forcer lors de l'enregistrement que l'id soit au format nombre?

par exemple,

Cells(1, 1) = CLng(TexBox1.Value)

Bonjour

merci à vous pour votre retour ainsi que votre code fonctionnel

Néanmoins quand je test dans mon fichier exemple il ne détecte que la position 2 sans toutefois trouver la 6 alors qu'il devrait le détecter dans le next non?

merci par avance,

bon weekend de paques

re,

enlève la ligne Exit Sub pour avoir les 2

bon weekend de paques à toi également

bien vu merci

Rechercher des sujets similaires à "match double"