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 :

inserer des nouvelles feuilles dans un classeur excel


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 39
    Points : 18
    Points
    18
    Par défaut inserer des nouvelles feuilles dans un classeur excel
    Bonjour a tous

    petite question :
    j ai un tableau avec disons 3 feuilles nommées "page1", "page2", "page3"
    mon but est d inserer apres chacune des feuilles, une nouvelle feuille, et de lui donner le meme nom que la feuille precedente suivie du suffixe "bis"
    pour obtenir in fine le classeur contenant les feuilles suivantes :
    "page1", "page1bis", "page2", "page2bis", "page3", "page3bis"

    voila mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Dim n As Integer, i  As Integer
    n = Sheets.Count
     
    For i = 1 To n
    Sheets.Add
    With Sheets.Add
    .Move After:=Sheets(i)
    .Name = Sheets(i).Name & "bis"
    End With
    Next i
    Evidemment rien ne marche il m insere 2 fois plus de feuilles et ne rprends pas les noms des anciennes.
    Damned !

    Comment sortir de l ornière ?

  2. #2
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 921
    Points
    55 921
    Billets dans le blog
    131
    Par défaut
    Bonjour

    Utilise une collection des feuilles existantes, puis tu itères sur ta collection. Le plus simple est d'utiliser des objets typés Worksheet

    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 AjoutFeuilles()
        Dim mCol As New Collection ' contiendra la collection de feuilles
        Dim Feuille As Worksheet ' Feuille source
        Dim FeuilleAjout As Worksheet ' Feuille Cible
     
        ' On crée la collection
        For Each Feuille In Worksheets 
            mCol.Add Feuille
        Next Feuille
     
        on itère sur les objets de la collection
        For Each Feuille In mCol
            Set FeuilleAjout = Worksheets.Add(after:=Feuille)
            FeuilleAjout.Name = Feuille.Name & "Bis" ' On renomme
        Next Feuille
    End Sub
    Cela te convient-il?
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 39
    Points : 18
    Points
    18
    Par défaut
    ca me convient tres bien !!

    merci beaucoup

    Juste une question par curiosité:
    Pourquoi passer par une collection car en n ecrivant que la derniere partie de ton code ca marche aussi
    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 AjoutFeuilles()
        'Dim mCol As New Collection ' je retire la collection
        Dim Feuille As Worksheet ' Feuille source
        Dim FeuilleAjout As Worksheet ' Feuille Cible
     
        ' je supprime cette partie
        'For Each Feuille In Worksheets 
            'mCol.Add Feuille
        'Next Feuille
     
        'je laisse que cette partie la 
        'For Each Feuille In mCol  en supprimant la mention de maCol
        For Each Feuille In Worksheets
            Set FeuilleAjout = Worksheets.Add(after:=Feuille)
            FeuilleAjout.Name = Feuille.Name & "Bis" ' On renomme
        Next Feuille
    End Sub
    y a t il un avantage a passer par une collection

  4. #4
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 921
    Points
    55 921
    Billets dans le blog
    131
    Par défaut
    Il semble que tu aies raison.

    Je passais par une collection explicite pour éviter de tourner en rond, et d'obtenir des feuil1Bis puis Feuil1BisBis, puis Feuil1BisBisBis, etc...

    Mais apparemment, la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    for each feuille in worksheets
    semble créer une collection implicite et la "figer", de sorte que les nouvelles feuilles créées ne sont pas reprises dans la boucle... Si tel est le cas, alors l'utilisation de la collection ne se justifie pas...

    Merci pour ce complément.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 39
    Points : 18
    Points
    18
    Par défaut
    Une derniere question avant de te souhaiter la bonne année

    j ai découvert les collection dans ton dernier code, alors je maitrise pas trop
    juste un exemple:

    Imaginons que je veuille maintenant effacer les feuilles que j ai inseré grace a ton code.
    Dans ce cas je pourrais créer une collection de feuille contenant toute les feuilles nouvellement crées et ensuite effacer d un bloc la collection

    J ai ecrit le code suivant en supposant que les nouvelles feuilles avaient toutes un index pair :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub efface()
     
    Dim Feuille As Worksheet, maColl As New Collection
     
    For Each Feuille In Worksheets
    If (Feuille.Index Mod 2) = 0 Then maColl.Add Feuille
    Next Feuille
     
    maColl.Delete
     
    End Sub
    Ca ne fonctionne pas !
    Qu est ce qui cloche à ton avis ?

  6. #6
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 921
    Points
    55 921
    Billets dans le blog
    131
    Par défaut
    Ce qui cloche, c'est que tu supprimes les feuilles à l'intérieur de la collection. En fait, tu vides la collection de ses items, mais tu ne supprimes pas les feuilles.

    Pour supprimer physiquement les feuilles, tu utiliseras
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    for each feuille in mcol
        feuille.Delete
    next feuille
    mcol.delete
    Ok?
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 39
    Points : 18
    Points
    18
    Par défaut
    Ok.

    Merci encore et bonnes fêtes.

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

Discussions similaires

  1. [AC-2003] Copier/Inserer une feuille dans un classeur Excel depuis ACCESS
    Par moilou2 dans le forum VBA Access
    Réponses: 1
    Dernier message: 25/08/2009, 14h45
  2. [C#] Créer une nouvelle feuille dans un classeur Excel
    Par amoiraud dans le forum Windows Forms
    Réponses: 4
    Dernier message: 12/03/2008, 08h53
  3. liaisons des feuilles dans un classeur excel
    Par ritonetmumu dans le forum Excel
    Réponses: 4
    Dernier message: 07/12/2007, 19h03
  4. VB6 : création de feuilles dans un classeur Excel
    Par getea85 dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 04/11/2005, 16h37
  5. Changer de feuille dans un classeur Excel
    Par couiss dans le forum API, COM et SDKs
    Réponses: 7
    Dernier message: 09/05/2005, 10h05

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