[RESOLU] Formule pour Première ligne d'une zone avec 2 critères

  • Initiateur de la discussion Compte Supprimé 979
  • Date de début
C

Compte Supprimé 979

Guest
Bonjour à tous,

J'essaie de trouver une formule adaptable en VBA
qui me donnerait la première ligne d'une zone comprenant 2 critères
Semaine = 14
Equipe = TOTO

Voir fichier joint pour une meilleur compréhension :eek:

Merci d'avance pour vos réponses ;)

Ci-dessous le fichier avec la solution
 

Pièces jointes

  • PremièreLigneSemaineEquipe.xls
    25.5 KB · Affichages: 46
  • PremièreLigneSemaineEquipe.xls
    25.5 KB · Affichages: 49
  • PremièreLigneSemaineEquipe.xls
    25.5 KB · Affichages: 46
Dernière modification par un modérateur:

david84

XLDnaute Barbatruc
Re : Formule pour Première ligne d'une zone avec 2 critères

Re Bruno,
Si cela peut te servir :
Code:
Sub RechercherLigne()
Dim Résultat&, Plage
Set Plage = Range("A2:B" & Range("B" & Rows.Count).End(xlUp).Row)
Résultat = Evaluate("MIN(IF((" _
& Plage.Columns(1).Address & "=14)*(" & Plage.Columns(2).Address & "=""TOTO""),row(" _
& Plage.Columns(1).Address & ")))")
MsgBox Résultat
End Sub
Te ramène la ligne en question.
A+
 
Dernière édition:
C

Compte Supprimé 979

Guest
Re : Formule pour Première ligne d'une zone avec 2 critères

Salut David84,

Merci pour ta proposition ;) c'est super sympa
Mais je vais rester sur la soluce de Néné06, moins compacte, mais plus simple à comprendre et à modifier

Merci pour l'effort fourni :)

Mes amitiés
 

david84

XLDnaute Barbatruc
Re : Formule pour Première ligne d'une zone avec 2 critères

Re Bruno
Mais de rien:). En fait j'ai trouvé le sujet intéressant et même si je débute dans le VBA, je me suis rendu compte qu'il est quelque fois préférable d'éviter si possible les boucles en trouvant un moyen d'aller plus directement chercher l'info plutôt que de traiter l'ensemble de la matrice. Et effectivement, Find est bien pour cela mais je pense qu'il y a aussi des choses à creuser du côté d'Evaluate (regarde Ce lien n'existe plus par exemple en dernière partie de l'article).
A+
 

Modeste

XLDnaute Barbatruc
Re : Formule pour Première ligne d'une zone avec 2 critères

Bonjour le forum, le soleil,

Comme David, j'avais essayé d'adapter sa proposition avec Evaluate ... sauf que, moi, j'ai fini par renoncer :(

Par ailleurs, le dernier code de Bruno ne fonctionnera que si le tableau est trié (comme la proposition, par formule, de kjin ... si j'ai bien compris)
 
C

Compte Supprimé 979

Guest
Re : Formule pour Première ligne d'une zone avec 2 critères

Bonjour,

@Modeste, merci quand même
Effectivement, ma feuille "Détail Planning" est systématiquement triée lors d'un ajout

Salut JNP, j'ai : Erreur d'exécution 13 : Incompatibilité de type
Comment lui indiquer qu'il faut qu'il aille chercher dans la feuille "Détail Planning" ?

A+
 

JNP

XLDnaute Barbatruc
Re : Formule pour Première ligne d'une zone avec 2 critères

Re Bruno :),
Code:
MsgBox [MATCH("14TOTO",'Détail Planning'!A:A&'Détail Planning'!B:B,0)]
Il me semble qu'Equiv est accepté en colonne complète avec 2003, sinon, si tu as toujours un message d'erreur
Code:
MsgBox [MATCH("14TOTO",'Détail Planning'!A1:A100&'Détail Planning'!B1:B100,0)]
Bon WE :cool:
 

JNP

XLDnaute Barbatruc
Re : Formule pour Première ligne d'une zone avec 2 critères

Re :),
Techniquement, mais je n'ai pas testé, la solution du #15 me parrait erronée :rolleyes:...
Si j'ai bien assimilé le code, c'est Find la bonne semaine, puis Find la bonne équipe, mais si l'équipe n'existe pas dans la semaine, ce sera la semaine suivante il me semble :p...
Bon WE :cool:
 
C

Compte Supprimé 979

Guest
Re : Formule pour Première ligne d'une zone avec 2 critères

Salut JNP, merci pour les réponses

Sur 2003, les colonnes complètes, ne fonctionnent pas !
Il faut utiliser ta 2ème solution ;) et ça fonctionne 2 pecable

Pour ce qui est de la solution du #15, cela fonctionne parfaitement,
mais il faut que les les lignes soient bien triées par numéro de semaine et nom d'équipe

Ensuite le 1er find cherche la première ligne contenant le numéro de semaine
le 2ème find cherche à partir de la ligne trouvée, la ligne contenant le nom de l'équipe
comme tout ça est entre : On Error Resume Next et On Error Goto 0
Et que j'initialise ma ligne trouvée à 0
Si aucune ligne n'a été trouvé, j'ai ma fonction qui me retourne 0 = c'est qu'il n'existe pas de détail

A+
 

david84

XLDnaute Barbatruc
Re : Formule pour Première ligne d'une zone avec 2 critères

Re Bruno,
pour t'éviter de travailler sur des colonnes avec des plages inutilement trop importantes : nommer les 2 colonnes dynamiquement avec decaler et utiliser les noms dans la formule :
Code:
MsgBox [MATCH("14TOTO",Semaine & Equipe,0)+1]
A+
 

