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 :

Exécuter une MACRO de Personal.xlsb


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 39
    Points : 19
    Points
    19
    Par défaut Exécuter une MACRO de Personal.xlsb
    Bonjour,

    Je dispose avec l'aide d'un membre du forum d'une macro fonctionnelle.
    Je souhaiterais l'exécuter à partir de tous les fichiers Excel à ma disposition en s'affranchissant de l'étape CTRL+C-CTRL-V.
    La macro a été enregistrée dans le classeur personnel (PERSONAL.xlsb)
    Toutefois lorsqu'elle est exécutée, l'erreur suivante apparaît '424' Objet requis.
    En revanche lorsque je copie cette macro et que je l'exécute sur l'onglet ThisWorkbook du fichier "macro personnelle", le résultat est correct...
    Fichiers attachés Fichiers attachés

  2. #2
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 203
    Points : 14 354
    Points
    14 354
    Par défaut
    Bonjour,

    Quel est le code ta macro ?
    Cordialement.

    Daniel

    La plus perdue de toutes les journées est celle où l'on n'a pas ri. Chamfort

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 39
    Points : 19
    Points
    19
    Par défaut
    Bonjour,

    Voici la macro
    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
    Sub devellopez()
    Dim cell As Range
     
    Feuil1.Cells.Copy Feuil3.Cells(1, 1)
    i = 1
    For Each cell In Feuil2.Range("a2:a" & Feuil2.Range("a65000").End(xlUp).Row)
    Nextsearchfor:
            Set c = Feuil3.Range("a" & i & ":a" & Feuil3.Range("a65000").End(xlUp).Row).Find(cell, LookIn:=xlValues, LookAt:=xlWhole)
            If Not c Is Nothing Then lig = c.Row
     
            q = c.Row
            p = cell.Text
            m = Cells(cell.Row, 4)
            o = Feuil3.Cells(lig, 4)
            If Feuil2.Cells(cell.Row, 1) = Feuil3.Cells(lig, 1) Then
                If Feuil2.Cells(cell.Row, 4) = Feuil3.Cells(lig, 4) Then
                Feuil3.Cells(lig, 5) = Feuil3.Cells(lig, 5) + Feuil2.Cells(cell.Row, 5) 'janvier
                Feuil3.Cells(lig, 6) = Feuil3.Cells(lig, 6) + Feuil2.Cells(cell.Row, 6) ' fevrier
                Feuil3.Cells(lig, 7) = Feuil3.Cells(lig, 7) + Feuil2.Cells(cell.Row, 7) ' mars
                Feuil3.Cells(lig, 8) = Feuil3.Cells(lig, 8) + Feuil2.Cells(cell.Row, 8) 'avril
                Feuil3.Cells(lig, 9) = Feuil3.Cells(lig, 9) + Feuil2.Cells(cell.Row, 9) 'mai
                Feuil3.Cells(lig, 10) = Feuil3.Cells(lig, 10) + Feuil2.Cells(cell.Row, 10) 'juin
                Feuil3.Cells(lig, 11) = Feuil3.Cells(lig, 11) + Feuil2.Cells(cell.Row, 11) 'juillet
                Feuil3.Cells(lig, 12) = Feuil3.Cells(lig, 12) + Feuil2.Cells(cell.Row, 12) 'aout
                Feuil3.Cells(lig, 13) = Feuil3.Cells(lig, 13) + Feuil2.Cells(cell.Row, 13) 'septembre
                Feuil3.Cells(lig, 14) = Feuil3.Cells(lig, 14) + Feuil2.Cells(cell.Row, 14) 'octobre
                Feuil3.Cells(lig, 15) = Feuil3.Cells(lig, 15) + Feuil2.Cells(cell.Row, 15) 'novembre
                Feuil3.Cells(lig, 16) = Feuil3.Cells(lig, 16) + Feuil2.Cells(cell.Row, 16) 'decembre
                Feuil3.Cells(lig, 17) = Feuil3.Cells(lig, 17) + Feuil2.Cells(cell.Row, 17) 'cumul
                Else
                i = lig
                GoTo Nextsearchfor
                End If
            Else
            Feuil2.Cells(cell.Row, 1).EntireRow.Copy Feuil3.Range("a" & Feuil3.Range("a65000").End(xlUp).Row + 1)
            End If
            Set c = Nothing
    Next cell
    End Sub

  4. #4
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 203
    Points : 14 354
    Points
    14 354
    Par défaut
    C'est l'ennui d'utiliser les codenames, ils ne s'appliquent qu'au classeur contenant la macro (donc au personal.xlsb. Essaie :

    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
    Sub devellopez()
    Dim cell As Range, sh As Worksheet, F1 As Worksheet, F2 As Worksheet, F3 As Worksheet
        For Each sh In Sheets
            If sh.CodeName = "Feuil1" Then
                Set F1 = sh
            ElseIf sh.CodeName = "Feuil2" Then
                Set F2 = sh
            ElseIf sh.CodeName = "Feuil3" Then
                Set F3 = sh
            End If
        Next sh
        F1.Cells.Copy F3.Cells(1, 1)
        i = 1
        For Each cell In F2.Range("a2:a" & F2.Range("a65000").End(xlUp).Row)
    Nextsearchfor:
        Set c = F3.Range("a" & i & ":a" & F3.Range("a65000").End(xlUp).Row).Find(cell, LookIn:=xlValues, LookAt:=xlWhole)
        If Not c Is Nothing Then lig = c.Row
     
        q = c.Row
        p = cell.Text
        m = Cells(cell.Row, 4)
        o = Feuil3.Cells(lig, 4)
        If F2.Cells(cell.Row, 1) = F3.Cells(lig, 1) Then
        If F2.Cells(cell.Row, 4) = F3.Cells(lig, 4) Then
        F3.Cells(lig, 5) = F3.Cells(lig, 5) + F2.Cells(cell.Row, 5) 'janvier
        F3.Cells(lig, 6) = F3.Cells(lig, 6) + F2.Cells(cell.Row, 6) ' fevrier
        F3.Cells(lig, 7) = F3.Cells(lig, 7) + F2.Cells(cell.Row, 7) ' mars
        F3.Cells(lig, 8) = F3.Cells(lig, 8) + F2.Cells(cell.Row, 8) 'avril
        F3.Cells(lig, 9) = F3.Cells(lig, 9) + F2.Cells(cell.Row, 9) 'mai
        F3.Cells(lig, 10) = F3.Cells(lig, 10) + F2.Cells(cell.Row, 10) 'juin
        F3.Cells(lig, 11) = F3.Cells(lig, 11) + F2.Cells(cell.Row, 11) 'juillet
        F3.Cells(lig, 12) = F3.Cells(lig, 12) + F2.Cells(cell.Row, 12) 'aout
        F3.Cells(lig, 13) = F3.Cells(lig, 13) + F2.Cells(cell.Row, 13) 'septembre
        F3.Cells(lig, 14) = F3.Cells(lig, 14) + F2.Cells(cell.Row, 14) 'octobre
        F3.Cells(lig, 15) = F3.Cells(lig, 15) + F2.Cells(cell.Row, 15) 'novembre
        F3.Cells(lig, 16) = F3.Cells(lig, 16) + F2.Cells(cell.Row, 16) 'decembre
        F3.Cells(lig, 17) = F3.Cells(lig, 17) + F2.Cells(cell.Row, 17) 'cumul
        Else
        i = lig
        GoTo Nextsearchfor
        End If
        Else
        F2.Cells(cell.Row, 1).EntireRow.Copy F3.Range("a" & F3.Range("a65000").End(xlUp).Row + 1)
        End If
        Set c = Nothing
        Next cell
    End Sub
    Cordialement.

    Daniel

    La plus perdue de toutes les journées est celle où l'on n'a pas ri. Chamfort

  5. #5
    Membre éprouvé Avatar de keygen08
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations forums :
    Inscription : Octobre 2012
    Messages : 545
    Points : 973
    Points
    973
    Par défaut
    Il est possible de changer tous les "feuil1" par sheets(1) ou sheets("feuil1")
    Idem pour les feuil2 et feuil3

    Avec sheets(1), les feuilles ne devront plus changer de place
    Avec sheets("feuil1"), les nom des onglets ne devront plus être changé

    Chaque méthode à ses avantages,...et ses inconvénients. J'aime bien utiliser le codename car l'usager à rarement accès au VB et ne peut donc pas changer cette appellation. Il peut en revanche changer à sa guise le nom des onglets ou la place des feuilles dans le classeur.

  6. #6
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 203
    Points : 14 354
    Points
    14 354
    Par défaut
    Bonsoir,

    Il peut en revanche changer à sa guise le nom des onglets ou la place des feuilles dans le classeur.
    Tu peux l'en empêcher en protégeant la structure du classeur, mais il doit bien y avoir des effets indésirables...

    PS. et pas besoin de VBA pour changer le codename, juste un accès à l'éditeur VB.
    Cordialement.

    Daniel

    La plus perdue de toutes les journées est celle où l'on n'a pas ri. Chamfort

  7. #7
    Membre éprouvé Avatar de keygen08
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations forums :
    Inscription : Octobre 2012
    Messages : 545
    Points : 973
    Points
    973
    Par défaut
    Bonjour Daniel

    Justement, l'utilisateur veut pouvoir changer le nom des onglets ou la position des feuilles à sa guise, donc je verrouille simplement l'accés à l'éditeur et j'utilise les codename. C'est juste une méthode de travail parmi d'autres.

  8. #8
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 203
    Points : 14 354
    Points
    14 354
    Par défaut
    Comme tu ne peux pas qualifier une feuille en la désignant par son codename, si tu utilises celui-ci, la feuille est censée appartenir au classeur contenant la macro. Donc, si tu désignes une feuille par son codename depuis le classeur de macros personnelles, VBA va chercher ce codename dans le classeur de macros personnelles et non pas dans le classeur actif. Donc ta macro fonctionne si la macro est dans le classeur contenant la feuille. (ou alors, tu fais référence à la feuille du personal.xlsb si elle existe).
    Cordialement.

    Daniel

    La plus perdue de toutes les journées est celle où l'on n'a pas ri. Chamfort

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

Discussions similaires

  1. Exécuter une macro d'un classeur B a partir d'un classeur A
    Par jackfred dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 25/10/2007, 23h31
  2. Exécuter une macro à l'ouverture du classeur
    Par illight dans le forum Contribuez
    Réponses: 2
    Dernier message: 22/06/2007, 12h24
  3. [VBA] Exécuter une macro Access Via Excel
    Par zenix dans le forum VBA Access
    Réponses: 1
    Dernier message: 05/05/2007, 00h11
  4. outre passer excel et quand même exécuter une macro excel : possible en VB ?
    Par chapeau_melon dans le forum VB 6 et antérieur
    Réponses: 17
    Dernier message: 08/11/2006, 20h59
  5. [VB6] Exécuter une macro Access
    Par Nektanebos dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 22/02/2006, 16h32

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