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 :

problème bizarre entre module et feuille sous VBA


Sujet :

Macros et VBA Excel

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

    Informations forums :
    Inscription : Février 2008
    Messages : 32
    Points : 16
    Points
    16
    Par défaut problème bizarre entre module et feuille sous VBA
    Bonjour,
    Alors dans le cadre d'un projet durant mon stage, j'ai développé une petite application de suivi de contrat.
    utilisant qq lignes de VBA, j'ai déja commencé à créer ma macro VBA sous un module pour pouvoir la testé. Apres avoir fini cette macro, j'ai créé un bouton pour l'executer sur une feuille.
    Malgré le fait que l'application fonctionne sans pb ds le module, lorsque je clique sur le bouton il me revient un erreur du type 1004.
    je vous met le code ou ca bug pour que vous voyez par vous m^me.

    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
    Private Sub CommandButton1_Click()
    Dim i As Integer
    Dim j As Integer
    j = 2
    i = 2
     
     
    'permet de copier coller dans la feuille OA2008 glabaux au bon endroit
    Sheets("OA 2008 bodycote IRLJ").Select
    While Not IsEmpty(Cells(i, 1).Value)
        i = i + 1
    Wend
    Range(Cells(2, 1), Cells(i - 1, 17)).Select
    Selection.Copy
    Sheets("OA 2008 globaux").Select
    Range("A2").Select
    ActiveSheet.Paste
    Sheets("OA 2008 bodycote IRLJ").Select
    Application.CutCopyMode = False
    En fait au lieu d'aller chercher la derniere ligne non vide dans la feuille c'est a dire pour i=280 environ il s'arrete a i=4 et me met une erreur au niveau
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range(Cells(2, 1), Cells(i - 1, 17)).Select
    Je précise encore une fois que le code marche tres bien en mode module ms pas lorsqu'il est attaché a un bouton sur une feuille...
    Avez vous une idée du pb?
    je vous remercie.

  2. #2
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    Bonjour,
    Déjà, à mon avis ton wend est placé au mauvais endroit.
    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
    Private Sub CommandButton1_Click()
    Dim i As Integer
    Dim j As Integer
    j = 2
    i = 2
     
     
    'permet de copier coller dans la feuille OA2008 glabaux au bon endroit
    Sheets("OA 2008 bodycote IRLJ").Select
    While Not IsEmpty(Cells(i, 1).Value)
        i = i + 1
    Range(Cells(2, 1), Cells(i - 1, 17)).Select
    Wend
    Selection.Copy
    Sheets("OA 2008 globaux").Select
    Range("A2").Select
    ActiveSheet.Paste
    Sheets("OA 2008 bodycote IRLJ").Select
    Application.CutCopyMode = False
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

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

    Informations forums :
    Inscription : Février 2008
    Messages : 32
    Points : 16
    Points
    16
    Par défaut
    merci pour ta réponse mais je ne pense pas car déja dans module cela marché correctement et mon but est d'identifier la derniere case vide afin de tt selectionner avec range.
    tu n'es pas d'accord?
    Je viens de tester avec ton idée cela ne change rien.
    Mais en tt cas je pense que le wend est bien placé.

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Points : 2 443
    Points
    2 443
    Par défaut
    Salut benoist.cardinal
    D'après l'ititulé de la maco(Private Sub CommandButton1_Click) tu te trouves dans un module lié à une feuille. Si la feuille n'est pas "OA 2008 bodycote IRLJ", c'est normal, tu ne peux utiliser select (dans les modules de classe feuille) que pour la feuille.
    Si on avait un code (et pas un lambeau de code ) on pourrait t'aider.
    Pour trouver la dernière cellule tu peut utiliser .SpecialCells(xlCellTypeLastCell) ou, comme dans le texte tu dis vouloir sélectionner (beurk ) toute la plage de travail UsedRange
    Mais sans le code...
    A+

  5. #5
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    Je suis d'accord avec gorfael, mais en attendant, moi j'ai bien placé ton code sur la feuille concernée au bouton de commande et avant de voir la réponse de Gorfael,
    j'avais fait ceci et ça marche, mais tiens compte des conseils de Gorfael (plus expérimenté)
    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
    Private Sub CommandButton1_Click()
    Dim i As Integer
    Dim j As Integer
    j = 2
    i = 2
     
     
    'permet de copier coller dans la feuille OA2008 glabaux au bon endroit
    Sheets("OA 2008 bodycote IRLJ").Select
    While Not IsEmpty(Cells(i, 1).Value)
        i = i + 1
    Wend
    Range(Cells(2, 1), Cells(i - 1, 17)).Select
    Selection.Copy
    Sheets("OA 2008 globaux").Activate
    Sheets("OA 2008 globaux").Range("A2").Select
    ActiveSheet.Paste
    Sheets("OA 2008 bodycote IRLJ").Select
    Application.CutCopyMode = False
    End Sub
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2008
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 32
    Points : 16
    Points
    16
    Par défaut
    je vais vour mettre tous le code et sachant que la feuille sur laquelle le bouton est attaché ne correspond à aucune des feuilles qui sont indiquées sur la page de progra.
    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
    Private Sub CommandButton1_Click()
    Dim i As Integer
    Dim j As Integer
    j = 2
    i = 2
     
     
    'permet de copier coller dans la feuille OA2008 glabaux au bon endroit
    Sheets("OA 2008 bodycote IRLJ").Select
    While Not IsEmpty(Cells(i, 1).Value)
        i = i + 1
    Wend
    Range(Cells(2, 1), Cells(i - 1, 17)).Select
    Selection.Copy
    Sheets("OA 2008 globaux").Select
    Range("A2").Select
    ActiveSheet.Paste
    Sheets("OA 2008 bodycote IRLJ").Select
    Application.CutCopyMode = False
     
     
    'permet de copier coller dans la feuille OA2008 glabaux au bon endroit
    Sheets("OA 2008 ss BODYCOTE IRLJ").Select
    While Not IsEmpty(Cells(j, 1).Value)
        j = j + 1
    Wend
    Sheets("OA 2008 ss BODYCOTE IRLJ").Select
    Range(Cells(2, 1), Cells(j - 1, 17)).Select
    Selection.Copy
    Sheets("OA 2008 globaux").Select
    Cells(i, 1).Select
    ActiveSheet.Paste
    Sheets("OA 2008 ss BODYCOTE IRLJ").Select
    Application.CutCopyMode = False
     
     
    'permet de mettre à jour le TCD OA globaux
    Sheets("TCD OA globaux").Select
    Range("D3").Select
    ActiveSheet.PivotTables("Tableau croisé dynamique1").RefreshTable
     
     
    'permet de mettre à jour le panel des pièces délestées
    '(contractualisées + non contractualisées)
    Sheets("OA 2008 globaux").Select
    Range("C:C,D:D,M:M,N:N,O:O,Q:Q").Select
    Selection.Copy
    Sheets("pieces delestées sans doublons").Select
    Range("A1").Select
    ActiveSheet.Paste
    Cells.Select
    Range("A1:F12690").AdvancedFilter Action:=xlFilterInPlace, Unique:=True
    Columns("A:F").Select
    Selection.Copy
    Sheets("panel pieces delestage").Select
    Range("A1").Select
    ActiveSheet.Paste
    Sheets("pieces delestées sans doublons").Select
    Application.CutCopyMode = False
    Range("H6").Select
    Sheets("OA 2008 globaux").Select
    Application.CutCopyMode = False
    Range("H6").Select
     
    End Sub
    Je ne comprend pas tres bien ce que tu as pu changer casefayere dans mon code mis a part
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Sheets("OA 2008 globaux").Activate
    Sheets("OA 2008 globaux").Range("A2").Select
    mais la progra beuf avant cela...
    j'ai du mal a comprendre la lol.
    je suis un peu pommé.
    Gorfael j'ai bien compris ce que tu as marqué mais dans ce cas la comment fait-on pour aller sélectionner des autres feuilles et travailler dessus.
    je vous remercie pour votre aide.

  7. #7
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    Ne peux-tu pas envoyer le fichier ou un extrait, j'y verrai plus clair
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2008
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 32
    Points : 16
    Points
    16
    Par défaut
    malheuresement non car toutes les données se trouvant deds sont confidentielle la seule chose que je peux faire c'est effacer tte les données de tte les feuilles et mettre le fichier vierge ac juste le nom des feuilles le code vba et le bouton.
    ca peut t'aider?

  9. #9
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    oui, mais le mieux c'est d'écrire n'importe quoi à la place des données confidentielles et ne pas oublier de d'enregistrer sous un nom différent
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

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

    Gorfael vous a expliqué pourquoi cela ne fonctionnait pas.

    Pour rester simple et conserver votre bouton en l'état :

    Sur votre feuille vous laissez uniquement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub CommandButton1_Click()
    Ma_prodédure
    End Sub
    Dans un module standard vous créez une procédure :

    et vous collez le code qui était sur votre feuille.

    (le nom Ma_procédure est un exemple bien sûr)

  11. #11
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Points : 2 443
    Points
    2 443
    Par défaut
    Salut benoist.cardinal et le forum
    on ne peut pas sélectionner une autre feuille à partir d'un module lié à une feuille!
    Mais en a-t-on besoin ?

    J'espère que c'est une erreur de recopie qui te fait faire la même manip pour I et J. 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
    Private Sub CommandButton1_Click()
    'déclaration ===================================
    Dim F_S As Worksheet
    Dim F_D  As Worksheet
    'MEI ===========================================
    Set F_S = Sheets("OA 2008 bodycote IRLJ")
    Set F_D = Sheets("OA 2008 globaux")
    'cpie de F_source sur F_destination ============
    Range(F_S.[A2], F_S.Cells(F_S.[A2].End(xlDown), 17)).Copy F_D.[A2]
    Application.CutCopyMode = False
    'mise à jour du TCD OA globaux =================
    ActiveSheet.PivotTables("Tableau croisé dynamique1").RefreshTable
    'mise à jour du panel des pièces délestées =====
    '(contractualisées + non contractualisées)
    With Sheets("pieces delestées sans doublons")
        .Cells.Clear '***************************
        F_D.Range("C:C,D:D,M:M,N:N,O:O,Q:Q").Copy .[A1]
        .Range("A1:F12690").AdvancedFilter Action:=xlFilterInPlace, Unique:=True
        .Columns("A:F").Copy Sheets("panel pieces delestage").Range("A1")
    End With
    'Sheets("OA 2008 globaux").Activate
    'Range("H6").Select
    Application.CutCopyMode = False
    End Sub
    De préférence sur une copie de ton fichier, ne pouvant la tester correctement
    N'ayant pas besoin de TCD, il est possible que ça se comporte en Shapes, et donc, dans ce acs, l'activation de la feuille soit obligatoire.Mais je ne le crois pas.

    La ligne contenant*************** me semble nécessaire : quand tu recopie une plage, il faut s'arrurer que seules les bonnes valeurs existent et que les anciennes ne viendront pas perturber les données.
    effectivement, les 2 instructions ne sont pas applicables dans un module lié à une autre feuille, mais jacques_jean t'a fourni une solution.

    Si tu veux faire du code, il faut apprendre la différence entre ce qui est indispensable au fonctionnement et ce qu'excel met dans ses macro automatique
    Si tu mets "A" en A1, et que tu valides ta formule par enter, Excel va sélectionner A2, parce que physiquement, c'est ce que tu fais. Mais c'est totalement inutile pour ton code.
    De mêmequand tu copies, tu sélectionnes la plage, tu la copie, tu change de feuille, tu sélectionnes la cellule où doit débuter ta copie, tu la colles et si tu fais une autre manip, tu arrêtes le mode copie. En subalterne consciencieux, Excel code chaque manip en macro apprentissage.
    Mais ce que tu veux faire, c'est cpier une plage et la coller à partir d'une cellule, rien de plus.
    Regarde mon code en mode pas-à-pas (point d'arrêt sur le titre et après tu avance d'instruction en instruction avec F8).
    regarde le tien en mode pas-à-pas
    A+
    EDIT J'oubliai : même avec ton code en intégralité, on ne peut rien en faire qui puisse te nuire. Même si quelqu'un reconnaît tes feuille.
    Un fichier d'essai doit être lisible par tout le monde, mais il doit comprter le maximum de données critiques. Et ça veut dire "AAA", AAB, etx si c'est du texte et 1,2 etc si c'est des nombres. Jamais la réalité, mais des valeurs qui représentent les valeurs de ton tableao. Ici on se fout complêtement de ton fichier(sauf que si tu y mets des données personnelles, les modos si feront un plaisir de te taper sur les doigts), seuk est intéressant le problème à résoudre!

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

    Bizarre : le problème est résolu mais on ne sait pas comment !

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

Discussions similaires

  1. [CSS 2.1] Problème bizarre: design différent entre 2 pages sous IE8
    Par yonex68 dans le forum Mise en page CSS
    Réponses: 6
    Dernier message: 20/04/2010, 17h03
  2. [VBA] problème choix de cellule dans feuille excel
    Par beegees dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 01/02/2006, 10h48
  3. problème d'installation module sous windows
    Par Ickou dans le forum Modules
    Réponses: 2
    Dernier message: 21/10/2005, 16h32
  4. [Designer] Problème de transfert de données entre modul
    Par BILLYPATOU dans le forum Designer
    Réponses: 11
    Dernier message: 09/03/2004, 18h15
  5. [VBA-E] Sélection feuilles sous excel
    Par Mystic eyes dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 05/02/2004, 13h27

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