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 :

Probleme avec each sheets


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2014
    Messages : 75
    Par défaut Probleme avec each sheets
    Bonjour tout le monde,

    Je sollicite votre aide pour un problème que je rencontre dans mon code VBA.
    Mon objectif est de transférer des données contenues dans plusieurs feuilles de mon classeur Excel (qui ont toutes la même forme) vers un autre classeur Excel. Lorsque je lance mon code, toutes les données sont correctement transférées. Le problème survient lorsque toutes les feuilles du classeur sont passées à la "moulinette". Un message d'erreur apparait car mon code ne détecte pas correctement qu'il n'y a plus de feuilles dans le classeur. Voici le bout de code qui pose problè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
    20
    21
    22
    23
    24
    25
     
    Set WBfirst = ActiveWorkbook
    ' Ouverture du fichier Excel. Il s'appelle New
    'Workbooks.Open ("D:\Documents and Settings\...\New.xls")
    If MsgBox("Après avoir cliquer sur Oui, veuillez selectionner le fichier Excel New.xls; sinon cliquer sur non.", vbYesNo, "Recherche du fichier New") = vbYes Then
        Nom_Fichier = Application.GetOpenFilename("Fichiers Excel (*.xls), *.xls")
            If Nom_Fichier <> False Then
                Workbooks.Open Filename:=Nom_Fichier
            End If
            Else
                Exit Sub
    End If
    Set WBsecond = ActiveWorkbook
     
    WBfirst.Activate
     
     
     
     
     For Each sht In Worksheets
       Debug.Print sht.Name
      If sht.Name <> "Telecommande" Then
      sht.Select
     'Sélection de old
    WBfirst.Activate
    Voici le message d'erreur :
    "Erreur d’exécution '1004' :
    La méthode Select de la classe Worksheet a échoué."


    Avez vous déjà rencontré ce problème ? Est-ce que cela vient de ma boucle each sheet ? Connaissez vous une solution à apporter ?

    Merci d'avance pour vos réponses !!!

  2. #2
    Membre Expert
    Avatar de pc75
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    3 662
    Détails du profil
    Informations personnelles :
    Âge : 70
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 3 662
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    for i = 1 to Sheets.Count
       msgbox Sheets.Item(i).name
    next

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2014
    Messages : 75
    Par défaut
    Merci pour ta réponse rapide, cependant je ne vois pas comment intégrer ce code. J'ai essayé plusieurs choses mais je rencontre toujours des problèmes :

    J'ai fais :
    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
     
    Set WBfirst = ActiveWorkbook
    ' Ouverture du fichier Excel qui sera à la fin importé dans Matrisk. Il s'appelle New
    'Workbooks.Open ("D:\Documents and Settings\VXWC192\Bureau\Mission 18\New.xls")
    If MsgBox("Après avoir cliqué sur Oui, veuillez selectionner le fichier Excel New.xls; sinon cliquer sur non.", vbYesNo, "Recherche du fichier New") = vbYes Then
        Nom_Fichier = Application.GetOpenFilename("Fichiers Excel (*.xls), *.xls")
            If Nom_Fichier <> False Then
                Workbooks.Open Filename:=Nom_Fichier
            End If
            Else
                Exit Sub
    End If
    Set WBsecond = ActiveWorkbook
    WBfirst.Activate
     
     
     
     
     
    'application du code à toutes les feuilles 
     
    for i = 1 to Sheets.Count
     
    ...
    'mon code de copie/colle des données
    ...   
    next
    end sub
    Je ne comprends pas pourquoi mon code de copie/colle ne s'applique que dans une feuille. Il ne se passe rien pour les autres feuilles. Petite précision : mes feuilles de mon classeur où les données sont présentes n'ont aucun nom en commun : par exemple : feuille1, ancien, nouveau, perte, gain.

  4. #4
    Membre Expert
    Avatar de pc75
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    3 662
    Détails du profil
    Informations personnelles :
    Âge : 70
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 3 662
    Par défaut
    Re,

    Tu peux nous montrer plus de code dans ta boucle for ?

    for i = 1 to Sheets.Count

    ...
    'mon code de copie/colle des données
    ...
    next

  5. #5
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2014
    Messages : 75
    Par défaut
    Oui bien sûr :
    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
    66
    67
    68
    69
    70
    71
     
     
    Set WBfirst = ActiveWorkbook
    ' Ouverture du fichier Excel. Il s'appelle New
    'Workbooks.Open ("D:\Documents and Settings\...\New.xls")
    If MsgBox("Après avoir cliqué sur Oui, veuillez selectionner le fichier Excel New.xls; sinon cliquer sur non.", vbYesNo, "Recherche du fichier New") = vbYes Then
        Nom_Fichier = Application.GetOpenFilename("Fichiers Excel (*.xls), *.xls")
            If Nom_Fichier <> False Then
                Workbooks.Open Filename:=Nom_Fichier
            End If
            Else
                Exit Sub
    End If
    Set WBsecond = ActiveWorkbook
    WBfirst.Activate
     
     
    For Each sht In Worksheets
      Debug.Print sht.Name
     If sht.Name <> "Telecommande" Then
      sht.Select
     
     
     
     
     
        'Sélection du premier classeur
    WBfirst.Activate
        ' 1. Copie de la feuille i
    Cells.Copy
    WBsecond.Activate
    Range("C4").Select
        ' 2. Création de la feuille Alpha dans le second classeur (New).
    Set sh = Sheets.Add
    sh.Name = "alpha"
        ' 3. Collage de la feuille copiée du premier classeur dans Alpha
    Cells.PasteSpecial
    i = 173
        ' 4. Copie des différents éléments dans les bonnes colonnes pour l'importation finale.
    Cells(14, 7).Copy
    Cells(i, 5).Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
    Cells(17, 6).Copy
    Cells(i, 13).Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
     
            If (Cells(i, 13) = "avéré") Then
            Cells(i, 13) = 1
            Else
            Cells(i, 13) = 0
            End If
     
    Rows(i).Copy
    Sheets("Data").Select
    j = Range("A65536").End(xlUp).Row
    j = j + 1
    Rows(j).Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
     
        '6. Suppression de la feuille Alpha qui n'est plus utile
    Sheets("alpha").Delete
     
       '7. Fermeture et sauvegarde
     ' Workbooks("New.xls").Close savechanges:=True
     
    End If
    WBfirst.Activate
    Next
    Donc je fais :
    Lancement de mon code depuis le fichier WBfirst. J'ouvre mon second classeur nommé new (WBsecond). Je reviens dans mon premier classeur. Boucle sur les feuilles de mon classeur. Je copie la feuille 1, j'ouvre mon second classeur. Je crée une feuille alpha. Sur cette feuille, je colle mes données. Je copie/colle mes données dans la ligne i de manière organisée. Une fois que toutes les données que je souhaite sont copiées/collées dans la ligne i, je copie cette ligne et je la colle dans ma feuille data (présente dans le classeur new à la base), à la suite des données déjà entrées. Je supprime ma feuille alpha. Je repars dans mon premier classeur (boucle) dans ma seconde feuille. Je réitère les étapes précédentes.
    ...
    Jusqu'à ce que tout soit importé.
    Enfin je ferme mon classeur en enregistrant (code mis en pause pour l'instant, tant que ça fonctionne pas correctement : étape 7 ).

  6. #6
    Membre Expert
    Avatar de pc75
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    3 662
    Détails du profil
    Informations personnelles :
    Âge : 70
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 3 662
    Par défaut
    Re,

    Il y a un truc que j'ai du mal à comprendre (j'ai peut-être regardé trop vite) :

    A l'étape 3, tu copies les données dans "alpha" et ensuite, tu fais un Sheets("alpha").Delete

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

Discussions similaires

  1. [LibreOffice][Tableur] Probleme avec ThisComponent.Sheets(0)
    Par ryan44x dans le forum OpenOffice & LibreOffice
    Réponses: 6
    Dernier message: 07/09/2015, 17h30
  2. probleme avec for-each
    Par tongo dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 16/06/2008, 10h49
  3. Probleme avec For Each
    Par Seth77 dans le forum VB.NET
    Réponses: 7
    Dernier message: 22/03/2007, 14h08
  4. [VB]Probleme avec for each .....
    Par STRUFIELD dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 20/01/2006, 08h31
  5. [Kylix] probleme avec un imagelist
    Par NicoLinux dans le forum EDI
    Réponses: 4
    Dernier message: 08/06/2002, 23h06

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