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 :

Nom feuille excel dans une cellule


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Enseignant
    Inscrit en
    Septembre 2015
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Septembre 2015
    Messages : 23
    Par défaut Nom feuille excel dans une cellule
    Bonjour,

    j'ai un petit souci:
    J'ai des onglets avec des tableaux avec des nombres de lignes variables.
    Je voudrais récupérer toute les lignes de chaque tableau sur une même feuille(Ca c'est bon ca marche) [B]avec devant chaque ligne indiquer le nom de l'onglet lui correspondant (ca je n'y arrive pas)
    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
    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
    Sub ConcatenationFeuilles()
     
     
    Dim i As Long, T() As Variant
     
     Sheets.Add After:=Sheets(Sheets.Count)
        ActiveSheet.Name = "TOTAL"
     
     
     
        ' Copie En-Tête
            For i = 1 To Worksheets.Count
            If Worksheets(i).Name <> "TOTAL" Then
                With Worksheets(i)
                    T = .Range("a1:ah1").Value
                    Sheets("TOTAL").Range("b1").Resize(UBound(T, 1), UBound(T, 2)) = T
                End With
                Exit For
            End If
        Next i
     
     
        '   Copie des données
        For i = 1 To Worksheets.Count
            If Worksheets(i).Name <> Sheets("TOTAL").Name Then
                With Worksheets(i)
                 Sheets("TOTAL").Range("a:a").Value = Worksheets(i).Name (LA EST MON PROBLEME)
                    T = .Range("a2:AH" & .Range("a" & Rows.Count).End(xlUp).Row).Value
                    Sheets("TOTAL").Range("b" & Rows.Count).End(xlUp).Offset(1).Resize(UBound(T, 1), UBound(T, 2)) = T
     
     
     
                End With
            End If
        Next i
        Erase T
     
        Application.ScreenUpdating = True
     
     
    End Sub
    merci d'avance

  2. #2
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    Bonjour,
    il ce passe quoi avec cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("TOTAL").Range("a:a").Value = Worksheets(i).Name (LA EST MON PROBLEME)
    je ne vois pas ou tu limite l'écriture de ton nom à la ligne en cours de ton fichier excel...

  3. #3
    Membre averti
    Femme Profil pro
    Enseignant
    Inscrit en
    Septembre 2015
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Septembre 2015
    Messages : 23
    Par défaut
    RE bonjour,

    avec cette ligne, ca copie le nom du dernier onglet sur toute les lignes. Alors que je voudrais que sur chaque ligne ca soit le nom de l'onglet correspondant (nom onglet 1 pour les 4 premières lignes, nom du deuxième pour les 3 suivantes...;exemple)

    merci

  4. #4
    Membre chevronné Avatar de pasdechances
    Homme Profil pro
    Alternant, Ingénieur en systèmes Informatiques et Industriels
    Inscrit en
    Septembre 2015
    Messages
    218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Alternant, Ingénieur en systèmes Informatiques et Industriels
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Septembre 2015
    Messages : 218
    Par défaut
    Bonjour,
    quand tu nous met du code.
    Ensuite,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("TOTAL").Range("a:a").Value = Worksheets(i).Name (LA EST MON PROBLEME)
    regarde bien la fonction range, tu l'appele sur tout une colonne, ici c'est la colonne A.

    et vu que tu a mit le "whit Worksheets(i)" tu peut t'en passer pour tout le reste :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("TOTAL").Range("a:a").Value = .Name (LA EST MON PROBLEME)
    Quand tu copie le tableau, tu peut copier ligne par ligne comme ça tu écrit en même temps le nom de la page :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    dim ws as worksheet
    for each ws in thisworkbook.worksheets
        if ws.name <> "TOTAL" then
            Sheets("TOTAL").cells(ligne,colonne) = ws.name
            Sheets("TOTAL").cells(ligne,colonne +1) = ws.cells(y,x)
        end if
    next ws
    c'est un exemple, mais sa simplifiera déjà un peut ton code, c'est un avis personnel, mais je le trouve assez lourd a lire et sans les balises, c'est pires xD.

  5. #5
    Membre chevronné Avatar de pasdechances
    Homme Profil pro
    Alternant, Ingénieur en systèmes Informatiques et Industriels
    Inscrit en
    Septembre 2015
    Messages
    218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Alternant, Ingénieur en systèmes Informatiques et Industriels
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Septembre 2015
    Messages : 218
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    dim ws as worksheet
    for each ws in thisworkbook.worksheets
        if ws.name <> "TOTAL" then
    'ici tu débute une boucle et tu balance =D
            while ws.cells(y,x) <> ""
                Sheets("TOTAL").cells(ligne,colonne) = ws.name
    'si besoin tu rajoute une boucle pour les colonnes
                Sheets("TOTAL").cells(ligne + i,colonne +1) = ws.cells(y,x)
                y = y+1
                i=i+1
            wend
    'fin de boucle
        end if
    next ws
    bah avec ce passage tu peut dosé l'écriture.
    Il faut juste ajouter une boucle pour la lecture du tableau

  6. #6
    Membre averti
    Femme Profil pro
    Enseignant
    Inscrit en
    Septembre 2015
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Septembre 2015
    Messages : 23
    Par défaut
    merci de votre retour,

    le code bloque a ce niveau:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     While ws.Cells(y, x) <> ""
    et m'indique variable non défini.

    Désolée, si je ne comprends pas vite!!!!

  7. #7
    Membre chevronné Avatar de pasdechances
    Homme Profil pro
    Alternant, Ingénieur en systèmes Informatiques et Industriels
    Inscrit en
    Septembre 2015
    Messages
    218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Alternant, Ingénieur en systèmes Informatiques et Industriels
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Septembre 2015
    Messages : 218
    Par défaut
    ne t'inquiète pas,
    Alors
    1. c'est ma faute
    2. c'est normal dimensionne x et y

    j'ai mis des variable au pif ^^', après c'est a toi de dire a quoi elle correspondent.
    la les variable sont surement vides.
    je vais te fournir un morceau de code plus détaillé

  8. #8
    Membre averti
    Femme Profil pro
    Enseignant
    Inscrit en
    Septembre 2015
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Septembre 2015
    Messages : 23
    Par défaut
    2. c'est normal dimentionne x et y
    oui je comprends bien mais comment??

  9. #9
    Membre chevronné Avatar de pasdechances
    Homme Profil pro
    Alternant, Ingénieur en systèmes Informatiques et Industriels
    Inscrit en
    Septembre 2015
    Messages
    218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Alternant, Ingénieur en systèmes Informatiques et Industriels
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Septembre 2015
    Messages : 218
    Par défaut
    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
    dim ws as worksheet
    dim x as integer
    dim y as integer
    dim ligne as integer
    dim colonne as integer
     
    'tu devra remplacer par des valeurs qui te conviennent
    x = 1
    y = 1
    ligne = 1
    colonne = 1
     
    for each ws in thisworkbook.worksheets
        if ws.name <> "TOTAL" then
    'ici tu débute une boucle sur le tableau que tu veu copier
            while ws.cells(y,x) <> ""  'je suis sur la celule A1 = cells(1,1) puisque x = 1 et y = 1
     
    'j'inscrit le nom de l'onglet dans la feuille total sur la celule 
                Sheets("TOTAL").cells(ligne,colonne) = ws.name
     
    'ici j'écrit se qu'il se trouve dans la celule A1 de la feuille lambda sur la feuille totale en A2(ligne = 1 et colonne = 1+1 = 2)
                Sheets("TOTAL").cells(ligne,colonne +1) = ws.cells(y,x)
     
    'j'incrémente la variable des lignes
                ligne = ligne +1
                y = y+1
            wend
    'fin de boucle
        end if
    next ws

  10. #10
    Membre Expert
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Par défaut
    Bonjour juliette81, pasdechances,

    Sauf erreur de ma part, les variables ne sont pas initialisé au préalable. Ainsi si tu cherches la cellule à la 0-ième ligne et 0-ième colonne, ça ne va pas fonctionner !
    Je te propose ainsi de seter les variables en amont :
    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
    Sub test()
    Dim ws As Worksheet
    Dim x As Integer, y As Integer
    Dim ligne As Integer, colonne As Integer
     
    ligne = 1
    colonne = 1
     
    For Each ws In Worksheets
        If ws.Name <> "TOTAL" Then
    'ici tu débute une boucle et tu balance =D
            y = 1
            x = 1
            While ws.Cells(y, x) <> ""
                Sheets("TOTAL").Cells(ligne, colonne) = ws.Name
    'si besoin tu rajoute une boucle pour les colonnes
                Sheets("TOTAL").Cells(ligne + i, colonne + 1) = ws.Cells(y, x)
                y = y + 1
                i = i + 1
            Wend
    'fin de boucle
        End If
    Next ws
    End Sub
    Par ailleurs, pasdechances, je te propose de tester tes codes avant des les envoyer. Il me semble que ce que tu postes ait été écrit à la volée.
    De plus, je ne comprends pas bien l'objectif de ce bout de code ?!

    L'objectif est-il de recopier entièrement des feuilles ?!
    On lit en diagonale ?!
    Je ne comprends pas tout !

    Cordialement,
    Kimy

  11. #11
    Membre chevronné Avatar de pasdechances
    Homme Profil pro
    Alternant, Ingénieur en systèmes Informatiques et Industriels
    Inscrit en
    Septembre 2015
    Messages
    218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Alternant, Ingénieur en systèmes Informatiques et Industriels
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Septembre 2015
    Messages : 218
    Par défaut
    Citation Envoyé par Kimy_Ire Voir le message
    Par ailleurs, pasdechances, je te propose de tester tes codes avant des les envoyer. Il me semble que ce que tu postes ait été écrit à la volée.
    De plus, je ne comprends pas bien l'objectif de ce bout de code ?!

    L'objectif est-il de recopier entièrement des feuilles ?!
    On lit en diagonale ?!
    Je ne comprends pas tout !

    Cordialement,
    Kimy
    il se trouve que je parle de morceau de code, j’entends donc que la personne doit l'adapter, cela comprend aussi l’intégration des variables.
    et certes je ne test pas forcement mon code, premièrement je ne suis pas la pour faire leur travail, deuxièmement je leur fournis un algorithme.
    a quoi bon leurs fournirent une fonction toute belle toute prête si l'utilisateur ne la comprend pas,
    on est ici pour apprendre il me semble.

    et oui il s’agit de faire du copier coller, en sachant qu'il faut garder la trace de l'onglet source pour chaque ligne copier.

Discussions similaires

  1. MACRO de copie d'une feuille dont le nom est contenu dans une cellule
    Par youssy dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 04/03/2015, 14h33
  2. MACRO de copie d'une feuille dont le nom est contenu dans une cellule
    Par youssy dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 01/03/2015, 19h39
  3. [XL-2007] Sélectionner une feuille dont le nom est contenu dans une cellule
    Par Nonno 94 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 30/06/2014, 20h47
  4. Réponses: 4
    Dernier message: 27/08/2013, 19h21
  5. [VB6]PB d'importation d'un feuille Excel dans une MSFlexGrid
    Par mystere l dans le forum VB 6 et antérieur
    Réponses: 18
    Dernier message: 20/04/2004, 15h59

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