Function Periode2G2RF2V(TabSht() As String, Optional Lig As Long = 2)
Dim Ind As Integer, Rng As Range
Dim Cpte As Integer, NbG As Integer, NbRF As Integer, NbVide As Integer
' Initialisation des variables
Cpte = 0: NbG = 0: NbRF = 0: NbVide = 0
' Application.Volatile ' En cas de besoin
' Pour chaque Item du tableau
For Ind = 0 To UBound(TabSht)
' Avec la feuille du nom du tableau
With Sheets(TabSht(Ind))
' Définir la cellule de départ
Set Rng = .Range("C" & Lig)
' Si la colonne de la ligne 1 est une date
Do While IsDate(.Cells(1, Rng.Column))
If Rng.Value = "G" Then ' Si la cellule contient "G"
NbG = NbG + 1
ElseIf Rng.Value = "RF" Then ' Si la cellule contient "RF"
NbRF = NbRF + 1
ElseIf Rng.Value = "" Then ' Si la cellule est vide
' Si les 2 variables précédentes contienne 2
If NbG = 2 And NbRF = 2 Then NbVide = NbVide + 1
ElseIf Rng.Value <> "" Then
' Si la cellule contient autre chose que "G", "RF" ou VIDE
' Et qu'une des variable est différente de 0
' On réinitialise toutes les valeurs car on sort de la série
If NbG <> 2 Or NbRF <> 2 Or NbVide <> 2 Then NbG = 0: NbRF = 0: NbVide = 0
End If
'Si les 2 conditions sont remplies
If NbG = 2 And NbRF = 2 And NbVide = 2 Then
' On ajoute 1 au compte
Cpte = Cpte + 1
NbG = 0: NbRF = 0: NbVide = 0
End If
Set Rng = Rng(1, 2)
Loop
End With
Next Ind
Periode2G2RF2V = Cpte
End Function
If NbG = 2 then NbRF = NbRF + 1
Je ne sais pas je n'ai que 3 feuilles dnas mon fichier actuelEst-il normal que si je sélectionne toutes les feuilles hormis janvier, le résultat pour Paul est de 5 ?
Oui, tout a fait tu peux ajouter le testDans la dernière macro que tu m'as fourni, si j'ajoute dans le premier elseifcela me perttrait-il de contrôler que j'ai bien GG avant les 2 RF.Code:If NbG = 2 then NbRF = NbRF + 1
Tant mieux, qu'elle correction as-tu faite ce serait sympas de partagerça y est c'est corrigé ça fonctionne.
Affirmatif mon colonelPar contre, on est d'accord que la dernière fonction que tu as écrite ne détecte que les séries GGRFRFVV ?
Function Periode2G2RF2V(TabSht() As String, Optional Lig As Long = 2)
Dim Ind As Integer, Rng As Range
Dim Cpte As Integer, NbG As Integer, NbRF As Integer, NbVide As Integer
' Initialisation des variables
Cpte = 0: NbG = 0: NbRF = 0: NbVide = 0
' Application.Volatile ' En cas de besoin
' Pour chaque Item du tableau
For Ind = 0 To UBound(TabSht)
' Avec la feuille du nom du tableau
With Sheets(TabSht(Ind))
' Définir la cellule de départ
Set Rng = .Range("C" & Lig)
' Si la colonne de la ligne 1 est une date
Do While IsDate(.Cells(1, Rng.Column))
If Rng.Value = "G" Then ' Si la cellule contient "G"
NbG = NbG + 1
ElseIf Rng.Value = "RF" Then ' Si la cellule contient "RF"
If NbG = 2 Then NbRF = NbRF + 1
ElseIf Rng.Value = "" Then ' Si la cellule est vide
' Si les 2 variables précédentes contienne 2
If NbG = 2 And NbRF = 2 Then NbVide = NbVide + 1
ElseIf Rng.Value <> "" Then
' Si la cellule contient autre chose que "G", "RF" ou VIDE
' Et qu'une des variable est différente de 0
' On réinitialise toutes les valeurs car on sort de la série
If NbG <> 2 Or NbRF <> 2 Or NbVide <> 2 Then NbG = 0: NbRF = 0: NbVide = 0
End If
'Si les 2 conditions sont remplies
If NbG = 2 And NbRF = 2 And NbVide = 2 Then
' On ajoute 1 au compte
Cpte = Cpte + 1
NbG = 0: NbRF = 0: NbVide = 0
End If
Set Rng = Rng(1, 2)
Loop
End With
Next Ind
Periode2G2RF2V = Cpte
End Function
Est-il normal que si je sélectionne toutes les feuilles hormis janvier, le résultat pour Paul est de 5 ?
Génial, je pense que tu peux être fier de toiJ'ai ajouté une autre pour compter les GGVVRFRF, ça fonctionne.
Il n'y a pas de bouton pour cela, tu edites simplement ton pemier messagedernières questions et ma macro sera complète et résolue ( d'ailleurs je ne sais pas ou on met résolu pour les fil)
Oui, il faut ajouter la ligneest-il possible de checker tous les mois par défaut ?
.ListItems.Item(Ind + 1).Checked = True
Private Sub UserForm_Initialize()
Dim Ind As Integer, TabMois() As String
' Créer le tableau des mois à partir des valeurs séparées par une virgule
TabMois = Split("Janvier,Février,Mars,Avril,Mai,Juin,Juillet,Août,Septembre,Octobre,Novembre,Décembre", ",")
With Me.ListView1
With .ColumnHeaders
.Clear
.Add , , "Mois", 80
End With
.View = lvwReport
.CheckBoxes = True
For Ind = 0 To UBound(TabMois)
.ListItems.Add Ind + 1, , TabMois(Ind)
.ListItems.Item(Ind + 1).Checked = True
Next Ind
End With
End Sub
Private Sub CBtnValider_Click()
Dim Ind As Integer, LigLv As Integer, LigSel As Long
Dim TabSht() As String ' Définir le tableau des feuilles
Dim Result
' Initialiser les variables
Ind = -1
If Me.ComboBox1.Value <> "" Then
LigSel = Me.ComboBox1.ListIndex
Else
MsgBox "Merci de sélectionner une personne", vbCritical, "ATTENTION !"
Exit Sub
End If
' Pour chaque ligne de la ListView
For LigLv = 1 To Me.ListView1.ListItems.Count
' Si la ligne est checkée on exclu la feuille du tableau
If Me.ListView1.ListItems(LigLv).Checked = False Then
' Sinon on ajoute la feuille au tableau
' en le redimensionnant et conservant les valeurs
Ind = Ind + 1
ReDim Preserve TabSht(Ind)
TabSht(Ind) = Me.ListView1.ListItems(LigLv)
End If
Next LigLv
' Si aucune feuille n'est selectionnée => Ind =11
If Ind = 11 Then
MsgBox "Merci de cocher au moins une feuille", vbCritical, "ATTENTION"
Exit Sub
End If
... suite
.ListItems.Item(Ind + 1).Checked = True