[RESOLU]exclure des feuilles de la proriété sheets.count

jopont

XLDnaute Impliqué
Bonjour,

Je cherche dans un test VBA à exclure 4 feuilles de la proriété sheets.count : j'ai

Code:
For t = 1 To Sheets.Count
mais je ne veux pas des feuilles 27, 28, 29, 30 dans le test

Comment faire ?
merci
 
Dernière édition:
C

Compte Supprimé 979

Guest
Re : exclure des feuilles de la proriété sheets.count

Bonjour Jopont,

Ce qui me fait plaisir, c'est que tu as fait l'effort de chercher
En VBA il existe le mode débogage qui te permets de suivre pas à pas ce que contiennent tes variables
et donc de savoir ce qui va ou ne va pas

Pour cela, il faut te positionner sur une ligne (hors déclaration de variables) et appuyer sur F9
Equivalent du menu -> Débogage -> Basculer un point d'arrêt

Ensuite tu lance ton code (ici via l'USF) et au point d'arrêt ton code va se mettre en pause et afficher la fenêtre
Pour continuer, il suffit d'appuyer sur F8, tu passe comme ça en revue toutes tes lignes

Il suffit de mettre ton curseur sur une variable pour connaitre sa valeur ;)

Ceci dis, voici le code qui devrait convenir
VB:
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

A+
 

jopont

XLDnaute Impliqué
Re : exclure des feuilles de la proriété sheets.count

Re,

Dans la dernière macro que tu m'as fourni, si j'ajoute dans le premier elseif
Code:
If NbG = 2 then NbRF = NbRF + 1
cela me perttrait-il de contrôler que j'ai bien GG avant les 2 RF.

Merci
 

jopont

XLDnaute Impliqué
Re : exclure des feuilles de la proriété sheets.count

Re,

J'ai ajouté une autre pour compter les GGVVRFRF, ça fonctionne.
derniè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), est-il possible de checker tous les mois par défaut ?

merci
 

jopont

XLDnaute Impliqué
Re : exclure des feuilles de la proriété sheets.count

Re Bruno,

J'ai ajouté le contrôle sur les variable Nb.
Par exemple pour la série GGRFRFVV :
Si NbG = 2 alors NbRF = NbRF + 1
Puis Si Nbg = 2 et NbRF = 2 alors NbVide = NbVide + 1

Code:
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 ?

Je ne sais pas si le code mis à jour à corrigé le bug, mais ça semble correct maintenant.
merci
 
C

Compte Supprimé 979

Guest
Re : exclure des feuilles de la proriété sheets.count

J'ai ajouté une autre pour compter les GGVVRFRF, ça fonctionne.
Génial, je pense que tu peux être fier de toi ;)

derniè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)
Il n'y a pas de bouton pour cela, tu edites simplement ton pemier message
et tu changes le titre avec [RESOLU] devant

est-il possible de checker tous les mois par défaut ?
Oui, il faut ajouter la ligne
Code:
.ListItems.Item(Ind + 1).Checked = True

Voici le code en entier
Code:
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

A+
 
Dernière modification par un modérateur:
C

Compte Supprimé 979

Guest
Re : [RESOLU]exclure des feuilles de la proriété sheets.count

Re,

Juste qu'au bout tu vas nous user ;)
Dans ta sub de validation
Code:
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

A+
 

jopont

XLDnaute Impliqué
Re : [RESOLU]exclure des feuilles de la proriété sheets.count

Re Bonsoir
Oups , j'ai lu la fonction, mais la j'oblige la sélection.
Si l'utilisateur veut connaître le résultat pour toutes le feuilles, c'est à dire pour 12 mois
Promis après j'arrête :)
 
C

Compte Supprimé 979

Guest
Re : [RESOLU]exclure des feuilles de la proriété sheets.count

Re,

Les feuilles sont exclues lorsqu'elle sont cochées

Le code que je t'ai donné plus haut
Code:
.ListItems.Item(Ind + 1).Checked = True
n'est donc pas à utiliser, sinon toutes les feuilles sont exclus

A+
 

Discussions similaires