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 avec Object required


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Runsh63
    Homme Profil pro
    Contrôleur de gestion
    Inscrit en
    Mars 2011
    Messages
    476
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Contrôleur de gestion
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2011
    Messages : 476
    Par défaut Problème avec Object required
    Bonjour,

    Je tente de compiler des données et utilises pour la première fois le code Do Until... Loop.
    Lors de l'exécution de la macro, celle-ci s'arrête sur la ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MySheetName = MySheet.Name
    Ci-dessous le code tapé :

    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
    Sub MS_Data()
     
    Dim MySheet As Worksheet, MySheetName As String, MSYear As String, MSMonth As String
    Dim LR1 As Long
     
    Application.ScreenUpdating = False
     
    MySheetName = MySheet.Name
    MSYear = "20" & Left(Right(MySheetName, 6), 2)
    MSMonth = Left(Right(MySheetName, 4), 2)
    LR1 = .Range("A" & .Rows.Count).End(xlUp).Row
     
        Do Until MySheetName = "MS Data"
            With MySheet
                .Range("A1:I" & LR1).Copy Sheets("Compiled Data").Range("B" & .Rows.Count).End(xlUp).Offset(1, 0)
            End With
        Loop
     
     
    Application.ScreenUpdating = True
     
    End Sub
    Pouvez-vous m'aider à corriger SVP ?

    D'avance merci !

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    357
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 357
    Par défaut
    Bonjour,

    Que voulez-vous faire ? Vous voulez parcourir toutes les feuilles du classeur et les concatener sur un feuille de resultat ?

    Je remarque qu'il manque d'office une affectation :

    set MySheet=? (activesheet ? peut-etre autre chose en fonction de ce que vous répondrez à la question précédente).

    D'autre part il risque d'y avoir un bug sur la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LR1 = .Range("A" & .Rows.Count).End(xlUp).Row
    Il manque un bloc with d'après moi.

    Bonne journée.

  3. #3
    Membre éclairé Avatar de Runsh63
    Homme Profil pro
    Contrôleur de gestion
    Inscrit en
    Mars 2011
    Messages
    476
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Contrôleur de gestion
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2011
    Messages : 476
    Par défaut
    Bonjour AccessNewbie,

    J'ai tendance à vous énerver avec mes questions à la noix, mais vous me pratiquez bien puisque vous avez tout compris.
    Je cherche à compiler des données de différentes feuilles.
    Le nombre de feuilles pouvant varier, j'ai pensé à écrire ainsi.
    Je pense que votre solution Set MySheet = ActiveSheet est pas mal.
    Si ça ne marche pas, je reviens vers vous car vous avez compris ma finalité.

    J'ai placé LR1 = ... plus bas dans le code, en effet il manquait un bloc With...

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    357
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 357
    Par défaut
    Vous devriez plutot utiliser une boucle dans cet esprit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    For Each sht In ThisWorkbook.Sheets
        If sht.Name <> "Compiled Data" Then
            LR1 = sht.Range("A" & sht.Rows.Count).End(xlUp).Row
            sht.Range("A1:I" & LR1).Copy Sheets("Compiled Data").Range("B" & Sheets("Compiled Data").Rows.Count).End(xlUp).Offset(1, 0)
        End If
    Next sht
    Par contre j'ai pas tout compris a l utilité des variables MSYear et MSMonth qui ne sont pas utilisées.

    Et j'ai pas compris le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Do Until MySheetName = "MS Data"
    Qu'est ce que cela signifie ? qu'attendez vous en faisant cette commande ?

    Je vous laisse adapter le code à votre cas

    PS : Ca a fonctionné l'autre bout de code que je vous avait pondu ?

  5. #5
    Membre éclairé Avatar de Runsh63
    Homme Profil pro
    Contrôleur de gestion
    Inscrit en
    Mars 2011
    Messages
    476
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Contrôleur de gestion
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2011
    Messages : 476
    Par défaut
    Access Newbie,

    Je peux très bien vous vouvoyer mais vous pouvez me tutoyer, j'aime autant.
    L'autre bout de code était parfait, je l'ai adapté à mon cas et j'aurai à ce propos quelques questions à vous poser car je n'ai pas saisi une petite chose.

    Je vais de suite tester le code que vous venez d'écrire.
    Les variables MSYear et MSMonth me serviront tout de suite, c'est que j'y vais pas à pas. Chaque nom d'onglet se termine par jjmmaa et j'en ai besoin car comme vous le voyez, je colle les données de chaque feuille dans l'onglet de destination en colonne B. En A, je souhaite récupérer le nom de chaque feuille pour ensuite les coller en A(x). Car au bout du bout, j'aurai toutes mes données compilées et j'aimerai pouvoir différencier chaque "période" car j'en aurai besoin par la suite.
    Je vais tenter de mon côté de "pondre" quelque chose mais ça ne m'étonnerait pas que je revienne vers vous plus vite que vous le pensez

  6. #6
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut heu...!!!
    bonjour

    tu a tapé ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MySheetName = MySheet.Name
    et en aucun cas tu a precisé avant le quel c'etait ou alors ailleur doncil manque une portion du cade


    ensuite tu dis:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MSYear = "20" & Left(Right(MySheetName, 6), 2)
    la tu devrais avoir une erreur puisque MySheetName est = a rien



    au plaisir
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  7. #7
    Membre éclairé Avatar de Runsh63
    Homme Profil pro
    Contrôleur de gestion
    Inscrit en
    Mars 2011
    Messages
    476
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Contrôleur de gestion
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2011
    Messages : 476
    Par défaut
    Afin de récupérer la période en colonne A de ma feuille "Compiled Data", période que je récupère dans le nom de l'onglet de base, voilà ce que j'ai tapé (merci Access Newbie) :

    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
    Sub MS_Data()
     
    Dim MySheet As Worksheet
    Dim LR1 As Long, LR2 As Long
     
    Application.ScreenUpdating = False
     
        For Each MySheet In ThisWorkbook.Sheets
            If MySheet.Name <> "Compiled data" And MySheet.Name <> "Final data" And MySheet.Name <> "MS Data" And MySheet.Name <> "Main Menu" Then
                LR1 = MySheet.Range("A" & MySheet.Rows.Count).End(xlUp).Row
                MySheet.Range("A1:I" & LR1).Copy Sheets("Compiled Data").Range("B" & Sheets("Compiled Data").Rows.Count).End(xlUp).Offset(1, 0)
                    With Sheets("Compiled Data")
                        LR2 = .Range("B" & .Rows.Count).End(xlUp).Row
                        .Range("A" & .Rows.Count.End(xlUp).Offset(1, 0) & ":A" & LR2).Value = "20" & Left(Right(MySheet.Name, 6), 2) & "." & Left(Right(MySheet.Name, 4), 2)
                    End With
            End If
        Next MySheet
     
     
    Application.ScreenUpdating = True
     
    End Sub

    Mais j'ai une erreur sur cette ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .Range("A" & .Rows.Count.End(xlUp).Offset(1, 0) & ":A" & LR2).Value = "20" & Left(Right(MySheet.Name, 6), 2) & "." & Left(Right(MySheet.Name, 4), 2)
    Encore Object Required...

  8. #8
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    re
    ferme les parenthezes d'un range ca marchera mieux

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .Range("A" & .Rows.Count).End(xlUp).Offset(1, 0) & ":A" & LR2).Value = "20" & Left(Right(MySheet.Name, 6), 2) & "." & Left(Right(MySheet.Name, 4), 2)
    au plaisir
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

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

Discussions similaires

  1. problème avec include / require sur des virtualhost
    Par e-m.guillaume dans le forum Apache
    Réponses: 4
    Dernier message: 17/11/2013, 17h32
  2. [Dojo] dojo.require
    Par polo42 dans le forum Bibliothèques & Frameworks
    Réponses: 9
    Dernier message: 30/06/2009, 17h17
  3. Problème avec un require()
    Par Kaymo's dans le forum Langage
    Réponses: 5
    Dernier message: 26/09/2008, 17h39
  4. Problème avec une classe... "without object"
    Par z980x dans le forum C++
    Réponses: 8
    Dernier message: 27/04/2006, 16h00
  5. [Object] Problèmes avec Assigned
    Par Clorish dans le forum Langage
    Réponses: 9
    Dernier message: 30/06/2005, 13h22

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