1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    avril 2018
    Messages
    7
    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 : 7
    Points : 4
    Points
    4

    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
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    avril 2018
    Messages
    7
    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 : 7
    Points : 4
    Points
    4

    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 émérite
    Profil pro
    Inscrit en
    février 2007
    Messages
    1 487
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : février 2007
    Messages : 1 487
    Points : 2 352
    Points
    2 352

    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
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    avril 2018
    Messages
    7
    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 : 7
    Points : 4
    Points
    4

    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

    Avatar de Pierre Fauconnier
    Homme Profil pro
    Formateur et développeur informatique indépendant
    Inscrit en
    novembre 2003
    Messages
    11 844
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur informatique indépendant
    Secteur : Enseignement

    Informations forums :
    Inscription : novembre 2003
    Messages : 11 844
    Points : 31 186
    Points
    31 186
    Billets dans le blog
    33

    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)
    ---------------
    Vous souhaitez rédiger pour DVP? Contactez-moi
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  6. #6
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    avril 2018
    Messages
    7
    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 : 7
    Points : 4
    Points
    4

    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