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 :

[Debutant]Demande de conseils pour le développement d'une gestion de planning


Sujet :

Macros et VBA Excel

  1. #1
    Membre actif
    Inscrit en
    Avril 2006
    Messages
    346
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 346
    Points : 252
    Points
    252
    Par défaut [Debutant]Demande de conseils pour le développement d'une gestion de planning
    Bonjour,

    je travaille sur une feuille excel représentant un planning. En colonnes, les semaines de 1 à 52 de l'année et en ligne le nom des intervenants.
    Sur une ligne, si dans une cellule je saisie "D", je dois colorier la case en Vert et si je saisie "L" un peu plus loin sur la même ligne, je dois colorier les cellules situés entre L et D en bleu.
    Je pense développer une macro en VBA.
    Je me demande comment architecturer l'ensemble.
    D'après vous, est-ce qu'à chaque saisie je sauvegarde dans une variable globale les coordonnées de la cellule et la valeur de cette cellule ?
    Je pourrais par exemple utiliser un tableau ou une collection.
    Ainsi en cas de nouvelle saisie, je n'aurais pas besoin de parcourir toutes les colonnes mais uniquement la collection. Il sera plus rapide de connaître les cellules à colorier.

    Ou est-ce que je ne sauvegarde pas les coordonnées des cellules et dans ce cas à chaque nouvelle saisie, je dois parcourir toutes les colonnes pour savoir quelles sont les valeurs déjà saisie ?

    Merci d'avance pour votre aide et vos conseils.

  2. #2
    Membre éprouvé
    Avatar de fred65200
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 901
    Points : 1 207
    Points
    1 207
    Par défaut
    Bonsoir,
    EDIT Suppression PJ, besoin de place

    À mon avis tu n'as pas besoin de macro, une simple MFC (Mise en Forme Conditionnelle) suffit .

    Je te joins un fichier exemple

    @+

  3. #3
    Membre actif
    Inscrit en
    Avril 2006
    Messages
    346
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 346
    Points : 252
    Points
    252
    Par défaut
    Bonjour et merci pour la réponse,

    en fait, je suis désolé mais j'ai oublié de préciser qu'il y a d'autres cas. Je vais tâcher d'être complet cette fois:
    Si l'utilisateur tape D dans une cellule, la cellule doit être colorier en vert:
    s'il tape L, la plage doit être colorier en bleu,
    S en vert, 1 en jaune, 2 en noir et 3 en orange.

    Je ne pense pas que la mise en forme conditionnelle convienne du fait qu'il y ait plusieurs cas.

    Merci d'avance.
    Bye

  4. #4
    Membre éprouvé
    Avatar de fred65200
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 901
    Points : 1 207
    Points
    1 207
    Par défaut
    bonjour

    en effet, avec les MFC on est limité à trois conditions, il faut donc passer par les macros

    Copie le code suivant dans un nouveau classeur et saisie
    D ou L ou S ou 1 ou 2 ou 3 ou autre chose dans la cellule A1.

    Adapte l'évènement à ton classeur.

    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
     
    Private Sub Worksheet_Change(ByVal Target As Range)
     If Target.Address = "$A$1" Then
     'On efface les formats de remplissage
     Range(Cells(Target.Row, 1), Cells(Target.Row, 10)).Interior.ColorIndex = -4142
    'on regarde la valeur de la cellule et on formate
    Select Case Target
            Case "D": Target.Interior.ColorIndex = 14
            Case "L": Range(Cells(Target.Row, 1), Cells(Target.Row, 10)).Interior.ColorIndex = 33
            Case "S": Target.Interior.ColorIndex = 14
            Case 1: Target.Interior.ColorIndex = 6
            Case 2: Target.Interior.ColorIndex = 1
            Case 3: Target.Interior.ColorIndex = 44
            Case Else: Range(Cells(Target.Row, 1), Cells(Target.Row, 10)).Interior.ColorIndex = -4142
        End Select
    End If
    End Sub

    Cordialement

  5. #5
    Membre actif
    Inscrit en
    Avril 2006
    Messages
    346
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 346
    Points : 252
    Points
    252
    Par défaut
    Bonjour,

    et merci pour la réponse.
    J'ai testé et en fait il faut que je ne colorie qu'entre le L et le D.
    J'ai un tableau comportant 52 colonnes (1 colonne par semaine de l'année) de B à BA la premiere colonne est réservé au prénom de l'intervenant.
    et autant de lignes que d'intervenants.
    L'utilisateur doit d'abord saisir L dans une cellule de cette plage, la ligne dépend de l'intervenant et la colonne dépend de la semaine quand il a démarré la tâche.
    S'il saisit une autre lettre alors que rien n'a été saisit sur cette ligne, la saisie n'est pas valide.
    Supposons qu'il saisisse L dans la cellule D3. C'est la cellule de départ.
    Ensuite, s'il saisit D dans la cellule G3, la plage entre D3 et G3 doit être coloriée en bleu. C'est la cellule intermédiaire.
    - S'il saisit 1 dans M3, la plage entre G3 et M3 doit être coloriée en jaune,
    - s'il saisit 2 dans Q3, la plage entre G3 et Q3 doit être coloriée en noir
    - s'il saisit 3 dans T3, la plage entre G3 et T3 doit être coloriée en orange

    et pour finir s'il saisit S dans la cellule X3 la plage entre la cellule de départ D3 et X3 doit être coloriée en vert.

    Du coup je me demande si je dois mémoriser la cellule de départ et la cellule intermédiaire dans une variable globale mais ça implique de le faire pour chaque ligne et du coup ça me semble un peu lourd.

    Merci d'avance.
    Bye

  6. #6
    Membre éprouvé
    Avatar de fred65200
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 901
    Points : 1 207
    Points
    1 207
    Par défaut
    bonjour zoaax,

    as tu essayé de ton coté, tu en est ou?

    fred65200

  7. #7
    Membre actif
    Inscrit en
    Avril 2006
    Messages
    346
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 346
    Points : 252
    Points
    252
    Par défaut
    Bonjour,

    et bien pour le moment j'aimerais surtout savoir si selon vous je dois mémoriser la cellule de départ et la cellule intermédiaire dans une variable globale mais ça implique de le faire pour chaque ligne et du coup ça me semble un peu lourd.

    Ensuite je pense que ça devrait aller.
    Merci en tout cas pour votre aide.
    A+

  8. #8
    Membre actif Avatar de Drost
    Profil pro
    Inscrit en
    Août 2007
    Messages
    192
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2007
    Messages : 192
    Points : 212
    Points
    212
    Par défaut
    Hello,

    Peut etre devrais tu faire une boucle avec comme point de depart et d'arrivee les adresse de tes cellules. Tu ajoute des conditions pour que ce soit la bonne couleur qui soit prise en compte.
    "S'il n'y a pas de solutions à un problème, c'est qu'il n'y a pas de problème!"



    ++]===> Drost

  9. #9
    Membre actif
    Inscrit en
    Avril 2006
    Messages
    346
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 346
    Points : 252
    Points
    252
    Par défaut
    Bonjour,

    et bien c'est l'une des solutions que j'avais retenues mais je me disais qu'il était peut-être dommage de devoir scruter chaque cellule à chaque fois que j'en avais besoin alors qu'avec une variable globale de type Range, c'était plus rapide je pense, il faut voir si ça vaut vraiment le coup.

    Bye.

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

Discussions similaires

  1. [MySQL-5.6] Demande de conseil pour la création d'une table
    Par steel-finger dans le forum MySQL
    Réponses: 1
    Dernier message: 04/08/2014, 11h04
  2. demande de conseille pour un probleme sur une fonction
    Par pierre-y dans le forum Général Python
    Réponses: 4
    Dernier message: 19/12/2012, 11h34
  3. Réponses: 1
    Dernier message: 21/02/2012, 11h58
  4. Demande de conseils pour bien debuter sous J2EE
    Par Clorish dans le forum Java EE
    Réponses: 9
    Dernier message: 21/09/2007, 00h16

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