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 :

Récupérer les noms des onglets sur une colonne


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2018
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2018
    Messages : 15
    Points : 11
    Points
    11
    Par défaut Récupérer les noms des onglets sur une colonne
    Bonjour,

    J'ai réalisé une petite macro de consolidation (une 20ène de fichier).

    Pour me faciliter la tâche, j'ai copié toutes les feuilles sur un même fichier.

    Je viens de terminer la macro de consolidation qui marche bien mais maintenant il me reste une chose à faire. Je dois rajouter une colonne (Q) dans laquelle la macro va indiquer le nom de l'onglet qui a fournit la donnée voici le code de base

    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
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
     
     
    ''
     
     
    'Déclaration des variables au niveau du Module
    Dim k As Integer, i As Integer
    Dim DerniereLigne As Integer
    Dim NomOnglet As String
    Dim LastRowConsolidation As Integer
    Dim LastRowConsolidation1 As Integer
    Dim LastRowConsolidation2 As Integer
    Dim LastRowConsolidation3 As Integer
    Dim LastRowConsolidation4 As Integer
    Dim LastRowConsolidation5 As Integer
    Dim LastRowConsolidation6 As Integer
    Dim LastRowConsolidation7 As Integer
    Dim LastRowConsolidation8 As Integer
     
     
     'Procédure permettant d'effacer les données de la consolidation afin d'éviter les doublons
     
    Sub Effacedonnees()
        'On se positionne sur la feuille Consolidation
        Worksheets("Consolidation").Select
        Range("C12: P155").Select
        Selection.Clear
        Range("B160: P234").Select
        Selection.Clear
        Range("B239: P420").Select
        Selection.Clear
        Range("B425: P516").Select
        Selection.Clear
        Range("B522: P598").Select
        Selection.Clear
        Range("B604: P684").Select
        Selection.Clear
        Range("B690:J738").Select
        Selection.Clear
        Range("B741:J777").Select
        Selection.Clear
        Range("B780: P830").Select
        Selection.Clear
     
    End Sub
     
    '***************************************************
    ' Procédure permettant d'effacer les données de la consolidation afin d'éviter les doublons
    '***************************************************
     
    Sub consolider()
     
    Application.ScreenUpdating = False
    Effacedonnees
     
    'Boucle permettant de lire toutes les feuilles à consolider
     
        k = Sheets.Count
        For i = 1 To k
        NomOnglet = Sheets(i).Name
     
     
        If Sheets(i).Name <> "Consolidation" Then
        Sheets(i).Activate
        Range("C12: P31").Select
        Selection.Copy
        Sheets("Consolidation").Select
        LastRowConsolidation = Range("C155").End(xlUp).Row + 1
        Cells(LastRowConsolidation, 3).Select
        ActiveSheet.Paste
        Range("Q" & LastRowConsolidation) = NomOnglet
     
        Application.CutCopyMode = False
     
       End If
       Next i
     
        Application.ScreenUpdating = True
     
     
    End Sub
    Pour le code, j'étais parti sur le code ci-dessous mais il n'indique le nom de l'onglet uniquement sur la dernière ligne pour chaque onglet.
    Comment puis-je faire pour que le code le marque sur l'ensemble de la selection à chaque fois ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     
     NomOnglet = Sheets(i).Name
     Range("Q" & LastRowConsolidation) = NomOnglet

    Je vous remercie par avance.

    Merci d'avance

  2. #2
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2018
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2018
    Messages : 15
    Points : 11
    Points
    11
    Par défaut
    En tatonant, j'ai trouvé que ce code fonctionne mais j'aimerrais arrêter le copié-collé à la ligne Q155 quelqu'un peut -il me dire ce qui bloque ?

    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
     
     
       k = Sheets.Count
        For i = 1 To k
        NomOnglet = Sheets(i).Name
     
     
        If Sheets(i).Name <> "Consolidation" Then
        Sheets(i).Activate
        Range("C12:P31").Select
        Selection.Copy
        Sheets("Consolidation").Select
        LastRowConsolidation = Range("C155").End(xlUp).Row + 1
        Cells(LastRowConsolidation, 3).Select
        ActiveSheet.Paste
        Range("Q" & LastRowConsolidation & ":Q" & ActiveSheet.UsedRange.Rows.Count) = NomOnglet

  3. #3
    Membre expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 267
    Points : 3 663
    Points
    3 663
    Par défaut
    Bonjour,

    Pourquoi "Q" & ":Q" ?
    Qu'on peut écrire plus simplement "Q:Q" d'ailleurs.
    Si tu veux la ref Qx c'est Q & x qu'il faut :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("Q" & ActiveSheet.UsedRange.Rows.Count) = NomOnglet
    D'autre part il faut éliminer les .Select inutiles.
    eric

  4. #4
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2018
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2018
    Messages : 15
    Points : 11
    Points
    11
    Par défaut
    Salut Éric,

    Merci pour ton retour, ce que je recherche,
    c’est le code qui va me permettre de copier dans la colonne Q, le nom des différents onglets ( a cause de la boucle) mais j’ai besoin que la macro arrête de copier coller les valeurs aux niveaux de la ligne qu’il a copié dans chaque onglet.
    Le problème c’est que là avec ce code la colonne Q rempli même sur les autres lignes vides.
    Merci beaucoup pour ton aide

  5. #5
    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 927
    Points
    55 927
    Billets dans le blog
    131
    Par défaut
    Salut.

    Perso, j'intégrerais les noms d'onglet après chaque copie d'onglet, plutôt que de créer x variables. Tu sais combien de lignes tu consolides par onglet et tu sais où tu commences, tu sais donc déterminer ta plage en Q pour y placer le nom de l'onglet
    "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...
    ---------------

  6. #6
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2018
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2018
    Messages : 15
    Points : 11
    Points
    11
    Par défaut
    Bonjour Pierre,

    Merci beaucoup pour ton retour rapide.

    Justement, je ne sais pas combien de lignes je consolide par classeur.

    En faite, tous les onglets ont la même structure mais sont remplis de manière très inégale d'où le fait que je demande à chaque fois d'aller chercher la dernière ligne vide.

    Le plus simple serait de pouvoir avoir le nombre de ligne qu'il a pris (row.count) et de rajouter une ligne où je demanderais de coller le nom de l'onglet sur worksheat en se basant sur le nombre qu'il a calculé. Mais je ne sais pas comment écrire le code sans changer ma variable LastRoWConsolisation.

Discussions similaires

  1. [VBA-E] Récupérer les noms des onglets
    Par a.dequidt dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 18/09/2007, 10h54
  2. Réponses: 5
    Dernier message: 11/07/2007, 16h03
  3. Réponses: 7
    Dernier message: 26/05/2007, 12h43
  4. récupérer les noms des champs d'une table access
    Par fabrice33 dans le forum Accès aux données
    Réponses: 2
    Dernier message: 06/04/2007, 19h38
  5. Ecrire les noms des fichiers dans une colonne
    Par REGIMBAL dans le forum Access
    Réponses: 1
    Dernier message: 20/04/2006, 11h29

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