IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Récupérer des cellules avec doublons


Sujet :

Macros et VBA Excel

  1. #1
    Membre actif
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 86
    Par défaut Récupérer des cellules avec doublons
    Bonjour,

    Je souhaiterais lorsque j'obtiens des doublons (uniquement et seulement 2 - non 3 ou 4 ou...), ce qui est le cas en cellules C9 et C10 (voir capture d'écran jointe), récupérer le nom de chacune des deux équipes pour ensuite aller rechercher dans une autre feuille excel, le match qui les oppose.

    J'ai essayé avec la fonction DOUBLONS_ADRESSES mais je n'arrive pas à exploiter le résultat obtenu.

    Merci pour votre aide
    Images attachées Images attachées  

  2. #2
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 241
    Par défaut
    Bonjour,

    Formule pour extraire les points en doublons
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SI(NB.SI($C$5:$C$10;$C5)=2;$B5;"")
    Pièce jointe 487571

    Avec les équipes en colonnes D, il ne vous reste plus qu'à faire la recherche dans les autres feuilles.

    Cdlt

  3. #3
    Membre actif
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 86
    Par défaut
    Bonsoir,

    Le contenu de la cellule D9 est-il votre formule de calcul ou le nom de l'équipe qui est trouvée en doublon ?

    Car depuis ce résultat, je souhaiterai faire, à travers du VBA, une recherche sur l'équipe (et non sur la formule) qui a été trouvée dans le premier doublon (NS) et dans un second temps faire une seconde recherche sur l'équipe qui a été trouvée dans le second doublon (VN) pour trouver le match opposant ces deux équipes.

    J'imagine que sans VBA, cette opération doit être impossible.

    Merci et au plaisir de vous lire.

  4. #4
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 241
    Par défaut
    Bonjour,

    Les résultats de la colonne D sont ceux issus de formules, (j'avais bien surligné en jaune la formule, qui doit être recopiée jusqu'à la dernière ligne), si chez vous, vous reproduisez cette formule de D5 à D10, vous devez bien obtenir la même chose que l'image fournie.

    Ensuite, avec une RECHERCHEV ou INDEX, vous trouverez facilement le match opposant ces 2 équipes. Là je ne peux pas en dire plus vu que je ne connais pas la structure de la feuille dans laquelle doit s'opérer la recherche.
    Mais voici un exemple de recherche du match:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =RECHERCHEV(Equipe, Feuille MATCH! $A$1:$B$100;2;0)
    Cdlt

  5. #5
    Membre actif
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 86
    Par défaut
    Bonjour,

    Je vous remercie pour vos réponses mais j'auraia aimé automatiser cette tâche au maximum, à travers VBA, afin de gagner du temps.

    Encore merci et bonne journée

  6. #6
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 241
    Par défaut
    Bonjour,

    Pourquoi pensez-vous qu'avec une formule vous perdriez du temps? Le VBA est inutile dans ce cas.
    Le fichier en exemple avec 2 feuilles, 1 pour les résultats "Scores" et une pour les rencontres "Rencontres"
    Pièce jointe 487967

    La formule pour la recherche en colonne E de la feuille "Scores" (à tirer vers le bas):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     =SI(D5<>"";RECHERCHEV($D5;Rencontres!A:B;2;0);"")
    Cdlt

  7. #7
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Bonjour à vous,

    Arturo,

    Avec un argument de moins, donc pour simplifier

    =SIERREUR(RECHERCHEV($D5;Rencontres!A:B;2;0);"")

  8. #8
    Membre actif
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 86
    Par défaut
    Bonsoir Messieurs,

    Vous trouverez un fichier joint qui vous permettra de mieux comprendre mes besoins, à savoir :

    Depuis la feuille "Classement détaillé matchs qual".
    Lorsque deux équipes (et uniquement deux et non 3 et 4…) se retrouvent à égalité de points (colonne C), il me faudrait aller dans la feuille "Résultats matchs qualif" pour retrouver le match qui les a opposé.
    Puis de là, reprendre le gagnant de ce match (colonnes B et C) et retourner dans la feuille "Classement détaillé matchs qual" afin de classer l'équipe (victorieuse) du match devant l'autre (perdante)

    Cela pourrait être le cas plusieurs fois (que deux équipes et uniquement deux, soient à égalité).

    De plus, tant pour la poule A que pour la poule B.

    Je persiste à croire que cela ne peut être possible qu'en VBA et c'est pour cela que je fais appel à vous.

    Merci et bonne soirée
    Fichiers attachés Fichiers attachés

  9. #9
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 241
    Par défaut
    Bonjour,

    Cela pourrait être le cas plusieurs fois (que deux équipes et uniquement deux, soient à égalité)., n'est-ce pas contradictoire par rapport à la demande?
    Plusieurs équipes peuvent être à égalité, mais d'après ce que vous demandez, dans ces cas là on ne traite pas puisque le nombre d'égalité dépasse 2. Ai-je bien compris?

    En attendant, voici le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    Option Compare Text
    Option Explicit
     
    Sub Recherche_Equipe()
        Dim f1_DerLig_A As Integer, f1_DerLig_B As Integer, i As Integer
        Dim f2_DerLig As Integer, j As Integer, Lig As Range
        Dim Formule As String
        Dim Eq_1 As String
        Dim Score_Eq_1 As Integer, Score_Eq_2 As Integer, MeilleurScore As Integer
        Dim f1 As Worksheet, f2 As Worksheet
        Dim Equipe1 As String, Equipe2 As String
     
        Application.ScreenUpdating = False
        Application.DisplayAlerts = False
        Set f1 = Sheets("Classement détaillé matchs qual")
        Set f2 = Sheets("Résultats matchs qualif")
     
        '***********************************************************************************
        'Formule de recherche des doublons
        'Poule A
        f1_DerLig_A = f1.[B5].End(xlDown).Row
        f1.Range("H5:H10").FormulaR1C1 = "=IF(COUNTIF(R5C3:R10C3,RC3)=2,RC2,"""")"
        'Poule B
        f1_DerLig_B = f1.[B19].End(xlDown).Row
        f1.Range("H19:H24").FormulaR1C1 = "=IF(COUNTIF(R19C3:R24C3,RC3)=2,RC2,"""")"
        f1.Range("H5:H24").Value = f1.Range("H5:H24").Value
        '***********************************************************************************
     
        'Traitement poule A
        If Application.WorksheetFunction.CountA(f1.Range("H5:H" & f1_DerLig_A).Value) <> 0 Then
            For i = 5 To f1_DerLig_A
                If f1.Cells(i, "H") <> "" Then
                    Equipe1 = f1.Cells(i, "B")
                    Equipe2 = f1.Cells(i + 1, "B")
                    '***********************************************************************************
                    'Formule de recherche des 2 équipes en doublon
                    'Poule A
                    Formule = "=IF(OR(AND(RC[-8]=""" & Equipe1 & """,RC[-1]=""" & Equipe2 & """),AND(RC[-8]=""" & Equipe2 & """,RC[-1]=""" & Equipe1 & """)),1,"""")"
                    f2.Range("I8:I34").FormulaR1C1 = Formule
                    f2.Range("I8:I34").Value = f2.Range("I8:I34").Value
                    Set Lig = f2.Range("I8:I34").Find(1, LookIn:=xlValues, lookat:=xlWhole)
                    'Récupération des scores
                    Score_Eq_1 = f2.Cells(Lig.Row, "B")
                    Score_Eq_2 = f2.Cells(Lig.Row, "C")
                    If Application.WorksheetFunction.Max(Score_Eq_1, Score_Eq_2) = Score_Eq_2 Then
                        If f2.Cells(Lig.Row, "A") = Equipe1 Then 'alors on permute les 2 équipes dans la feuille "Classement", sinon on ne touche à rien
                            f1.Range(Cells(i, "B"), Cells(i, "H")).Copy f1.Range(Cells(30, "B"), Cells(30, "H"))
                            f1.Range(Cells(i + 1, "B"), Cells(i + 1, "H")).Copy f1.Range(Cells(i, "B"), Cells(i, "H"))
                            f1.Range(Cells(30, "B"), Cells(30, "H")).Copy f1.Range(Cells(i + 1, "B"), Cells(i + 1, "H"))
                            f1.Range(Cells(30, "B"), Cells(30, "H")).Clear
                        End If
                    End If
                    Exit For
                End If
            Next i
        End If
     
        'Traitement poule B
        If Application.WorksheetFunction.CountA(f1.Range("H19:H" & f1_DerLig_B).Value) <> 0 Then
            For i = 19 To f1_DerLig_B
                If f1.Cells(i, "H") <> "" Then
                    Equipe1 = f1.Cells(i, "B")
                    Equipe2 = f1.Cells(i + 1, "B")
                    '***********************************************************************************
                    'Formule de recherche des 2 équipes en doublon
                    'Poule B
                    Formule = "=IF(OR(AND(RC[-8]=""" & Equipe1 & """,RC[-1]=""" & Equipe2 & """),AND(RC[-8]=""" & Equipe2 & """,RC[-1]=""" & Equipe1 & """)),1,"""")"
                    f2.Range("I43:I64").FormulaR1C1 = Formule
                    f2.Range("I43:I64").Value = f2.Range("I43:I64").Value
                    Set Lig = f2.Range("I43:I64").Find(1, LookIn:=xlValues, lookat:=xlWhole)
                    'Récupération des scores
                    Score_Eq_1 = f2.Cells(Lig.Row, "B")
                    Score_Eq_2 = f2.Cells(Lig.Row, "C")
                    If Application.WorksheetFunction.Max(Score_Eq_1, Score_Eq_2) = Score_Eq_2 Then
                        If f2.Cells(Lig.Row, "A") = Equipe1 Then 'alors on permute les 2 équipes dans la feuille "Classement", sinon on ne touche à rien
                            f1.Range(Cells(i, "B"), Cells(i, "H")).Copy f1.Range(Cells(30, "B"), Cells(30, "H"))
                            f1.Range(Cells(i + 1, "B"), Cells(i + 1, "H")).Copy f1.Range(Cells(i, "B"), Cells(i, "H"))
                            f1.Range(Cells(30, "B"), Cells(30, "H")).Copy f1.Range(Cells(i + 1, "B"), Cells(i + 1, "H"))
                            f1.Range(Cells(30, "B"), Cells(30, "H")).Clear
                        End If
                    End If
                    Exit For
                End If
            Next i
        End If
     
        f1.Columns(8).ClearContents
        f2.Columns(9).ClearContents
     
        Set Lig = Nothing
        Set f1 = Nothing
        Set f2 = Nothing
    End Sub
    Le fichier
    Pièce jointe 488240

    Cdlt

  10. #10
    Membre actif
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 86
    Par défaut
    Bonjour ARTUR083,

    Il peut arriver que quatre équipes de la même poule soient à égalité, mais deux par deux.

    Exemple :

    V N et N S aient 7 points chacune
    et que O S et A aient 13 points chacune.

    En tout cas merci pour votre code.

    Est-il terminé ou dois-je attendre la suite par rapport à l'explication que je viens de vous donner ?

    Comment lancer votre code ?

    Encore merci et bonne journée

  11. #11
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 241
    Par défaut
    Il peut arriver que quatre équipes de la même poule soient à égalité, mais deux par deux.
    Exemple :
    V N et N S aient 7 points chacune
    et que O S et A aient 13 points chacune.


    C'est bien ce que je craignais, votre demande initiale n'est pas correcte (j'obtiens des doublons (uniquement et seulement 2 - non 3 ou 4 ou...)).
    Je modifie mon fichier et je vous le renvoie

  12. #12
    Membre actif
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 86
    Par défaut
    (uniquement et seulement 2 - non 3 ou 4 ou...)


    Désolé ARTUR083 !

    En écrivant "non 3 ou 4 ou...", je parlais du nombre d'équipes qui pouvaient se retrouver en doublon.

    Si 3 ou 4 équipes avaient toutes 7 points, cela ne me posait pas de problème.

  13. #13
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 241
    Par défaut
    Voilà

    le fichier
    Pièce jointe 488298

    le code utilisé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    Option Compare Text
    Option Explicit
     
    Dim f1_DerLig_A As Integer, f1_DerLig_B As Integer, i As Integer
    Dim f2_DerLig As Integer, j As Integer, Lig As Range
    Dim Formule As String
    Dim Eq As String
    Dim Score_Eq_1 As Integer, Score_Eq_2 As Integer, MeilleurScore As Integer
    Dim f1 As Worksheet, f2 As Worksheet
    Dim Equipe1 As String, Equipe2 As String
     
    Sub Recherche_Equipe()
        Application.ScreenUpdating = False
        Application.DisplayAlerts = False
        Set f1 = Sheets("Classement détaillé matchs qual")
        Set f2 = Sheets("Résultats matchs qualif")
     
        '***********************************************************************************
        'Formule de recherche des doublons
        'Poule A
        f1_DerLig_A = f1.[B5].End(xlDown).Row
        f1.Range("H5:H10").FormulaR1C1 = "=IF(COUNTIF(R5C3:R10C3,RC3)=2,RC2,"""")"
        'Poule B
        f1_DerLig_B = f1.[B19].End(xlDown).Row
        f1.Range("H19:H24").FormulaR1C1 = "=IF(COUNTIF(R19C3:R24C3,RC3)=2,RC2,"""")"
        f1.Range("H5:H24").Value = f1.Range("H5:H24").Value
        '***********************************************************************************
     
        'Traitement poule A
        If Application.WorksheetFunction.CountA(f1.Range("H5:H" & f1_DerLig_A).Value) <> 0 Then
            For i = 5 To f1_DerLig_A
                If f1.Cells(i, "H") <> "" Then
                    Equipe1 = f1.Cells(i, "B")
                    Equipe2 = f1.Cells(i + 1, "B")
                    '***********************************************************************************
                    'Formule de recherche des 2 équipes en doublon
                    'Poule A
                    Formule = "=IF(OR(AND(RC[-8]=""" & Equipe1 & """,RC[-1]=""" & Equipe2 & """),AND(RC[-8]=""" & Equipe2 & """,RC[-1]=""" & Equipe1 & """)),1,"""")"
                    f2.Range("I8:I34").FormulaR1C1 = Formule
                    f2.Range("I8:I34").Value = f2.Range("I8:I34").Value
                    Set Lig = f2.Range("I8:I34").Find(1, LookIn:=xlValues, lookat:=xlWhole)
                    Analyse_et_Permutation
                End If
            Next i
        End If
     
        'Traitement poule B
        If Application.WorksheetFunction.CountA(f1.Range("H19:H" & f1_DerLig_B).Value) <> 0 Then
            For i = 19 To f1_DerLig_B
                If f1.Cells(i, "H") <> "" Then
                    Equipe1 = f1.Cells(i, "B")
                    Equipe2 = f1.Cells(i + 1, "B")
                    '***********************************************************************************
                    'Formule de recherche des 2 équipes en doublon
                    'Poule A
                    Formule = "=IF(OR(AND(RC[-8]=""" & Equipe1 & """,RC[-1]=""" & Equipe2 & """),AND(RC[-8]=""" & Equipe2 & """,RC[-1]=""" & Equipe1 & """)),1,"""")"
                    f2.Range("I43:I64").FormulaR1C1 = Formule
                    f2.Range("I43:I64").Value = f2.Range("I43:I64").Value
                    Set Lig = f2.Range("I43:I64").Find(1, LookIn:=xlValues, lookat:=xlWhole)
                    Analyse_et_Permutation
                End If
            Next i
        End If
     
        f1.Columns(8).ClearContents
        f2.Columns(9).ClearContents
     
        Set Lig = Nothing
        Set f1 = Nothing
        Set f2 = Nothing
    End Sub
     
    Sub Analyse_et_Permutation()
        'Récupération des scores
        Score_Eq_1 = f2.Cells(Lig.Row, "B")
        Score_Eq_2 = f2.Cells(Lig.Row, "C")
        MeilleurScore = Application.WorksheetFunction.Max(Score_Eq_1, Score_Eq_2)
        If MeilleurScore = Score_Eq_1 Then
            Eq = f2.Cells(Lig.Row, "A")
        Else
            Eq = f2.Cells(Lig.Row, "H")
        End If
        'donc, c'est la 2ème équipe qui a obtenu le meilleur score
        If f1.Cells(i, "B") <> Eq Then  'alors on permute les 2 équipes dans la feuille "Classement", sinon on ne touche à rien
            If f1.Cells(i, "B") <> Eq Then  'alors on permute les 2 équipes dans la feuille "Classement", sinon on ne touche à rien
                f1.Range(Cells(i, "B"), Cells(i, "AN")).Copy f1.Range(Cells(30, "B"), Cells(30, "AN"))
                f1.Range(Cells(i + 1, "B"), Cells(i + 1, "AN")).Copy f1.Range(Cells(i, "B"), Cells(i, "AN"))
                f1.Range(Cells(30, "B"), Cells(30, "AN")).Copy f1.Range(Cells(i + 1, "B"), Cells(i + 1, "AN"))
                f1.Range(Cells(30, "B"), Cells(30, "AN")).Clear
                f2.Cells(Lig.Row, "I").ClearContents
                f1.Range(Cells(i, "H"), Cells(i + 1, "H")).ClearContents
            End If
        End If
    End Sub
    Plus qu'à faire des essais

  14. #14
    Membre actif
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 86
    Par défaut
    A faire ou à inscrire ?

    Je teste et je vous tiens informé.

    Merci beaucoup et à bientôt

  15. #15
    Membre actif
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 86
    Par défaut
    Rebonjour ARTUR083,

    Après avoir effectué un premier test, les valeurs dans les colonnes de C à G ne correspondent plus aux valeurs de chaque équipe (par ligne). (voir fichiers joints)

    Merci et bonne fin de journée.
    Fichiers attachés Fichiers attachés

  16. #16
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 241
    Par défaut
    Bon sang, J'avais pas vu que dans cette zone il y avait des formules, Je corrige le tir et je renvoie tout ça. Patientez un peu.

  17. #17
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 241
    Par défaut
    Voilà avec la modif. J'ai créé de nouvelles formules pour qu'elles soient compatibles avec les mouvements entre lignes. Elles sont reproduites systématiquement après chaque mouvements.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    Sub Recherche_Equipe()
        Application.ScreenUpdating = False
        Application.DisplayAlerts = False
        Set f1 = Sheets("Classement détaillé matchs qual")
        Set f2 = Sheets("Résultats matchs qualif")
     
        '***********************************************************************************
        'Formule de recherche des doublons
        'Poule A
        f1_DerLig_A = f1.[B5].End(xlDown).Row
        f1.Range("H5:H10").FormulaR1C1 = "=IF(COUNTIF(R5C3:R10C3,RC3)=2,RC2,"""")"
        'Poule B
        f1_DerLig_B = f1.[B19].End(xlDown).Row
        f1.Range("H19:H24").FormulaR1C1 = "=IF(COUNTIF(R19C3:R24C3,RC3)=2,RC2,"""")"
        f1.Range("H5:H24").Value = f1.Range("H5:H24").Value
        '***********************************************************************************
     
        'Traitement poule A
        If Application.WorksheetFunction.CountA(f1.Range("H5:H" & f1_DerLig_A).Value) <> 0 Then
            For i = 5 To f1_DerLig_A
                If f1.Cells(i, "H") <> "" Then
                    Equipe1 = f1.Cells(i, "B")
                    Equipe2 = f1.Cells(i + 1, "B")
                    '***********************************************************************************
                    'Formule de recherche des 2 équipes en doublon
                    'Poule A
                    Formule = "=IF(OR(AND(RC[-8]=""" & Equipe1 & """,RC[-1]=""" & Equipe2 & """),AND(RC[-8]=""" & Equipe2 & """,RC[-1]=""" & Equipe1 & """)),1,"""")"
                    f2.Range("I8:I34").FormulaR1C1 = Formule
                    f2.Range("I8:I34").Value = f2.Range("I8:I34").Value
                    Set Lig = f2.Range("I8:I34").Find(1, LookIn:=xlValues, lookat:=xlWhole)
                    On Error Resume Next
                    If Err.Number = 0 Then Analyse_et_Permutation
                    On Error GoTo 0
                End If
            Next i
        End If
     
        'Traitement poule B
        If Application.WorksheetFunction.CountA(f1.Range("H19:H" & f1_DerLig_B).Value) <> 0 Then
            For i = 19 To f1_DerLig_B
                If f1.Cells(i, "H") <> "" Then
                    Equipe1 = f1.Cells(i, "B")
                    Equipe2 = f1.Cells(i + 1, "B")
                    '***********************************************************************************
                    'Formule de recherche des 2 équipes en doublon
                    'Poule B
                    Formule = "=IF(OR(AND(RC[-8]=""" & Equipe1 & """,RC[-1]=""" & Equipe2 & """),AND(RC[-8]=""" & Equipe2 & """,RC[-1]=""" & Equipe1 & """)),1,"""")"
                    f2.Range("I43:I64").FormulaR1C1 = Formule
                    f2.Range("I43:I64").Value = f2.Range("I43:I64").Value
                    Set Lig = f2.Range("I43:I64").Find(1, LookIn:=xlValues, lookat:=xlWhole)
                    On Error Resume Next
                    If Err.Number = 0 Then Analyse_et_Permutation
                    On Error GoTo 0
                End If
            Next i
        End If
        Formules
        f1.Columns(8).ClearContents
        f2.Columns(9).ClearContents
     
        Set Lig = Nothing
        Set f1 = Nothing
        Set f2 = Nothing
    End Sub
     
    Sub Analyse_et_Permutation()
        'Récupération des scores
        Score_Eq_1 = f2.Cells(Lig.Row, "B")
        Score_Eq_2 = f2.Cells(Lig.Row, "C")
        MeilleurScore = Application.WorksheetFunction.Max(Score_Eq_1, Score_Eq_2)
        If MeilleurScore = Score_Eq_1 Then
            Eq = f2.Cells(Lig.Row, "A")
        Else
            Eq = f2.Cells(Lig.Row, "H")
        End If
        'donc, c'est la 2ème équipe qui a obtenu le meilleur score
        If f1.Cells(i, "B") <> Eq Then  'alors on permute les 2 équipes dans la feuille "Classement", sinon on ne touche à rien
            If f1.Cells(i, "B") <> Eq Then  'alors on permute les 2 équipes dans la feuille "Classement", sinon on ne touche à rien
                f1.Range(Cells(i, "B"), Cells(i, "AN")).Copy f1.Range(Cells(30, "B"), Cells(30, "AN"))
                f1.Range(Cells(i + 1, "B"), Cells(i + 1, "AN")).Copy f1.Range(Cells(i, "B"), Cells(i, "AN"))
                f1.Range(Cells(30, "B"), Cells(30, "AN")).Copy f1.Range(Cells(i + 1, "B"), Cells(i + 1, "AN"))
                f1.Range(Cells(30, "B"), Cells(30, "AN")).Clear
                f2.Cells(Lig.Row, "I").ClearContents
                f1.Range(Cells(i, "H"), Cells(i + 1, "H")).ClearContents
            End If
        End If
    End Sub
     
    Sub Formules()
        f1.Range("C5:C10").FormulaR1C1 = "=INDEX(R5C1:R10C40,MATCH(RC2,R5C10:R10C10,0),16)"
        f1.Range("D5:D10").FormulaR1C1 = "=INDEX(R5C1:R10C40,MATCH(RC2,R5C10:R10C10,0),22)"
        f1.Range("E5:E10").FormulaR1C1 = "=INDEX(R5C1:R10C40,MATCH(RC2,R5C10:R10C10,0),28)"
        f1.Range("F5:F10").FormulaR1C1 = "=INDEX(R5C1:R10C40,MATCH(RC2,R5C10:R10C10,0),34)"
        f1.Range("G5:G10").FormulaR1C1 = "=INDEX(R5C1:R10C40,MATCH(RC2,R5C10:R10C10,0),40)"
        f1.Range("C19:C23").FormulaR1C1 = "=INDEX(R19C1:R23C40,MATCH(RC2,R19C10:R23C10,0),16)"
        f1.Range("D19:D23").FormulaR1C1 = "=INDEX(R19C1:R23C40,MATCH(RC2,R19C10:R23C10,0),22)"
        f1.Range("E19:E23").FormulaR1C1 = "=INDEX(R19C1:R23C40,MATCH(RC2,R19C10:R23C10,0),28)"
        f1.Range("F19:F23").FormulaR1C1 = "=INDEX(R19C1:R23C40,MATCH(RC2,R19C10:R23C10,0),34)"
        f1.Range("G19:G23").FormulaR1C1 = "=INDEX(R19C1:R23C40,MATCH(RC2,R19C10:R23C10,0),40)"
    End Sub
    Cdlt

  18. #18
    Membre actif
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 86
    Par défaut
    Bonjour ARTUR083,

    Merci pour tout le travail que vous avez accompli !

    J'ai recopié votre code dans mon fichier (ci-joint)

    J'ai un problème dans la feuille "Classement détaillé matchs qual" où le classement ne se fait pas comme il se doit.

    Si vous pouviez m'expliquer :-)

    Encore merci et bonne après-midi
    Fichiers attachés Fichiers attachés

  19. #19
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 241
    Par défaut
    Bonjour,

    Apparemment, c'est parce que vous récupérez le nom des équipes par formule dans la feuille "Composition Poules", alors que je n'avais pas cette feuille.
    Pour corriger le tir, soit vous inscrivez le nom des équipes en dur dans la feuille "Classement détaillé..." , soit je fige les noms des équipes en début de macro. La première proposition me semble la meilleure.

    Cdlt

  20. #20
    Membre actif
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 86
    Par défaut
    Re,

    Apparemment le problème ne viendrait pas de cela puisque j'ai fait un Copier/Coller uniquement des valeurs des cellules de B5 à B10 et de B19 à B23 et le problème persiste.

    Merci

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 34
    Dernier message: 26/04/2011, 10h44
  2. Table des matières avec doublons
    Par Stéphane Olivier BERNARD dans le forum IHM
    Réponses: 4
    Dernier message: 04/10/2007, 09h40
  3. Récupérer des data avec system()
    Par SPACHFR dans le forum Débuter
    Réponses: 15
    Dernier message: 14/09/2007, 16h28
  4. récupérer des URL avec Regexp
    Par manu00 dans le forum Langage
    Réponses: 3
    Dernier message: 28/07/2007, 18h39
  5. [VB.NET] [ODBC] Récupérer des valeurs avec requête ODBC?
    Par Pleymo dans le forum Windows Forms
    Réponses: 5
    Dernier message: 04/03/2005, 16h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo