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 FunctionMerci 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.