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 :

boucle for avec des feuille comme variable


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2015
    Messages : 35
    Par défaut boucle for avec des feuille comme variable
    bonjour ,
    j'ai une question en vba ,
    j'aimerais savoir s'il était possible d'effectuer une boucle for avec comme variable différente feuille?
    je m'explique , j'aimerais effectuer sur différente feuille de mon classeur les meme tache pour eviter de reecrire le code 13 fois je me demandais s'il était possible d'utiliser une boucle for ?
    merci pour vos réponses

  2. #2
    Membre chevronné
    Homme Profil pro
    autodidacte
    Inscrit en
    Novembre 2013
    Messages
    517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : autodidacte
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2013
    Messages : 517
    Par défaut
    Bonjour,

    On peut parcourir les feuilles par leur numéro:


    imaginons la feuille 1 s'appelle Test, la feuille 2 s'appelle Test2 et la feuille 3 s'appelle test3:

    on peut dire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    thisworkbook.worksheets("Test") = thisworkbook.worksheets(1)
    thisworkbook.worksheets("Test2") = thisworkbook.worksheets(2)
    thisworkbook.worksheets("Test3") = thisworkbook.worksheets(3)
    ainsi on fait un boucle:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for i = 1 to 3 
    thisworkbook.worksheets(i)
    next i

  3. #3
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2015
    Messages : 35
    Par défaut
    merci @bboy-eazy !
    par contre je l'ai essaye et il me mette utilisation incorect de la propriete au niveau du worksheets:s
    et jai une autre question (desole) en fesant ca i devient le nom de ma feuille ?
    je veux dire par la si je veux appeler une collone par le nom de feuille je peux note = "i" , ou je dois mettre quelque chose avt ou apre?

    je ne comprends pas ca me rend dingue on me dit " l'indice n'appartient pas a la selection" peut importe ce que je fais
    voici mon bout de code ou on me dit ca
    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
    Sub CopierDonnees()
     
    Dim Entree As Workbook, Sortie As Workbook
    Nomfichierentree = Application.GetOpenFilename("Fichier Excel (*.xls), *.xsl")
    If Nomfichierentree <> False Then
       Set Entree = Workbooks.Open(Nomfichierentree)
       End If
       NomFichierSortie = Application.GetOpenFilename("Fichier Excel (*.xls), *.xsl")
       If NomFichierSortie <> False Then
          Set Sortie = Workbooks.Open(NomFichierSortie)
          End If
     
          Sheets.Add After:=Sheets(Sheets.Count)
          ActiveSheet.Name = "CAUTION"
          Worksheets("Report").Range("1:1,1932:2083").Copy Worksheets("CAUTION").Range("A1")
          ThisWorkbook.Worksheets("CAUTION") = ThisWorkbook.Worksheets(1)
    ' je fais cet etape 15 fois mais ca s'arete des le dbeu en me mettant juste l'indice n'apartient pas a la selection"
    svp help me !!

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub test()
    Dim S As Long
    For S = 1 To Sheets.Count
        TraitemetFeuille Sheets(S)
    Next
    End Sub
     
    Sub TraitemetFeuille(Feuille As Worksheet)
    Dim r As Range, L As Long
    Set r = Feuille.UsedRange
    For L = 2 To r.Rows.Count
    Next
    se r = Nothing
    End Sub

  5. #5
    Membre chevronné
    Homme Profil pro
    autodidacte
    Inscrit en
    Novembre 2013
    Messages
    517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : autodidacte
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2013
    Messages : 517
    Par défaut
    et jai une autre question (desole) en fesant ca i devient le nom de ma feuille ?
    non i prendra la valeur 1,2,3 etc... cela dépend de la boucle que tu lui donne:

    ici i prendra la valeur 1 puis 2 puis 3 et voila

    esaye alors avec non plus worksheets mais sheets

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim i as integer
     For i = 1 To sheets.count 'i alalnt de 1 à nombre total de feuille 
       Sheets(i).select
     .....Macro....
    Next i
    sinon tu peux passer aussi par:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim Ws As Worksheet 'variable worksheet
     
    'Boucle sur toutes les feuille de calcul du classeur sauf graphique si elles existent
    For Each Ws In ThisWorkbook.Worksheets 
     MsgBox Ws.Name 'la propriété name renvoie le nom de la feuille
    Next Ws
    si tu prend le code de rdurupt:

    se r = Nothing
    End Sub
    mets:
    sinon tu auras un message d'erreur

  6. #6
    Invité
    Invité(e)
    Par défaut
    Ma proposition est générique,il faut l'adapter à ton scénario, tout comme TraitemetFeuille n'exécute pas ton traitement!

    évites les sélecte sélection et autre activate! regarde comment on fait dans mon exemple!

  7. #7
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2015
    Messages : 35
    Par défaut
    merci pour vos reponse aussi rapide et reactive!!
    par contre je n'ai pas compris le code rdurupt , je ne veux pas créer de nouveau sub mais integre cet boucle directement dans mon sub
    et bboy easy , j'aimerais faire comme tu me dis avec sheets mais le pb cest que le programme s'arrete avant meme qu'il rentre dans la boucle il me dit direct 'lindice n'appartien pas a la selection au moment ou j'ecrit
    "ThisWorkbook.Sheets("CAUTION") = ThisWorkbook.Sheets(1)" (j'ai change worksheets en sheets pour voir mais dans les deux cas ca me met la meme ereur )

    oui je me disais bien que c'était generique mais je ne comprend pas bien le code , a quoi sert le traitement texte?

  8. #8
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par eden3 Voir le message
    oui je me disais bien que c'était generique mais je ne comprend pas bien le code , a quoi sert le traitement texte?
    ???????????????????

  9. #9
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2015
    Messages : 35
    Par défaut
    je voulais dire le traitementfeuille desole

  10. #10
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par eden3 Voir le message
    bonjour ,
    j'ai une question en vba ,
    j'aimerais savoir s'il était possible d'effectuer une boucle for avec comme variable différente feuille?
    je m'explique , j'aimerais effectuer sur différente feuille de mon classeur les meme tache pour eviter de reecrire le code 13 fois je me demandais s'il était possible d'utiliser une boucle for ?
    merci pour vos réponses
    c'es le nom de la macro que je veux éviter d’écrire 13 fois! je lui passe la feuille que je veux traiter!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TraitemetFeuille sheets("Feuil1")
    Effectivement j’aurai due écrire TraitementFeuille mais je reconnais m’accorder certaine liberté avec l’orthographe !

  11. #11
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2015
    Messages : 35
    Par défaut
    merci !,
    tu sais ce qui est evident pour les uns ne le sont pas forcement pour les autres ,
    merci sincèrement de m'aider, mais apres je debute dans ce langage donc je suis peut etre un peu lente pour comprendre
    je vais essayer d'y reflechir au calme , bien que je n'est toujours pas bien compris ca va finir par venir ,
    merci en tout cas

  12. #12
    Invité
    Invité(e)
    Par défaut
    les question réponse c'est fait pour cela je ne me désespère jamais, moqueur certainement, méchant NON.

    si je réponds à certaine question, je m'attends à une certaine incompréhensions que je m'efforce de façon plus ou moins maladroite de combler.
    je ne voulais en aucun cas te froisser!

  13. #13
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2015
    Messages : 35
    Par défaut
    non non tu m'as pas froisse mais je ne comprend pas et ca me frustre !
    mais je pense avoir compris ce que tu voulais faire ,en somme je dois créer de sub le premier qui correspond a mon code
    et le deuxieme qui va me permetre de repeter mon code les 13 fois ?
    si c'est ca je vois ,mais je renomme toute les feuille et dans ce cas la je dois le faire a quel moment avant le premier sub , le second ou dans le premier?
    de plus dans monde a un moment je veux apele une colonne du nom de la feuille dans ce cas la je dois utiliser sheet(i).name (ou quelque chose comme ca )?
    merci en tout cas de prendre le temps de m'aider

  14. #14
    Invité
    Invité(e)
    Par défaut
    tu à Sub end sub, mais tu peux passer à une sub des paramètres, des indications qui modifies son comportement.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    sub Test1(IsBof as boolean)
    if IsBof=true then
    'Si oui je fait ça!
    else
    'Si non je fais ceci!
    end if
    end sub
    dans mon exemeple je passe la feuille , mais je peux également lui passer son nouveau nom, à moins que ce soit déductible par son nom actuelle!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub TraitemetFeuille(Feuille As Worksheet,NewName as string)
    Feuille.name=NewName
    End Sub

  15. #15
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2015
    Messages : 35
    Par défaut
    euu mais si je veux faire qu'un seul sub je peux pas simplement utiliser une boucle for ?
    pcq je t'avoue que jai pas tout compris
    enfin en theorie si mais en pratique pas telement je vois pas tb ce que je dois faire

  16. #16
    Invité
    Invité(e)
    Par défaut
    non tu fais c'un seul sub mais tu lui donnes toutes les information qu'il à besoin.

    actuellement tu as un sub qui fait un onglet! utilises ma boucle test et remplace TraitemetFeuille par le nom de ta macro sens la modifier.

    elle vas dans l'état actuel exécuter plusieurs fois la même chose.

    maintenant regarde les information qu'il faudrait modifier pour que ta sub fasse un autre onglet! et bien ce sont toutes ces information qu'il faut passer en paramètre!

    après dans ma sub test tu feras des testes (IF) pour évincer certain onglet du traitement!

  17. #17
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2015
    Messages : 35
    Par défaut
    j'ai essaye de teste ta sub test mais il me mette "nombre d'argument incorrect ou affectation de propriete incorrect"
    de plus , dans ma sub on ma mis une erreur a ce niveau la
    With Worksheets("sheets(k)")
    (k va de 2 to sheets.count) l'ecriture n'est pas correcte?

    Je pourais sinon utilise la fonction for each ? et dans ce cas la je metrais for each feuille then ..

    mais je ne sais pas comment appele la feuille

  18. #18
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for each sh in sheets
    TraitemetFeuille sh
    Next

  19. #19
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2015
    Messages : 35
    Par défaut
    ca marche !! merci beaucoup!!!
    par contre juste tu pourais me dire comment on fait si je veux appele le nom de ma feuille , y'aurait il une fonction du style sh.name?
    et si je veux faire ca que jusqu'à un certain nombre de feuille je rajoute un until quelque part?

  20. #20
    Invité
    Invité(e)
    Par défaut
    tu as donné la réponse dans ta question!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for each sh in sheets
    if  sh .name="Ques-ceque j'ensais!" then exit for
    TraitemetFeuille sh
    Next

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Boucle for avec variable dans le texte
    Par Alplob dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 21/06/2011, 10h33
  2. Réponses: 2
    Dernier message: 14/04/2010, 18h39
  3. Boucle for avec SELECT et variable indicée
    Par hisin dans le forum Langage
    Réponses: 4
    Dernier message: 14/12/2009, 11h53
  4. Boucle for avec 2 variables
    Par radzar dans le forum PL/SQL
    Réponses: 8
    Dernier message: 15/05/2009, 12h07
  5. [E-03] For Each avec des feuilles?
    Par drakkar_agfa dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 18/11/2008, 20h18

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