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 :

Onglets: organiser,colorer à partir d'un tableau variable [XL-2013]


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Homme Profil pro
    Régisseur Technique du Spectacle
    Inscrit en
    Mars 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Régisseur Technique du Spectacle
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mars 2015
    Messages : 4
    Points : 4
    Points
    4
    Par défaut Onglets: organiser,colorer à partir d'un tableau variable
    Bonjour,

    Après des semaines de recherches pour apprendre VBA et faire évoluer un fichier excel je me retrouve bloqué.

    Je voudrais à partir d'un tableau pouvoir trier (organiser) mes onglets, leur affecté une couleur et un contenu spécifique.

    Je m'explique: feuille1(AGENDA 2015) j'ai un tableau avec 4 colonnes: EVENEMENTS/ DU/ AU / LIEU
    Ce tableau est amené à être modifié régulièrement (lieu, nouveaux évènements, nouvelles dates etc...)

    j'ai donc:
    Une macro pour trier les évènements par date (colonne DU)
    Une autre pour affecter une couleur à chaque évènements selon le lieu
    Une autre pour créer l'onglet correspondant à chaque évènements (sans doublons bien sûr)

    Il me reste donc à réussir à affecter à ses onglets le même trie que le tableau. Car quand un évènement nouveau arrive en plein milieu il se crée à la fin.
    Puis à affecter la couleur attribuée à son lieu et enfin et surtout lui affecter un contenu relatif à son lieu (feuille appelée: source PETITE SALLE , GRANDE SALLE etc...

    J'en demande probablement beaucoup mais j'ai essayé à maintes reprises et là je n'y arrive pas.

    Merci par avance pour vos réponses
    Fichiers attachés Fichiers attachés

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Une solution possible avec cette procédure et cette fonction à mettre dans un module standard :

    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    Option Explicit
     
    Sub OrdonnerLesOnglet()
     
    Dim ShAgenda As Worksheet
    Dim ShListe As Worksheet
     
    Dim LigneDeTitre As Long
    Dim LigneEvenement As Long
    Dim DerniereLigne As Long
    Dim DerniereColonne As Long
    Dim ColEvenement As Long
    Dim ColDebutEvenement As Long
    Dim ColEmplacement As Long
     
    Dim AireDeTri As Range
     
     
        Set ShAgenda = Sheets("AGENDA 2015")
     
        With ShAgenda
             LigneDeTitre = 1
             ColEvenement = 1
             ColDebutEvenement = 2
             ColEmplacement = 4
             DerniereLigne = .Cells(.Rows.Count, ColEvenement).End(xlUp).Row
             DerniereColonne = .Cells(LigneDeTitre, .Columns.Count).End(xlToLeft).Column
             Set AireDeTri = .Range(.Cells(LigneDeTitre, 1), .Cells(DerniereLigne, DerniereColonne))
     
             ' Tri du tableau selon la date de début de l'événement
             '-----------------------------------------------------
             .Sort.SortFields.Clear
             .Sort.SortFields.Add Key:=AireDeTri.Columns(ColDebutEvenement), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
             With .Sort
                  .SetRange AireDeTri
                  .Header = xlYes
                  .MatchCase = False
                  .Orientation = xlTopToBottom
                  .SortMethod = xlPinYin
                  .Apply
             End With
     
             ' Déplacement des onglets suivant l'ordre de tri. Mise en couleur de l'onglet suivant l'emplacement
             '--------------------------------------------------------------------------------------------------
             For Each ShListe In Worksheets
                    If ShListe.Name <> ShAgenda.Name Then ShListe.Tab.Color = xlAutomatic
             Next ShListe
     
             For LigneEvenement = DerniereLigne To LigneDeTitre + 1 Step -1
                 For Each ShListe In Worksheets
                     If .Cells(LigneEvenement, ColEvenement) = ShListe.Name Then
                        With ShListe
                             .Move after:=Sheets(1)
                             .Tab.Color = CouleurOnglet(ShAgenda.Cells(LigneEvenement, ColEvenement).Offset(0, ColEmplacement - ColEvenement))
                        End With
                     End If
                 Next ShListe
             Next LigneEvenement
     
             Set AireDeTri = Nothing
     
        End With
     
        ShAgenda.Activate
     
        Set ShAgenda = Nothing
     
    End Sub
     
    Function CouleurOnglet(ByVal Emplacement As String) As Variant
     
        Select Case Emplacement
               Case "GRANDE SALLE"
                    CouleurOnglet = 16769679
               Case "PETITE SALLE"
                    CouleurOnglet = 5505023
               Case "STUDIO DANSE"
                    CouleurOnglet = 12819455
               Case "ESPACES MULTIPLES"
                    CouleurOnglet = 12885167
               Case "AUTRE"
                    CouleurOnglet = 1306000
               Case Else
                    CouleurOnglet = xlNone
        End Select
     
    End Function
    Cordialement.

  3. #3
    Candidat au Club
    Homme Profil pro
    Régisseur Technique du Spectacle
    Inscrit en
    Mars 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Régisseur Technique du Spectacle
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mars 2015
    Messages : 4
    Points : 4
    Points
    4
    Par défaut
    Merci Beaucoup Eric KERGRESSE

    Le peu que je connaisse en VBA me fait dire que ce code est super propre.

    Effectivement il répond à ma demande et fonctionne parfaitement.


    Il me reste encore à nettoyer mes macros précédentes car il y a double emploi sur le tri du tableau AGENDA 2015.

    Je ne vais pas mettre le sujet comme Résolu car il me manque encore une partie de code.
    Code qui me permettrait d'attribuer un contenu type à chaque création de nouvel onglet en fonction du lieu de l'évènement.
    Exemple création d'un nouvel évènement en GRANDE SALLE sur la feuille 1 (AGENDA 2015) : donc création d'un nouvel onglet avec le contenu de la feuille "source GRANDE SALLE".

    PS: J'ai noté le "Option Explicit" dont j'essaierai de m'inspirer à l'avenir (j'ai fait quelques recherches quand à son utilité).

    Dans tous les cas un Grand merci pour ton aide et ton investissement.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Dabasic Voir le message
    Code qui me permettrait d'attribuer un contenu type à chaque création de nouvel onglet en fonction du lieu de l'évènement.
    Exemple création d'un nouvel évènement en GRANDE SALLE sur la feuille 1 (AGENDA 2015) : donc création d'un nouvel onglet avec le contenu de la feuille "source GRANDE SALLE".
    Bonjour,

    "source" dans "source GRANDE SALLE" fait référence au nom de l'événement, n'est ce pas ? Combien de caractères max pour un événement sachant que le nombre de caractères d'un nom d'onglet est limité. Sinon, il faudrait substituer un code abrégé pour faire référence à la salle.


    PS: J'ai noté le "Option Explicit" dont j'essaierai de m'inspirer à l'avenir (j'ai fait quelques recherches quand à son utilité).
    Option Explicit en tête de module oblige à définir ses variables. En contrôlant régulièrement avec le compilateur de projet (menu Débogage), je suis informé automatiquement des variables non définies ou déjà définies, le code est plus sûr. Mon VBA est réglé par défaut sur Option Explicit.


    Cordialement.

  5. #5
    Candidat au Club
    Homme Profil pro
    Régisseur Technique du Spectacle
    Inscrit en
    Mars 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Régisseur Technique du Spectacle
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mars 2015
    Messages : 4
    Points : 4
    Points
    4
    Par défaut
    Non en fait "source GRANDE SALLE" , "source PETITE SALLE", "source ESPACES MULTIPLES" et "source AUTRE" correspondent à des " formulaires à remplir" .
    Quand un nouvel onglet est crée, il a (grâce à toi) une couleur en rapport à son lieu. Je souhaiterai maintenant que ces nouveaux onglets soit une copie "du formulaire" qui correspond à leur lieu.

    Exemple: je crée un nouvel évènement XXXX dont je définit le lieu dans l'AGENDA 2015, par exemple GRANDE SALLE. Quand j'active ma macro qui crée un nouvel onglet, un onglet nommer XXXX est crée, je souhaite que cet onglet possède en plus une copie du contenu de la page appelé "source GRANDE SALLE".

    Cordialement

  6. #6
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Dabasic Voir le message
    Non en fait "source GRANDE SALLE" , "source PETITE SALLE", "source ESPACES MULTIPLES" et "source AUTRE" correspondent à des " formulaires à remplir" .
    Quand un nouvel onglet est crée, il a (grâce à toi) une couleur en rapport à son lieu. Je souhaiterai maintenant que ces nouveaux onglets soit une copie "du formulaire" qui correspond à leur lieu.
    Bonjour,

    Une solution possible dans le fichier joint. J'y ai ajouté une feuille Paramètres qui fait le lien entre la salle, la couleur et le modèle d'onglet. Un lien hypertexte sur la date de début de l'onglet agenda permet d'accéder directement à l'onglet de l'événement, idem pour le retour au menu dans chaque onglet créé, ce doit être certainement plus facile s'il y a plusieurs dizaines d'onglets.

    Des contrôles de cohérence sont aussi réalisés lors de la saisie dans l'onglet Agenda notamment :

    - Si un événement est saisi en double.
    - Si les dates se chevauchent pour une même salle.
    - Si la couleur de la ligne n'est pas en cohérence avec la salle (cas où on changerait la salle après la création de l'onglet).

    Cordialement.

  7. #7
    Candidat au Club
    Homme Profil pro
    Régisseur Technique du Spectacle
    Inscrit en
    Mars 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Régisseur Technique du Spectacle
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mars 2015
    Messages : 4
    Points : 4
    Points
    4
    Par défaut
    Bonjour,

    Merci ça dépasse mes espérances.
    Il me reste plus qu'à regarder les codes de plus près, pour arriver à les décrypter. Et un jour les maitriser

    Les contrôles sont vraiment bien venu.

    Les liens hypertexte sont très efficace .
    J'avais renoncé à la création automatique de ces derniers. J'avais donc créer un menu déroulant pour naviguer dans les onglets mais là s'est beaucoup plus pratique.

    Cordialement

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 29/09/2014, 23h08
  2. Réponses: 0
    Dernier message: 12/02/2014, 15h51
  3. [XL-2010] Création TCD sur onglet variable (a partir d'une plage variable)
    Par WilliamAd dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 05/06/2012, 10h42
  4. Tableau + variable de session
    Par Pymm dans le forum ASP
    Réponses: 6
    Dernier message: 13/10/2005, 14h12
  5. courbe à partir d'un tableau
    Par chafcha dans le forum MFC
    Réponses: 3
    Dernier message: 26/02/2004, 08h53

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