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 :

Erreur lors de l'execution d'une macro simple


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Décembre 2008
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 15
    Par défaut Erreur lors de l'execution d'une macro simple
    Bonjour,

    Voilà je fais un projet avec Excel et ses macros sous mac osx (Office:mac2011) et j'ai isolé un bout de macro qui me fait toujours une erreur et je ne comprends pas pourquoi... Je vous joins l'excel pour voir déjà si c'est pas un vieux bug du à l'adaptation de VBA de Windows à Mac OSX... Et si l'erreur se produit chez vous aussi, savez-vous pourquoi ?

    Merci d'avance,
    Matt

  2. #2
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    bonjour,


    poste ici entre balises [code] [/code] la partie de code qui cause problème ..

    pense aussi as nous dire comment ce manifeste ton erreur , par exemple si un message s'affiche il faut relever la ligne de code concernée (voir ou se trouve le curseur ou la ligne surlignée en jaune) , lire le message essayer de le comprendre et si ce n'est pas le cas le "recopier" ici .. afin que l'on puisse t'aider

    Cordialement.

    http://www.developpez.net/forums/d84...s-discussions/

  3. #3
    Membre averti
    Inscrit en
    Décembre 2008
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 15
    Par défaut
    J'avais pas vu qu'il était mal venu de joindre un fichier excel au premier message, donc je vous joins le code de ma 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
    Sub Coucou()
     
    Dim client_tab As Range
    On Error GoTo errHandler
     
    dernier_client = Worksheets("Clients").Range("B4").End(xlDown).Address
    nombre_client = Mid(dernier_client, 4) - 4
     
    4 Set client_tab = Worksheets("Clients").Range(Worksheets("Clients").Range("B4"), Worksheets("Clients").Range(dernier_client).Offset(0, 2))
     
    5 client_tab.Copy Destination:=Worksheets("Clients").Range("BB4")
     
    6 Worksheets("Clients").Range(Range("BC4"), Range("BC4").Offset(nombre_client, 0)).Select
     
    Exit Sub
    errHandler:
        MsgBox "Une erreur est survenue CmdeClt, Ligne: " & Erl() & _
        vbCrLf & "Numéro d'erreur: " & Err.Number & vbCrLf & Err.Description
    End Sub
    Ça plante à la ligne 6 : "Numero d'erreur 1004 : Erreur définie par l'application ou l'objet". En bidouillant un peu, il semble que ça vienne de la méthode "Select"

    Merci d'avance pour les infos.
    Matt

  4. #4
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    déjà Select dans la plus part des cas c'est inutile ... et mieux vaut l'éviter ...



    à quoi sert cette ligne 6 ?

  5. #5
    Membre averti
    Inscrit en
    Décembre 2008
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 15
    Par défaut
    En fait, à la base ma macro était la suivante :

    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
    Sub Coucou()
     
    Dim client_tab As Range
    On Error GoTo errHandler
     
    dernier_client = Worksheets("Clients").Range("B4").End(xlDown).Address
    nombre_client = Mid(dernier_client, 4) - 4
     
    4 Set client_tab = Worksheets("Clients").Range(Worksheets("Clients").Range("B4"), Worksheets("Clients").Range(dernier_client).Offset(0, 2))
     
    5 client_tab.Copy Destination:=Worksheets("Clients").Range("BB4")
     
    6 Worksheets("Clients").Range(Range("BC4"), Range("BC4").Offset(nombre_client, 0)).Select
    7 Worksheets("Clients").Sort.SortFields.Clear
    8 Worksheets("Clients").Sort.SortFields.Add Key:=Range("BC4"), _
            SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        With Worksheets("Clients").Sort
            .SetRange Range(Worksheets("Clients").Range("BB4"), Worksheets("Clients").Range("BB4").Offset(nombre_client, 2))
            .Header = xlGuess
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
     
    Exit Sub
    errHandler:
        MsgBox "Une erreur est survenue CmdeClt, Ligne: " & Erl() & _
        vbCrLf & "Numéro d'erreur: " & Err.Number & vbCrLf & Err.Description
    End Sub
    Et donc la ligne 6 à 8 permettent de classer un tableau par ordre alphabétique. Donc pour se faire, j'ai utilisé l'outil "enregistreur de macro"; j'ai fait ensuite copier/coller et j'ai variabilité le tout. Ça marchais au début puis j'ai du changer quelques trucs et après ça marché plus mais sans raison parce que la méthode Select ne paraît pas si dangereuse que ca mais si tu trouve un moyen de m'en passer, je suis preneur .

  6. #6
    Membre Expert Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Par défaut
    Bonjour Mat, Bbil, bonjour le forum,

    Pas bien compris ton code... Surtout cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Worksheets("Clients").Range(Range("BC4"), Range("BC4").Offset(nombre_client, 0)).Select
    que j'aurais écrite :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Worksheets("Clients").Range("BC4").Offset(nombre_client, 0).Select
    Peut-être comme ça :
    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
    Sub Coucou()
    Dim C As Object 'déclare la variable C (onglet Clients)
    Dim DL As Integer 'déclare la variable DL (Dernière Ligne)
    Dim PL As Range 'déclare la variable PL (PLage)
    Dim NC As Integer 'déclare la variable NC (Nombre de clients)
     
    On Error GoTo errHandler
    Set C = Sheets("Clients") 'définit l'onglet C
    DL = C.Cells(Application.Rows.Count, 2).End(xlUp).Row 'définit la dernière ligne éditée Dl de la colonne 2 (=B) de l'onglet C
    Set PL = C.Range("B4:B" & DL) 'définit la plage PL
    NC = PL.Cells.Count 'définit le nombre de clients NC
    PL.Offset(0, 2).Copy C.Range("BB4") 'copie la plage PL décalée de deux colonnes à droite (=colonne D) et la colle dans la cellule BB4
    Worksheets("Clients").Sort.SortFields.Clear
    Worksheets("Clients").Sort.SortFields.Add Key:=C.Range("BC4"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With Worksheets("Clients").Sort
        .SetRange C.Range("BB4").Offset(NC, 2) 'pourquoi 2 ?
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    Exit Sub
    errHandler:
    MsgBox "Une erreur est survenue CmdeClt, Ligne: " & Erl() & _
    vbCrLf & "Numéro d'erreur: " & Err.Number & vbCrLf & Err.Description
    End Sub

  7. #7
    Membre averti
    Inscrit en
    Décembre 2008
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 15
    Par défaut
    Peut-être comme ça :
    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
    Sub Coucou()
    Dim C As Object 'déclare la variable C (onglet Clients)
    Dim DL As Integer 'déclare la variable DL (Dernière Ligne)
    Dim PL As Range 'déclare la variable PL (PLage)
    Dim NC As Integer 'déclare la variable NC (Nombre de clients)
     
    On Error GoTo errHandler
    Set C = Sheets("Clients") 'définit l'onglet C
    DL = C.Cells(Application.Rows.Count, 2).End(xlUp).Row 'définit la dernière ligne éditée Dl de la colonne 2 (=B) de l'onglet C
    Set PL = C.Range("B4:B" & DL) 'définit la plage PL
    NC = PL.Cells.Count 'définit le nombre de clients NC
    PL.Offset(0, 2).Copy C.Range("BB4") 'copie la plage PL décalée de deux colonnes à droite (=colonne D) et la colle dans la cellule BB4
    Worksheets("Clients").Sort.SortFields.Clear
    Worksheets("Clients").Sort.SortFields.Add Key:=C.Range("BC4"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With Worksheets("Clients").Sort
        .SetRange C.Range("BB4").Offset(NC, 2) 'pourquoi 2 ?
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    Exit Sub
    errHandler:
    MsgBox "Une erreur est survenue CmdeClt, Ligne: " & Erl() & _
    vbCrLf & "Numéro d'erreur: " & Err.Number & vbCrLf & Err.Description
    End Sub
    Bien joué, ca marche . En fait pour faire une sélection de plusieurs cellule du genre , je faisais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range(Range("A1"),Range("A1").Offset(X,Y))
    ca je ne connais pas en avance la taille de mon tableau. Mais cette méthode :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range(Range(),Range().offset())
    semble faire planter vba. Du coup ta méthode est bien pratique, merci beaucoup

  8. #8
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    Citation Envoyé par Mat262 Voir le message
    ....parce que la méthode Select ne paraît pas si dangereuse que ca mais si tu trouve un moyen de m'en passer, je suis preneur .
    ben ton problème viens de la : utiliser la méthode Select ou activate te permet de travailler sur la feuille courante et tu prends donc la mauvaise habitude d'utiliser Range sans préciser la feuille concernée ... ce qui semble être la cause de ton problème .. la feuille active, pour ce qui est de ne pas utiliser Select et Activate il y as plein de code sur ce forum qui s'en passe...

  9. #9
    Membre averti
    Inscrit en
    Décembre 2008
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 15
    Par défaut
    Négatif, j'ai fait plein d'essai en précisant dans quelle feuille je travaillais, en rajoute devant tout et n'importe quoi mais le problème restait là.

Discussions similaires

  1. [XL-2007] Erreur 1004 lors de l'execution d'une Macro
    Par skipeemed dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 05/10/2010, 13h05
  2. Réponses: 6
    Dernier message: 13/12/2007, 03h13
  3. [VS]Erreur lors de l'execution d'une fonction
    Par nephhh dans le forum Windows Forms
    Réponses: 3
    Dernier message: 08/06/2007, 14h12
  4. probleme de lenteur lors de l'execution d'une macro sous excel
    Par smartbis dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 10/05/2007, 08h49
  5. [VBA-E]Message d'erreur lors de l'affectation d'une macro + prob form
    Par V3lkin dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 22/11/2006, 14h07

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