Aide à la création d'une macro en VBA

Bonjour à tous.

j'ai besoin d'une aide pour créer une macro à l'aide de Visual basic.

Je travaille avec la version Excel 16.77 pour Mac.

Je précise tout de suite que ne n'y connais rien en programmation Visual basic.

Je vous joins le fichier test sur lequel je fais des essais.

C'est pour faire des statistiques sur les résultats du loto sportif.

Il y a donc à chaque loto sportif 14 matchs (colonnes 1 à 14) résultats possibles : 1 ou N ou 2 ou G ou A

Je voudrais tester si dans les 5 derniers événements il y aurait des colonnes avec 5 séries identiques.

Compliqué pour moi, j'ai donc fait appel à chat GPT qui m'a dit ceci:

Pour vérifier si des colonnes comportent 5 séries identiques dans un tableau Excel de 10 colonnes où chaque cellule ne peut contenir que les valeurs "1", "n" ou "2", vous pouvez utiliser la fonctionnalité des formules personnalisées (macros) en VBA (Visual Basic for Applications). Voici un exemple simple de code VBA pour accomplir cela :

```vba

Function VerifierSériesIdentiques(colonne As Range) As Boolean

Dim i As Integer

Dim sérieActuelle As String

Dim sériesIdentiques As Integer

Dim sérieRequise As String

sérieRequise = colonne.Cells(1, 1).Value

sériesIdentiques = 1

For i = 2 To colonne.Rows.Count

sérieActuelle = colonne.Cells(i, 1).Value

If sérieActuelle = sérieRequise Then

sériesIdentiques = sériesIdentiques + 1

If sériesIdentiques = 5 Then

VerifierSériesIdentiques = True

Exit Function

End If

Else

sérieRequise = sérieActuelle

sériesIdentiques = 1

End If

Next i

VerifierSériesIdentiques = False

End Function

```

Vous pouvez ensuite utiliser cette fonction personnalisée dans une cellule Excel pour vérifier chaque colonne. Par exemple, si vous souhaitez vérifier si les 5 premières colonnes (A à E) comportent 5 séries identiques, vous pouvez entrer la formule suivante dans une cellule :

`=VerifierSériesIdentiques(A1:A10)`

Si la formule retourne TRUE, cela signifie que la colonne comporte 5 séries identiques, sinon, elle retournera FALSE.

Assurez-vous d'avoir activé les macros dans Excel pour que cette fonction personnalisée puisse fonctionner.

J'ai essayé de copier ca dans l'éditeur Visual basic et j'ai testé en modifiant la formule pour tester seulement sur les 3 derniers évènements car 5 événements de suite c'est très très rare.

Mais ca donne des résultats erronés car déjà la première ligne testée (ligne 5) est fausse car on a la même série de 3 résultats ( lignes 2 à 4 ) en colonne B et F, C et E, H, L et N)

Quelqu'un pourrait-il me venir en secours ?

Merci beaucoup

Christian

Bonjour,

Pas certain de comprendre : les "5 derniers événements", ce sont les valeurs des colonnes J à K ?
Si oui, il suffit de vérifier, pour chaque ligne, si ces 5 valeurs sont identiques ?

Si pas, nous ne sommes pas tous des spécialistes des paris sportifs, donc prends le temps d'expliquer en détail, donne des exemples des résultats attendus, sur base du fichier que tu as déposé

bonjour,

edit :bonjour U.Milité

une adaptation de la fonction personnalisée. Compte le nombre de colonnes contenant une même valeur, sur la plage donnée.

Function verifierseriesidentiques(plage As Range)
    ctridentique = 0
    For Each col In plage.Columns
        reference = col.Cells(1).Value
        ok = True
        For i = 2 To col.Rows.Count
            If col.Cells(i).Value <> reference Then ok = False: Exit For
        Next i
        If ok Then ctridentique = ctridentique + 1
    Next
    verifierseriesidentiques = ctridentique
End Function

Merci pour vos réponses,

effectivement je n'ai peu être pas été assez explicite.

Chaque loto sportif comporte 14 matchs dont les résultats sont représentés dans les 14 colonnes;

Chaque événement de loto sportif est donc représenté sur une seule ligne colonnes 1 à 14.

Chaque match peut comporter uniquement 5 valeurs qui sont 1 pour match gagné à domicile, N pour match nul, 2 pour match gagné à l'extérieur, G ou A pour match annulé ou gagnant d'office.

Je veux donc pouvoir faire des statistiques pout tester des séries identiques de 5 événements ( ou 3 ou 4, j'adapterais une fois le code assimilé...) dans les 14 colonnes Par exemple si la plage de cellules A1 à A5 contiennent les même valeurs que la plage B1 à B6, la macro placée dans les colonnes de la ligne 6 détectera qu'il y a 2 eu ou moins une série de 5 événements identiques dans plages A1:A5, B1:B5, C1:C5...N1:N5. Le must serait qu'on puisse aussi déceler le nombre de séries identiques ( par exemple s'il y a la même série également en plage C1 à C6 ca m'indiquerais qu'il y a 3 séries identiques lors des 5 derniers événements de loto sportif, en colonne A, B et C, et non pas un simple test vrai ou faux.

Je ne sais pas si j'ai été très clair.

Merci pour votre précieuse aide.

re-bonjour,

fonction adaptée pour indiquer les colonnes dans lesquelles on trouve des séries identiques

Function verifierseriesidentiques(plage As Range)
   Series = ""
    For Each col In plage.Columns
        reference = col.Cells(1).Value
        ok = True
        For i = 2 To col.Rows.Count
            If col.Cells(i).Value <> reference Then ok = False: Exit For
        Next i
        If ok Then Series = Series & Split(col.Address, "$")(1) & ","
    Next
    If Series = "" Then Series = "pas de série identique "
    verifierseriesidentiques = Left(Series, Len(Series) - 1)
End Function

il me semble que le problème est plus complexe à appréhender.

Merci pour le code mais malheureusement ce n'est pas ce que je désire, mais malgré tout ce code va tout de même me servir;

Ce code détecte une série de cellules identiques dans une même colonne, mais ce que je recherche c'est à comparer les 14 colonnes entres elles pour voir s'il y a dans ces 14 colonnes des suites identiques. voir les colonnes en jaunes dans le fichiers ou il y a les memes suites dans les colonnes A, D et H.

Désolé pour mes explications. Ce n'est pas évident à comprendre en effet.

Merci pour votre aide

bonsoir,

fonction personnalisée adaptée

Function verifierseriesidentiques(plage As Range)
    Series = ""
    For i = 1 To plage.Columns.Count - 1
        col1 = Split(plage.Cells(1, i).Address, "$")(1)
        If InStr(Series, col1) = 0 Then
            For j = i + 1 To plage.Columns.Count
                col2 = Split(plage.Cells(1, j).Address, "$")(1)
                ok = True
                For k = 1 To plage.Rows.Count
                    If plage.Cells(k, i) <> plage.Cells(k, j) Then ok = False: Exit For
                Next k
                If ok Then Series = Series & "(" & col1 & "," & col2 & ") "
            Next j
        End If
    Next i
    verifierseriesidentiques = Series
End Function

Merci beaucoup pour ton aide, c'est top niveau !

ca fonctionne et avec en plus les références de colonnes.

Bon c'est pas ce qui va me faire forcément gagner mais ca va beaucoup m'aider dans mes statistiques.

Rechercher des sujets similaires à "aide creation macro vba"