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 :

Trouver la position d'un samedi dans une sélection


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Septembre 2005
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2005
    Messages : 75
    Par défaut Trouver la position d'un samedi dans une sélection
    Bonjour,

    Je réalise avec Excel 2010 la gestion d'un planning des congés, j'ai mis au point une procédure "automatisé" pour le décompte des jours celle-ci fonctionne très bien j'ai juste un soucis que je n'arrive pas à résoudre (ou je n'ai pas bien réfléchi peut-être) c'est pourquoi je solicite votre aide.
    Voici se qui me pose problème :
    Dans ce planning il est important pour assurer un bon décompte de jours, de prendre en charge les jours fériés et notamment les samedis fériés. Je boucle sur la période sélectionnée, dans ma boucle je repers les jours de la semaine les dimanche les samedis et les jour fériés (samedi ou autres) ce que je cherche à trouver c'est sur les samedis, s'il y a un samedi fériés quel est sa position dans ma sélection, est-ce le premier samedi ou le second ou autre...
    Je cherche celà car dans notre société le premier samedi n'est pas décompté mais les autres le sont sauf s'ils sont fériés.

    Existe t-il un moyen en VBA pour trouver celà ? je ne cherche pas forcément le code fini mais au moins un début de raisonnement après je finirai bien par trouver, enfin j'espère.

    Je vous remercie d'avance pour votre aide.

  2. #2
    pgz
    pgz est déconnecté
    Expert confirmé Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Par défaut
    Bonjour.

    Citation Envoyé par xdoreau Voir le message
    Je boucle sur la période sélectionnée, dans ma boucle je repers les jours de la semaine les dimanche les samedis et les jour fériés (samedi ou autres) ce que je cherche à trouver c'est sur les samedis, s'il y a un samedi fériés quel est sa position dans ma sélection, est-ce le premier samedi ou le second ou autre...
    Si tu repères les samedis et les jours fériés et que tu sais où tu en es dans ta boucle, je ne comprends pas bien ton pb.

    Peut-être en voyant cette partie du code déjà écrit...

    Cordialement,

    PGZ

  3. #3
    Membre confirmé
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Septembre 2005
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2005
    Messages : 75
    Par défaut
    Bonsoir,

    Voici la boucle en question
    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
     
                       If typeCongés = "CP" Then
                        For i = 0 To Compteur
                            ' compte le nombre de samedi non fériés
                            If Weekday(Plan.Cells(2, LaColonne), vbMonday) = 6 And Not Ctrlferies(Plan.Cells(2, LaColonne).Value) = 2 Then
                                comptes = comptes + 1
                            End If
                            'compte le nombre de samedi fériés
                            If Weekday(Plan.Cells(2, LaColonne), vbMonday) = 6 And Ctrlferies(Plan.Cells(2, LaColonne)) = 2 Then
                                comptesf = comptesf + 1
                            End If
                            'compte le nombre jour fériés dans la semaine hors samedi et dimanche
                            If Weekday(Plan.Cells(2, LaColonne), vbMonday) < 6 And Ctrlferies(Plan.Cells(2, LaColonne)) = 2 Then
                                comptejf = comptejf + 1
                            End If
                            ' compte le nombre de jour de la semaine non fériés
                            If Weekday(Plan.Cells(2, LaColonne), vbMonday) <= 5 And Ctrlferies(Plan.Cells(2, LaColonne)) <> 2 Then
                                comptejn = comptejn + 1
                            End If
                            ' compte le nombre de dimanche
                            If Weekday(Plan.Cells(2, LaColonne), vbMonday) = 7 Then
                                compted = compted + 1
                            End If
                            'avance d'une colonne
                            LaColonne = LaColonne + 1
                        Next i

  4. #4
    pgz
    pgz est déconnecté
    Expert confirmé Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Par défaut
    Bonsoir.

    Quand tu trouves un samedi férié, tu veux savoir si c'est le premier de la période. Si c'est bien cela, il suffit de regarder la valeur des variables comptes et comptesf, car si ce n'est pas le premier samedi alors comptes+comptesf > 0.

    Remarque : le compteur de boucle est i mais tu ne l'utilises pas, tu en construis un deuxième LaColonne. C'est curieux, mais c'est tout.

    Cordialement,

    PGZ

  5. #5
    Membre Expert

    Homme Profil pro
    Spécialiste progiciel
    Inscrit en
    Février 2010
    Messages
    1 747
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Spécialiste progiciel
    Secteur : Service public

    Informations forums :
    Inscription : Février 2010
    Messages : 1 747
    Par défaut
    Bonjour,

    Ton code n'est pas réellement homogène non plus ce qui le rend plus difficile à lire. Notamment au niveau du contrôle des jours fériés et des jours de la semaine

    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
    'compte le nombre de samedi non fériés
    If Weekday(Plan.Cells(2, LaColonne), vbMonday) = 6 And Not Ctrlferies(Plan.Cells(2, LaColonne).Value) = 2 Then
             comptes = comptes + 1
    End If
    
    'compte le nombre de samedi fériés
    If Weekday(Plan.Cells(2, LaColonne), vbMonday) = 6 And Ctrlferies(Plan.Cells(2, LaColonne)) = 2 Then
             comptesf = comptesf + 1
    End If
    
    'compte le nombre jour fériés dans la semaine hors samedi et dimanche
    If Weekday(Plan.Cells(2, LaColonne), vbMonday) < 6 And Ctrlferies(Plan.Cells(2, LaColonne)) = 2 Then
             comptejf = comptejf + 1
    End If
    
    'compte le nombre de jour de la semaine non fériés
    If Weekday(Plan.Cells(2, LaColonne), vbMonday) <= 5 And Ctrlferies(Plan.Cells(2, LaColonne)) <> 2 Then
             comptejn = comptejn + 1
    End If
    Comment est initialisé la valeur de la variable LaColonne?

  6. #6
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Bonsoir
    à défaut de code explicite, une restructuration des tests s'avère nécessaire pour la visibilité:
    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
    Dim TypeConges As String
    Dim i As Integer, Compteur As Integer, LaColonne As Integer, Rj As Integer
    Dim CompteS As Integer, CompteSF As Integer, CompteJF As Integer, CompteJN As Integer, CompteD As Integer
     
    With Sheets("Plan")
        If TypeConges = "CP" Then
            For i = 0 To Compteur
                Rj = Weekday(.Cells(2, LaColonne), vbMonday)             'N° du jour dans la semaine
                If Rj = 7 Then                                           'Si dimanche
                    CompteD = CompteD + 1                                'Compte le nombre de dimanche
                Else                                                     'Si non dimanche
                    If Ctrlferies(.Cells(2, LaColonne).Value) = 2 Then   'Si férié
                        If Rj = 6 Then                                   'Si samedi
                            CompteSF = CompteSF + 1                      'Compte le nombre de samedi fériés
                        Else                                             'Si avant samedi
                            CompteJF = CompteJF + 1                      'Compte le nombre jour fériés dans la semaine hors samedi et dimanche
                        End If
                    Else                                                 'Si non férié
                        If Rj = 6 Then                                   'Si samedi
                            CompteS = CompteS + 1                        'Compte le nombre de samedi non fériés
                        Else                                             'Si avant samedi
                            CompteJN = CompteJN + 1                      'Compte le nombre de jour de la semaine non fériés
                        End If
                    End If
                End If
                LaColonne = LaColonne + 1                                'Avance d'une colonne
            Next i
        End If
    End With
    'Ici on ne prends pas en compte le premier samedi férié
    If CompteSF >= 1 Then
        CompteSF = CompteSF - 1
        CompteS = CompteS + 1
    End If

Discussions similaires

  1. Réponses: 3
    Dernier message: 08/04/2014, 15h40
  2. Trouver la position d'un rectangle dans une photo ?
    Par [ZiP] dans le forum Débuter
    Réponses: 2
    Dernier message: 15/03/2011, 19h57
  3. Réponses: 2
    Dernier message: 12/10/2010, 09h35
  4. Trouver la position d'un objet dans une List
    Par Mister Nono dans le forum Langage
    Réponses: 3
    Dernier message: 03/06/2008, 14h53
  5. Réponses: 8
    Dernier message: 08/06/2004, 01h29

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