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 :

Macro permettant d'afficher les différents projets d'un agent par semaine partant d'un planning [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Etudiant M2 Gestion de Projet
    Inscrit en
    Décembre 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Etudiant M2 Gestion de Projet

    Informations forums :
    Inscription : Décembre 2014
    Messages : 4
    Par défaut Macro permettant d'afficher les différents projets d'un agent par semaine partant d'un planning
    Bonjour,

    J'ai un gros souci avec mon fichier! Merci par avance.

    Voici le code, il m'affiche tel qu'il est erreur d'exécution 13.

    J'ai en outre une autre question, dans mon classeur Planning {Listes,Planning_PR,Planning_Ag}, j'ai un fichier liste avec des RANGE bien définis et la feuille Planning est elle-même un tableau qui s'incrémente au fur et à mesure des saisies. Est-ce qu'il ne serait pas possible d'utiliser ces paramètres prédéfinis dans mon code VBA? Ou comment faire les déclarations pour qu'à chaque fois que j'incrémente ma table Planning cela soit pris en compte dans le code.

    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
    Option Explicit
    Option Base 1
     
     
     
    Sub PlanningAgent()
     
    Dim NomAgents() As Variant 
    Dim Planning() As Variant
    Dim TestPlanning() As Variant
    Dim AgentsPlanning() As Variant
    Dim InitialesProjets() As Variant
    Dim H As Byte
    Dim I As Byte
    Dim J As Byte
     
    'Récupération de données
     
    NomAgents = Sheets("Listes").Range("Q3:Q18")
     
    Planning = Sheets("Planning_PR").Range("S8:HR29")
    AgentsPlanning = Sheets("Planning_PR").Range("R8:R29")
    InitialesProjets = Sheets("Planning_PR").Range("B8:B29")
     
    ReDim TestPlanning(UBound(NomAgents, 1), UBound(Planning, 2))
     
     
    'Rechercher les projets de chaque Agent par demi-semaine de planning
     
    For H = 1 To UBound(Planning, 2)
    For I = 1 To UBound(NomAgents, 1)
    For J = 1 To UBound(Planning, 1)
     
    If ((Planning(J, H) <> 0) And (AgentsPlanning(J, H) = NomAgents(I))) Then
    TestPlanning(I, H) = InitialesProjets(J, 1) & TestPlanning(I, H)
    End If
     
    Next J
    Next I
    Next H
     
     
    'Afficher les valeurs trouvées dans le fichier prévu
     
    Sheets("Planning_Ag").Select
    Sheets("Planning_Ag").Range("C8:HB22") = TestPlanning
     
    'Effacer les données du tableau
     
    Erase TestPlanning
     
    End Sub

  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
    Bonsoir.

    Quelle ligne lève l'erreur?
    Sans savoir, tu peux essayer de déclarer H, I et J en entier, ou long, plutôt qu'en Byte.

    Ensuite, dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If ((Planning(J, H) <> 0) And (AgentsPlanning(J, H) = NomAgents(I))) Then
    tu utilises le tableau NomAgents comme s'il n'avait qu'1 dim, mais il en a 2.

    Pour ta question sur le planning, il y a plusieurs solutions.


    Cordialement,

    PGZ

  3. #3
    Membre à l'essai
    Homme Profil pro
    Etudiant M2 Gestion de Projet
    Inscrit en
    Décembre 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Etudiant M2 Gestion de Projet

    Informations forums :
    Inscription : Décembre 2014
    Messages : 4
    Par défaut
    Merci Pierre,

    J'ai fait la première correction pour les dimensions de NomAgents mais le problème persiste, c'est au niveau de la ligne 19.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    NomAgents = Sheets("Listes").Range("Q3:Q18")
    Je me dis qu'il narrive pas à faire l'affectation demandée. Pour cela j'ai procédé ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Sheets("Listes").Activate
    NomAgents = Sheets("Listes").Range("Q3:Q18")
    Mais il n'en est rien, j'ai toujours le même message d'erreur.

  4. #4
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

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

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut

    Bonjour, bonjour !

    Comme indiqué dans le code de pgz, c'est Worksheets ‼ Consulter l'aide VBA intégrée, elle ne mord pas !

    Ensuite, si la feuille de calculs n'est pas dans le classeur contenant le code, il faudrait respecter le B-A-BA d'Excel :
    la hiérarchie ! Classeur / Feuille / Cellule / méthode ou propriété …

    Pointer une feuille par son nom ne souffre d'aucune faute d'orthographe !
    Si la feuille appartient au classeur contenant le code, il est plus simple de la préciser par son CodeName

  5. #5
    Membre à l'essai
    Homme Profil pro
    Etudiant M2 Gestion de Projet
    Inscrit en
    Décembre 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Etudiant M2 Gestion de Projet

    Informations forums :
    Inscription : Décembre 2014
    Messages : 4
    Par défaut
    Bonjour Marc,

    J'ai pris en compte tes remarques en utilisant le CodeName, j'ai refait le code en me servant de mes listes prédéfinies dans mon fichier et pour le coup, je me retrouve avec Erreur d'exécution 1004.

    En utilisant le débogage, je me rends compte que mon code s'arrête toujours au niveau de la première affectation de valeurs.

    Il s'agit de mon premier code VBA! Pitié!



    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
    Option Explicit
    Option Base 1
     
     
    Sub PlanningAgent()
     
    Dim NomAgents() As Variant
    Dim Planning() As Variant
    Dim TestPlanning() As Variant
    Dim AgentsPlanning() As Variant
    Dim InitialesProjets() As Variant
    Dim H As Integer
    Dim I As Integer
    Dim J As Integer
     
    'Supprimer le contenu du planning Agents
    Planning_Ag.Range("PlanningAgent").ClearContents
     
    'Récupération de données
     
    NomAgents = Listes.Range("rAgentNom")
    Planning = Planning_PR.Range("Planning")
    AgentsPlanning = Planning_PR.Range("rAgentPlanning")
    InitialesProjets = Planning_PR.Range("rInitialesProjet")
     
    ReDim TestPlanning(UBound(NomAgents, 1), UBound(Planning, 2))
     
     
    'Rechercher les projets de chaque Agent par demi-semaine de planning
     
    For H = 1 To UBound(Planning, 2)
        For I = 1 To UBound(NomAgents, 1)
            For J = 1 To UBound(Planning, 1)
     
            If ((Planning(J, H) <> 0) And (AgentsPlanning(J, H) = NomAgents(I, 1))) Then
    TestPlanning(I, H) = InitialesProjets(J, 1) & TestPlanning(I, H)
            End If
     
            Next J
        Next I
    Next H
     
     
    'Afficher les valeurs trouvées dans le fichier prévu
     
    Planning_Ag.Select
    Planning_Ag.Range("PlanningAgent") = TestPlanning
     
    'Effacer les données du tableau
     
    Erase TestPlanning
     
    End Sub

  6. #6
    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.

    Si "rAgentNom" est un nom défini de plage, ce nom a pour étendu le classeur ou seulement une feuille.
    Si l'étendue est le classeur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nomAgents = Thisworkbook.names("rAgentNom").refersToRange.Value
    Si l'étendue est limitée à la feuille Listes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nomAgents = Thisworkbook.Worksheets("Listes").Names.RefersToRange.Value
    Cordialement,

    PGZ

  7. #7
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

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

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut
    Citation Envoyé par jojolaterreur Voir le message
    J'ai pris en compte tes remarques en utilisant le CodeName, j'ai refait le code en me servant de mes listes prédéfinies dans mon fichier et pour le coup, je me retrouve avec Erreur d'exécution 1004.
    Et faut-il deviner le n° de la ligne déclenchant l'erreur ?‼

    Sinon j'ai l'impression que tu as confondu nom d'une feuille et son CodeName !
    Par exemple si tu ouvres un nouveau classeur et tu nommes la première feuille "Test", son CodeName est "Feuil1".
    Et faut-il encore que la feuille appartienne au classeur contenant le code …

  8. #8
    Membre à l'essai
    Homme Profil pro
    Etudiant M2 Gestion de Projet
    Inscrit en
    Décembre 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Etudiant M2 Gestion de Projet

    Informations forums :
    Inscription : Décembre 2014
    Messages : 4
    Par défaut
    Bonjour pgz, Bonjour Marc-L,

    j'ai refait le code avec vos différentes corrections. Mon code marche à présent! merci!!!!

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

Discussions similaires

  1. macro permettant de lister les fichiers d'un dossier ou répertoire
    Par sophie76 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 28/12/2015, 21h24
  2. Réponses: 1
    Dernier message: 09/05/2012, 11h22
  3. Réponses: 1
    Dernier message: 24/03/2006, 11h20
  4. Réponses: 6
    Dernier message: 05/10/2005, 14h37

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