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 :

Génération onglet en automatique


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Inscrit en
    Janvier 2007
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 35
    Par défaut Génération onglet en automatique
    Bonjour,

    j'essaye d'écrire une macro en vba qui me permettrais de générer des onglets dans mon classeur. Ma boucle de création fonctionne bien lorsque je met un msgbox. lorsque je code pour creer les onglets ma boucle s'arrete apres le 5 éme (alors que je dois en avoir 40!!) et je n'ai aucun message. quelqu'un aurait il une idée sur le sujet ?
    voici mon code
    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
    Sub generation()
    '
    '
        i = 1
        Sheets("Edition").Select
        While Not Range("A" & i & "").Value = ""
            'MsgBox " " & i
            i = i + 1
            Sheets("questions").Copy After:=Sheets(ThisWorkbook.Sheets.Count)
     
            'ActiveSheet.Name = "Sem " & i     
     
        Wend
     
    End Sub

  2. #2
    Membre éclairé Avatar de Nicopilami
    Profil pro
    Ingénieur sécurité
    Inscrit en
    Janvier 2009
    Messages
    354
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur sécurité

    Informations forums :
    Inscription : Janvier 2009
    Messages : 354
    Par défaut
    Salut, tu n'aurais pas par hasard quatre lignes dans ta feuilles de questions ?

    Essaie de préciser la feuille que tu veux tester :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    While Not Sheets("Edition").Range("A" & i ).Value = ""
    et en parallele suffit, pas besoin des guillemets à la fin

    Dis moi si ca fonctionne
    ++
    Nico

  3. #3
    Membre averti
    Inscrit en
    Janvier 2007
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 35
    Par défaut
    Bonjour,

    Mon onglet de référence contient bien 40 lignes que je parcoure grâce a ma boucle. c'est la manipulation des objets excel qui se bloque

  4. #4
    Membre éclairé Avatar de Nicopilami
    Profil pro
    Ingénieur sécurité
    Inscrit en
    Janvier 2009
    Messages
    354
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur sécurité

    Informations forums :
    Inscription : Janvier 2009
    Messages : 354
    Par défaut
    pas de pb chez moi avec ton code, quand je rajopute bien le Sheets("") pour préciser la feuille à checker dans le while...

    Peux-tu préciser ce que tu veux faire, dans quel cas, sur quelle feuille, .. ?.

  5. #5
    Membre averti
    Inscrit en
    Janvier 2007
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 35
    Par défaut
    tant que ma colonne "A" est renseigne d'ou mes 40 valeurs
    je crée un onglet à partir du modèle questions et je rename l'onglet que je viens de créer.

  6. #6
    Membre éclairé Avatar de Nicopilami
    Profil pro
    Ingénieur sécurité
    Inscrit en
    Janvier 2009
    Messages
    354
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur sécurité

    Informations forums :
    Inscription : Janvier 2009
    Messages : 354
    Par défaut
    A priori la feuille selectionnée après la copie est la nouvelle feuille créée.

    Du coup le Range ne s'applique plus à ta feuille de valeurs mais à la feuille active, et donc si i s'incrémente, ca sera OK tant que la valeur A&i de la nouvelle feuille copiée ne sera pas vide; après ta macro s'arretera...

    si ce n'est pas cette raison, envoie le fichier, car sans cela personnellement, je ne pourrai rien faire ou proposer de plus...

  7. #7
    Expert confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    6 814
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 6 814
    Par défaut
    Nicopilami a probablement raison.

    un code adapté sur son idée :

    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
    Sub generation()
    '
        dim WS as Worksheet
        set WS = Sheets("Edition")
        i = 1
        While Not WS.Range("A" & i).Value = ""
            'MsgBox " " & i
            i = i + 1
            Sheets("questions").Copy After:=Sheets(ThisWorkbook.Sheets.Count)
     
            'ActiveSheet.Name = "Sem " & i     
     
        Wend
     
    End Sub
    En gros : je met en variable ton feuillet de départ, et je ne touche plus à cette variable(dim et set). Je retire alors le select, et je le remplace par mon WS. avant le range : je suis alors sur de toujours lire le range du bon feuillet.

  8. #8
    Membre averti
    Inscrit en
    Janvier 2007
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 35
    Par défaut
    Bonjour,

    effectivement je changeais de feuille active du coup la valeur de ma boucle était modifiée. il me reste a trouver la solution pour copier un onglet en le renommant sans perdre le positionnement sur ma page active. merci pour ton aide

  9. #9
    Expert confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    6 814
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 6 814
    Par défaut
    Je viens de retrouver un vieux code ou je fais ça. ça ressemble à :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
            Dim nWS as Worksheet
     
            Set nWS = Sheets.Add
            nWS.Move after:=Sheets(Sheets.Count)
            nWS.Name = "Blablabla"
    le move after me le place en dernier.

    Evidemment, ça ne le remplit pas, ça le créée juste avec un nom. Donc il faut copier tout ce dont tu as besoin :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
        WS.Cells.Copy
        nWS.Cells.Paste
    (pas testé, ça doit être dans ce genre)

  10. #10
    Membre averti
    Inscrit en
    Janvier 2007
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 35
    Par défaut
    merci à tous ca fonctionne nickel je peux continuer mon développement...

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

Discussions similaires

  1. Génération et archivation automatique d'un rapport
    Par kfmystik dans le forum Deski
    Réponses: 5
    Dernier message: 10/10/2008, 09h26
  2. Génération des cubes automatiques
    Par Angeldu74 dans le forum Cognos
    Réponses: 3
    Dernier message: 23/05/2008, 14h50
  3. génération jointure en automatique
    Par stephyugh dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 12/12/2007, 21h21
  4. Génération de sommaire automatique
    Par louroulou dans le forum Webdesign & Ergonomie
    Réponses: 2
    Dernier message: 15/07/2007, 18h32
  5. Génération de maillage automatique minimisant les triangles
    Par Akta3d dans le forum Algorithmes et structures de données
    Réponses: 9
    Dernier message: 13/09/2005, 19h53

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