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 utilisation boucle en Each


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Contrôle de gestion
    Inscrit en
    Décembre 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Contrôle de gestion

    Informations forums :
    Inscription : Décembre 2014
    Messages : 3
    Par défaut Problème utilisation boucle en Each
    Bonjour,

    Après avoir arpenté de long en large ce forum pendant plusieurs semaines pour me former au VBA, me voici face à un problème, qui, sauf erreur de ma part n'a pas été abordé.

    Mon besoin :

    J'ai une macro qui ouvre tous les fichiers Excel d'un dossier (jusqu'ici tout va bien !)

    Pour chaque fichier ouvert, j'ai besoin de copier un certain nombre de ligne de ces fichiers ( ici aussi tout est ok)

    Pour faire cette manipulation, je spécifie dans mon userform "each workbook...." , or ici je suis obligé de spécifier plus de 5 variables différentes (workbook) pour traiter l'ensemble des fichiers ouverts (il y en 22). Si je n'utilise qu'une variable, il traite 9 fichiers, si il y a deux variables il va traiter 13 fichiers, etc...

    Je me demandais donc si une boucle en each avait une limite, mais je pense pas.

    Voici mon code pour essayer d'être plus claire :

    Le code de mon module (celui-ci fonctionne bien)
    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
     
    Sub copie_pec()
    Dim mainworkbook As Workbook
    Set mainworkbook = ActiveWorkbook
    Dim feuil As Worksheets
    Set outil_real = Workbooks("outil de contrôle du réalisé.xlsm").Sheets("traitement PEC")
    Dim l As Integer
    Dim c As Integer
    Dim n As Integer
     
    c = 1
    l = 4
     
    'pour ajouter des lignes en fonction des données que j'ai ajouté
    n = WorksheetFunction.CountA(Columns(1))
    n = n - 4
    outil_real.Rows(2).Resize(n).Insert Shift:=xlUp
     
    While Cells(l, 1) <> "<EOF>"
        outil_real.Cells(l - 2, 1) = Cells(2, 2)
        outil_real.Cells(l - 2, 2) = Cells(2, 1)
        For c = 3 To 160
            outil_real.Cells(l - 2, c) = Cells(l, c - 2)
        Next c
    l = l + 1
    Wend
    ActiveWorkbook.Close
     
    End Sub
    Et voici le code de mon userform qui appelle mon module
    C'est à ce niveau que se situe le problème, si je n'ai pas au moins 5 variables (dbk) je ne peux pas traiter tous les programmes ouverts

    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
    Private Sub CommandButton1_Click()
    Dim dbk As Workbook
    Dim dbk2 As Workbook
    Dim dbk3 As Workbook
    Dim dbk4 As Workbook
    Dim dbk5 As Workbook
    Call PEC
    Call clear
     
     
    'obligé d'utiliser 5 variables (dbk,dbk1,dbk2,...) pour reprendre les données de l'ensemble des programmes que j'ai ouvert
     
     For Each dbk In Application.Workbooks
     If dbk.Name <> ThisWorkbook.Name Then
       Call copie_pec
        End If
     Next dbk
     
      For Each dbk2 In Application.Workbooks
     If dbk2.Name <> ThisWorkbook.Name Then
       Call copie_pec
        End If
     Next dbk2
     
       For Each dbk3 In Application.Workbooks
     If dbk3.Name <> ThisWorkbook.Name Then
       Call copie_pec
        End If
     Next dbk3
     
        For Each dbk4 In Application.Workbooks
     If dbk4.Name <> ThisWorkbook.Name Then
       Call copie_pec
        End If
     Next dbk4
     
         For Each dbk5 In Application.Workbooks
     If dbk5.Name <> ThisWorkbook.Name Then
       Call copie_pec
        End If
     Next dbk5
     
    End Sub
    En vous remerciant par avance de l'aide que vous pourrez m'apporter

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    je ne vois pas la différence de traitement entre les dbk ... dbk5

    Citation Envoyé par raphael77520 Voir le message
    Bonjour,
    ici je suis obligé de spécifier plus de 5 variables différentes (workbook) pour traiter l'ensemble des fichiers ouverts (il y en 22). CODE]
    si tu arrive a définir le nombre d’occurrence!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    for I = 1 to 5
      For Each dbk In Application.Workbooks
         If dbk.Name <> ThisWorkbook.Name Then
           Call copie_pec
          End If
       Next dbk
    next

  3. #3
    Candidat au Club
    Homme Profil pro
    Contrôle de gestion
    Inscrit en
    Décembre 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Contrôle de gestion

    Informations forums :
    Inscription : Décembre 2014
    Messages : 3
    Par défaut
    Merci pour cette réponse rapide

    Ce que je ne comprend pas c'est que le code ne va pas traiter tout les fichiers ouverts alors que je spécifie "for each workbook ". Je suis obligé de refaire le traitement x fois alors que le traitement est identique. Je pensais que "for each workbook" allait traiter tous les classeurs ouverts.

    En tout cas merci pour l'idée de la boucle, je n'y avais pas pensé.

  4. #4
    Invité
    Invité(e)
    Par défaut
    tu déclarée 5 variable et tu fait le même traitement pour les 5
    ça revient à faire ce que j'ai fait!

    j'utilise bien ton code!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    For Each dbk In Application.Workbooks
         If dbk.Name <> ThisWorkbook.Name Then
           Call copie_pec
          End If
       Next dbk

  5. #5
    Candidat au Club
    Homme Profil pro
    Contrôle de gestion
    Inscrit en
    Décembre 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Contrôle de gestion

    Informations forums :
    Inscription : Décembre 2014
    Messages : 3
    Par défaut
    J'ai déclaré 5 variables car lorsque j'en déclarais qu'une il ne me traitait pas tous les fichiers ouverts, j'ai donc du déclarer plusieurs variables pour refaire le traitement x fois.

    D'après moi en utilisant "for each workbook", il aurait du traiter en une fois tous les classeurs ouverts, nan?

  6. #6
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub CommandButton1_Click()
    Dim S As Long
    Call PEC
    Call Clear
    'obligé d'utiliser 5 variables (dbk,dbk1,dbk2,...) pour reprendre les données de l'ensemble des programmes que j'ai ouvert
    For S = Application.Workbooks.Count To 1 Step -1
        If Application.Workbooks(i).Name <> ThisWorkbook.Name Then
            Application.Workbooks(i).Activate
            Call copie_pec
        End If
    Next
    End Sub

Discussions similaires

  1. [XSLT 1.0] Problème affichage boucle for-each
    Par damd2viz dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 28/08/2011, 17h42
  2. Problème de soustraction dans Boucle For each
    Par athos7776 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 14/04/2011, 05h46
  3. [XSLT] Problème de boucle avec for-each
    Par knack8 dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 29/04/2009, 01h42
  4. utilisation de boucle for each
    Par mrah1 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 22/02/2009, 11h24
  5. Problème utilisation fonction en boucle
    Par Iskander81 dans le forum C
    Réponses: 8
    Dernier message: 29/06/2007, 12h05

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