JNP

XLDnaute Barbatruc
Re : Formule pour Première ligne d'une zone avec 2 critères

Re :),
le 2ème find cherche à partir de la ligne trouvée, la ligne contenant le nom de l'équipe
C'est bien ce qu'il me semblait, donc si TOTO n'existe pas en semaine 14, c'est la ligne de TOTO en semaine 15 ou plus qui est remonté :p.
Si c'est le résultat qui te convient, très bien, mais je pensais que tu voulais 14 ET TOTO :rolleyes:...
Sinon, si ça t'intéresse, il y a moyen, à partir du moment où ta colonne semaine est triée, de définir avec 2 Find les bornes, et du fait, faire la recherche de Toto en Find que dans l'espace borné, donc uniquement 14 ET TOTO ;).
Tu peux regarder ce que j'avais proposeé pour le bornage ICI, si tu veux, il n'y aura aucun problème pour adapter :p.
Bon WE :cool:
 
C

Compte Supprimé 979

Guest
Re : Formule pour Première ligne d'une zone avec 2 critères

Salut JNP,

En fait mon explication n'est pas correcte
Le 'find' borné c'est le cas dans mon code #15 si la semaine 14 n'existe pas pour TOTO mais c'est la semaine 15
J'ai bien en retour de ma recherche la ligne = 0 puisque non trouvé

Tu penses bien que j'ai déjà fait des tas de tests pour en être certain

A+
 

JNP

XLDnaute Barbatruc
Re : [RESOLU] Formule pour Première ligne d'une zone avec 2 critères

Re :),
Je suis peut-être borné aussi, ou on est pas sur la même longueur d'onde :rolleyes:...
En pj, ton code et le cas de figure évoqué.
Le résultat est 42 alors que si je t'ai bien compris, il devrait être 0 :confused:...
Bonne soirée :cool:
 

Pièces jointes

  • PremièreLigneSemaineEquipe(1).xls
    41 KB · Affichages: 39
C

Compte Supprimé 979

Guest
Re : [RESOLU] Formule pour Première ligne d'une zone avec 2 critères

Re,

JNP tu as raison d'être borné (parfois ;))
Effectivement sur ton fichier ça ne fonctionne pas et chez moi si !?

Mais ouiiii ... c'est bien sûr ... :)
C'était sans compter ma sub
Code:
Sub RecupDetailSemaine(LigDS As Long, NumSem As Integer, NomEq As String)
  Dim LigPS As Long, IncDS As Integer, ColDS As Integer
  LigPS = 6: IncDS = 0
  Application.EnableEvents = False
  ' Inscrire les valeurs dans la feuille params
  Param "ModeModif", True
  Param "FirstLigDP", LigDS
  ' Avec la feuille de Détail Semaine
  With ShtDS
    Do While .Range("A" & LigDS).Value = NumSem And .Range("B" & LigDS).Value = NomEq
      For ColDS = 0 To 9
        ShtPS.Cells(LigPS + IncDS, 2 + ColDS) = ShtDS.Cells(LigDS, 4 + ColDS)
        ShtPS.Cells(LigPS + IncDS, 2 + ColDS).Interior.ColorIndex = xlNone
      Next ColDS
      ' Si la ligne suivante = même date
      If ShtDS.Range("C" & LigDS + 1) = ShtDS.Range("C" & LigDS) Then
        IncDS = IncDS + 1
      Else
        ShtPS.Cells(LigPS + 6, 2) = ShtDS.Cells(LigDS, 14)
        IncDS = 0: LigPS = LigPS + 7
      End If
      LigDS = LigDS + 1
    Loop
  End With
  Application.EnableEvents = True
End Sub
Et surtout ma ligne : Do While .Range("A" & LigDS).Value = NumSem

Et donc, tu as effectivement raison :eek:, ma fonction
Code:
Function LigDebSemEq(VSem As Integer, NomEq As String) As Long
ne marche pas comme souhaité :mad:


Je vais de ce pas utiliser MATCH en espérant ne pas avoir d'autres surprises

Merci l'ami d'avoir insisté, c'est parfois utile ... la preuve

Mes amitiés
 
C

Compte Supprimé 979

Guest
Re : [RESOLU] Formule pour Première ligne d'une zone avec 2 critères

JNP,

Comment puis-je adapter mon code du coup ?

Car comme ça, ça ne fonctionne pas !?
Code:
Function LigDebSemEq(VSem As Integer, NomEq As String) As Long
  Dim VSearch As String, Dlig As Long, Rng1 As String, Rng2 As String
  ' Initialiser la ligne de début de semaine pour l'equipe
  LigDebSemEq = 0
  VSearch = VSem & NomEq
  ' En cas d'erreur on continue sans message
  On Error Resume Next
  ' Avec la feuille Détail Semaines
  With Sheets("DétailSemaines")
    ' Récupérer la dernière ligne de la feuille
    Dlig = .Range("A" & Rows.Count).End(xlUp).Row
    Rng1 = "'DétailSemaines'!A1:A" & Dlig
    Rng2 = "'DétailSemaines'!B1:B" & Dlig
    LigDebSemEq = [MATCH(VSearch,Rng1 & Rng2,0)]
  End With
  On Error GoTo 0 ' Réinitialiser les erreurs
End Function

A+
 

Discussions similaires

Statistiques des forums

Discussions
312 837
Messages
2 092 660
Membres
105 482
dernier inscrit
Eric.FKF