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 :

Aide en Algorithmique


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Janvier 2003
    Messages
    339
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur COBOL
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2003
    Messages : 339
    Par défaut Aide en Algorithmique
    Bonjour, je cherche un moyen de créer une macro qui permette, à partir d'une date de déterminer un numéro d'équipe. Voici comment cela fonctionne

    Il y a 4 équipes qui tournent
    Une équipe prend son travail le vendredi de chaque semaine

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Exemple : 
     
    le 4/1/08, l'équipe 3 prend le service,
    l'équipe 4 le 11, 
    la 1 le 18, 
    la 2 le 25 
    et enfin la 3 le 1 février ainsi de suite ...
    Je cherche donc un moyen de coder un algorithme me permettant de réaliser ce choix pour une date donnée (obligatoirement un vendredi )

    Seulement je vois pas comment démarrer !!

    Avez vous une idée ?

    Merci

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2007
    Messages
    491
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 491
    Par défaut
    bonsoir,

    un exemple sur 2 colonnes
    1ere colonne : date
    2 eme : equipe

    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
     
    Sub ajout_date()
    Dim i As Integer
    Dim j As Date
    Dim equipe As Integer
    Dim fl As Worksheet
    Set fl = Worksheets(1)
    j = " 03/01/08"
    equipe = 3
    With fl
        For i = 1 To 365
                If i Mod 7 = 0 Then equipe = equipe + 1
                    If equipe > 4 Then equipe = 1
            j = DateAdd("d", 1, j)
            fl.Cells(i, 1).Value = j
            fl.Cells(i, 2).Value = equipe        
        Next i
    End With
    End Sub

  3. #3
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Bonsoir,

    Après plusieurs tergiversations, j'ai fini par effacer mon message (et mon code) précédent.

    Pourquoi ?

    Parce que ta question manque de précision.

    1) tu travailles en effet peut-être sur des cellules (comme le montre pathou) et non sur une variable.
    2) ceci :
    Bonjour, je cherche un moyen de créer une macro qui permette, à partir d'une date de déterminer un numéro d'équipe. Voici comment cela fonctionne
    ne veut pas dire grand-chose ...
    A partir d'une date, d'accord, mais à utiliser comment ensuite ?
    a) le vendredi le plus proche de cette date (tant avant qu'après ?) ?
    b) le 1er vendredi postérieur à cette date ?

    Je crois que ces précisions sont indispensables ....

  4. #4
    Membre éclairé
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Janvier 2003
    Messages
    339
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur COBOL
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2003
    Messages : 339
    Par défaut
    Désolé pour le manque de précision. Effectivement, pour moi c'est clair mais pas forcement pour tout le monde.

    La date saisi doit être un vendredi obligatoirement. Donc j'ai réussi à trouver une facon de calculer cette equipe à l'aide d'un pivot.

    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
    Function CalculEquipe(dates As Date)
    Dim equipe As Integer
    Dim dateref As Date
        dateref = "04/01/2008"
        equipe = 3
    calc:
        If Format(dates, "dddd") <> "vendredi" Then
            GoTo fin
        End If
     
        If dates < dateref Then
            dateref = dateref - 7
            equipe = equipe - 1
            If equipe = -1 Then
                equipe = 4
            End If
            GoTo calc
        ElseIf dates = dateref Then
            CalculEquipe = equipe
            GoTo fin
        Else
            dateref = dateref + 7
            equipe = equipe + 1
            If equipe = 5 Then
                equipe = 1
            End If
            GoTo calc
        End If
    fin:
    End Function
    Le pivot ici est au 4 janvier pour l'équipe 3. je regarde la date de la cellule avec la date du pivot (la date de la cellule est celle de la fonction en entrée) si ce sont les mêmes, je garde l'équipe. Sinon, je modifie de sept jours la date du pivot et l'équipe pour retomber sur le vendredi d'avant ou d'apres afin d'arriver au bon jour.

  5. #5
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Bien.

    Mais alors évite ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Format(dates, "dddd") <> "vendredi" Then
    Car si tu dois distribuer ton appli et que l'itilisateur final est sur une machine en anglais ====>>> plantage !

    Donne la préférence à l'utilisation de la fonction Weekday (le vendredi ayant la valeur 6 pour une semaine commençant le dimanche).

    voilà comment, par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub Command1_Click()
     ladate = "04/01/2008"
     MsgBox WeekDay(ladate, vbSunday)
    End Sub

  6. #6
    Membre éclairé
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Janvier 2003
    Messages
    339
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur COBOL
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2003
    Messages : 339
    Par défaut
    C'est juste ce que je cherchais, merci

  7. #7
    Rédacteur
    Avatar de DarkVader
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    2 131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 131
    Par défaut
    Cela s'écrit en 2 lignes

    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
        Dim c, d, i As Date
        Dim e As Integer
     
        'la date => d
        d = Now() 'par exemple aujourd'hui
     
        ' initialisation de la prise de service de la 1ere équipe
        i = CDate("5/1/2007")
     
     
     
        ' date du prochain changement = prochain vendredi
        c = d + 6 - Weekday(d)
     
        ' equipe prenant le service
        e = (CInt(Format(d + 6 - Weekday(d), "ww")) - CInt(Format(i, "ww")) + 1) Mod 4
        e = IIf(e = 0, 4, e)
     
        MsgBox "l'équipe " + CStr(e) + " prendra le service le " + Format(c, "dd/mm/yyyy")

  8. #8
    Membre éclairé
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Janvier 2003
    Messages
    339
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur COBOL
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2003
    Messages : 339
    Par défaut
    Merci pour vos réponse, ca roule

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Aide et vérification pour fonction Algorithmique
    Par Infinity_hell dans le forum Algorithmes et structures de données
    Réponses: 16
    Dernier message: 14/12/2008, 01h33
  2. Aide exercice de math/Algorithmique
    Par laurent2628 dans le forum Mathématiques
    Réponses: 11
    Dernier message: 10/06/2008, 13h24
  3. compression de données du point de vue algorithmique
    Par GoldenEye dans le forum Algorithmes et structures de données
    Réponses: 9
    Dernier message: 26/06/2002, 15h51
  4. Besoin d'aide pour l'I.A. d'un puissance 4
    Par Anonymous dans le forum C
    Réponses: 2
    Dernier message: 25/04/2002, 17h05
  5. Une petite aide pour les API ?
    Par Yop dans le forum Windows
    Réponses: 2
    Dernier message: 04/04/2002, 21h45

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