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 :

Créer une liste à partir des noms des feuilles


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Inscrit en
    Mai 2008
    Messages
    195
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Mai 2008
    Messages : 195
    Points : 82
    Points
    82
    Par défaut Créer une liste à partir des noms des feuilles
    Bonjour à tous,

    Dans le cadre d'un projet, j'aurai besoins de deux "fonctions":

    - La première serait de pouvoir afficher à l'aide d'une macro toutes les feuilles du classeur avec le nom qu'on leur a donné.

    - La seconde serait de prendre des informations sur certaines de ces feuilles, par exemple, le contenu de la cellule A1, sa coloration... et de les afficher dans une autre feuille.

    Je pense être en mesure de faire cela, mais ce qui m'embête c'est que certains classeurs contiennent beaucoup de feuilles... et de catégories différentes.

    Y'a t il un moyen de prendre des données dans telle ou telle case en fonction de la première ou des deux premières lettres du nom de la feuille?

    Par exemple:
    Toutes les feuilles dont le nom commence par AZ: prendre donnée case A1
    Toutes les feuilles dont le nom commence par ER: prendre donnée A2:B3
    ...

    Merci d'avance pour votre aide

  2. #2
    Expert éminent
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Points : 7 964
    Points
    7 964
    Par défaut
    Bonjour,

    Un petit exemple pour parcourir toutes les feuilles d'un classeur et effectuer une action selon que le nom de chaque feuille commence par "AZ" ou "ER"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub test()
    Dim i As Integer
     
    For i = 1 To Sheets.Count
        Select Case Left(Sheets(i).Name, 2)
            Case "AZ"
                Sheets(i).Range("A1").Interior.ColorIndex = 6
            Case "ER"
                Sheets(i).Range("A2:B3").Interior.ColorIndex = 6
        End Select
    Next
    End Sub

  3. #3
    Membre régulier
    Inscrit en
    Mai 2008
    Messages
    195
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Mai 2008
    Messages : 195
    Points : 82
    Points
    82
    Par défaut


    Merci pour vos réponses!

    Aie une truc avec des i et des j... j'ai jamais rien compris à sa!

    ok je vois comment sa marche.

    En fait, je voudrais créer un tableau sur une autre page, qui prendrai des informations sur les feuilles AZ et ER (par exemple).

    Voila ce que j'utiliserai:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("A1").Value = Worksheets("Feuil1").Range("A1").Value
    Par contre sa risque d'être long de faire sa en manuel si sa monte à x feuilles...

    Je vois à quoi pourrai me servir la macro que tu as écrit,

    Elle me premettrai de faire cette action:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("A1").Value = Worksheets("Feuil1").Range("A1").Value
    Mais en écrivant une ligne après l'autre (A1, A2, A3....) afin de construire le tableau.

    Les i et les j doivent le faire, mais c'est trop abstrait pour moi

    Ah oui, en plus de la velur j'aimerai prendre les propriétés de la cellule mais sa ne marche pas:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Range("A1").Value = Worksheets("Feuil1").Range("A1").Value
    Range("A1").Font = Worksheets("Feuil1").Range("A1").Font
    Range("A1").Interior.Color = Worksheets("Feuil1").Range("A1").Interior.Color
    La première avec value fonctionne, les autres font ^planter ma macro

  4. #4
    Membre éprouvé
    Avatar de JackOuYA
    Inscrit en
    Juin 2008
    Messages
    1 040
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 1 040
    Points : 1 191
    Points
    1 191
    Par défaut
    bonjour,


    pour ta 3° ligne (couleur), il n'y as à priori aucune raison que cela ne marche pas .. pour ta 2° Font est un objet tu ne peu pas le copier comme cela.

  5. #5
    Expert éminent
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Points : 7 964
    Points
    7 964
    Par défaut
    En utilisant Copy (sans paramètre complémentaire), tu prendras la valeur et la mise en forme, il suffit d'adapter l'exemple que je t'avais fait
    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
    Sub test()
    Dim i As Integer
     
    'on parcoure toutes les feuilles, de la première (1) à la dernière (Sheets.Count)
    For i = 1 To Sheets.Count
        'on prend les deux premières lettres du nom de la feuille
        Select Case Left(Sheets(i).Name, 2)
            'si les deux premières lettres = AZ
            Case "AZ"
                'on copie la cellule A1 sur la première ligne vide de la colonne A de la feuille "Feuil1"
                Sheets(i).Range("A1").Copy Sheets("Feuil1").Range("A65535").End(xlUp)(2)
            'si les deux premières lettres = ER
            Case "ER"
                'on copie la plage A2:B3 sur la première ligne vide de la colonne A de la feuille "Feuil1"
                Sheets(i).Range("A2:B3").Copy Sheets("Feuil1").Range("A65535").End(xlUp)(2)
        End Select
    Next
    End Sub

  6. #6
    Membre régulier
    Inscrit en
    Mai 2008
    Messages
    195
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Mai 2008
    Messages : 195
    Points : 82
    Points
    82
    Par défaut
    Merci pour vos réponses

    Oui je me doutais bien que tu m'avais donné une grande partie de la réponse dans ta première réponse.

    Mais les codes en i et j me mettent mal à l'aise

    Dans tous les cas, grand merci

  7. #7
    Expert éminent
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Points : 7 964
    Points
    7 964
    Par défaut
    Que ce soit i, j, k, x, z ou toto...c'est une variable que l'on va utiliser dans une boucle pour parcourir toutes les feuilles, supposons que ton classeur comporte 4 feuilles, For i = 1 to Sheets.Count --> Sheets.Count = 4 --> donc cela revient à dire For i = 1 to 4 --> à chaque passage de la boucle la variable i va successivement prendre la valeur 1, 2, 3 et 4 --> Sheets(i) sera donc successivement Sheets(1), Sheets(2), Sheets(3) et Sheets(4)

    Fais ce petit test
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub test_boucle()
    Dim i As Integer
     
    For i = 1 To Sheets.Count
         MsgBox "la valeur de i est : " & i _
         & Chr(10) & Chr(10) _
         & "on passe donc en revue la feuille Sheets(" & i & ")" _
         & Chr(10) _
         & "qui correspond à la feuille : " & Sheets(i).Name
    Next
    End Sub
    Pour plus d'infos sur les boucles, étudie le tuto ci-dessous
    La gestion des boucles dans Excel
    .

  8. #8
    Membre régulier
    Inscrit en
    Mai 2008
    Messages
    195
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Mai 2008
    Messages : 195
    Points : 82
    Points
    82
    Par défaut
    J'ai besoin d'un dernier petit coup de main

    La macro fonctionne nikel pour tout ce qui est copier des formules, par contre, je pompe des infos dans certaines cases et j'obtiens un #REF car la macro copie la formule.

    Que faut il mettre pour faire un collage spécial "valeur"

    Je pense que c'est sa:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Selection.PasteSpecial Paste:=xlPasteValues
    Mais quand je l'intégre dans la macro sa ne fonctionne pas

  9. #9
    Expert éminent
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Points : 7 964
    Points
    7 964
    Par défaut
    Oui c'est vrai, je n'avais pas songé que tes cellules pouvaient contenir une formule, dans ce cas la copie simple prend en compte la formule et pas la valeur.
    Si tu veux copier la valeur et le format (comme précisé dans un message précédent), tu peux faire ceci :
    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
    Sub test()
    Dim i As Integer
     
    'on parcoure toutes les feuilles, de la première (1) à la dernière (Sheets.Count)
    For i = 1 To Sheets.Count
        'on prend les deux premières lettres du nom de la feuille
        Select Case Left(Sheets(i).Name, 2)
            'si les deux premières lettres = AZ
            Case "AZ"
                'on copie la cellule A1 sur la première ligne vide de la colonne A de la feuille "Feuil1"
                Sheets(i).Range("A1").Copy
                With Sheets("Feuil1").Range("A65535").End(xlUp)(2)
                    .PasteSpecial xlPasteValues
                    .PasteSpecial xlPasteFormats
                End With
                Application.CutCopyMode = False
            'si les deux premières lettres = ER
            Case "ER"
                'on copie la plage A2:B3 sur la première ligne vide de la colonne A de la feuille "Feuil1"
                Sheets(i).Range("A2:B3").Copy
                With Sheets("Feuil1").Range("A65535").End(xlUp)(2)
                    .PasteSpecial xlPasteValues
                    .PasteSpecial xlPasteFormats
                End With
                Application.CutCopyMode = False
        End Select
    Next
    End Sub

  10. #10
    Membre régulier
    Inscrit en
    Mai 2008
    Messages
    195
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Mai 2008
    Messages : 195
    Points : 82
    Points
    82
    Par défaut
    merci pour votre réponse

  11. #11
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    Problème résolu?

    Bouton !

    Merci

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 16/02/2014, 16h07
  2. Créer une liste de contacts pour des tests
    Par Gaetch dans le forum Android
    Réponses: 1
    Dernier message: 11/02/2012, 16h37
  3. créer une variable pour chaque nom de feuille
    Par José Speret dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 24/09/2010, 22h55
  4. [Toutes versions] créer une liste à partir de fichier
    Par Rico75 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 17/03/2010, 19h01
  5. Réponses: 1
    Dernier message: 24/02/2007, 12h53

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