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 nouvelle feuille avec un nom variable.


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Webmarketer
    Inscrit en
    Mars 2017
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmarketer
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2017
    Messages : 10
    Par défaut Créer une nouvelle feuille avec un nom variable.
    Bonjour,

    L'objectif de ma macro est de créer une nouvelle feuille avec un nom variable. (sortie d'un tableau).
    Ensuite télécharger une data base sous forme CSV et l'incorporer dans cette feuille.

    ET faire cette procédure 38 fois. (38 nom differents et 38 adresses HTTP differentes)

    Voici une première ébauche. Quand je lance la procédure la première boucle fonctionne mais quand elle recomence, la procédure crée la feuille mais ce bloque lorsqu'il faut mettre le nom :

    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
     
     
    Sub bouclecharge()
     
    Dim i As Integer
     
        For i = 1 To 38 Step 1
        Dim l As Integer
        Dim page As Object
        Dim text As Object
        Dim ConnString As String
     
    Set page = Cells(i, 10)
    Set text = Cells(i, 11)
    Set shpp = Sheets.Add(After:=Sheets(Sheets.count))
     
        shpp.Name = page  ' c'est ici que ce bloque la procédure : "Erreur définie par l'application ou par l'objet
     
        Sheets("MENU").Select
     
    ConnString = text
    Sheets(Sheets.count).Select
        With ActiveSheet.QueryTables.Add(Connection:=ConnString, Destination:=Range("A1"))
            .Name = _
            " "
            .FieldNames = True 
            .RowNumbers = False
            .FillAdjacentFormulas = False
            .PreserveFormatting = True
            .RefreshOnFileOpen = False
            .RefreshStyle = xlInsertDeleteCells
            .SavePassword = False
            .SaveData = True
            .AdjustColumnWidth = False
            .RefreshPeriod = 0
            .TextFilePromptOnRefresh = False
            .TextFilePlatform = 775
            .TextFileStartRow = 1
            .TextFileParseType = xlDelimited
            .TextFileTextQualifier = xlTextQualifierDoubleQuote
            .TextFileConsecutiveDelimiter = False
            .TextFileTabDelimiter = True
            .TextFileSemicolonDelimiter = False
            .TextFileCommaDelimiter = True
            .TextFileSpaceDelimiter = False
            .TextFileColumnDataTypes = Array(1)
            .TextFileDecimalSeparator = ","
            .TextFileTrailingMinusNumbers = True
            .Refresh BackgroundQuery:=False
            End With
            Rows("1:1").Select
        Selection.Delete Shift:=xlUp
        Rows("2:3").Select
        Selection.Delete Shift:=xlUp[ATTACH]316865[/ATTACH]
     
        Next i
    End Sub
    En pièce jointe le fichier en question.

    Merci de m'aider

  2. #2
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 974
    Par défaut
    Bonsoir
    je suis pas expert mais je crois que tu doit modifier ça :
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim textos As Object
    ....
    Set textos = Cells(i, 11)

  3. #3
    Membre habitué
    Homme Profil pro
    Webmarketer
    Inscrit en
    Mars 2017
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmarketer
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2017
    Messages : 10
    Par défaut
    BENNASR,

    Désolé mais ça ne marche pas. A mon avis le problème viens d'une mauvaise définition des variables.

    Mais merci de votre réponse.

  4. #4
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut
    Bonjour,

    c'est pourtant simple comme dit le p"tit gars de chez Renault ‼
    Sur la ligne qui bloque, placer le curseur du texte sur Name puis appuyer sur la touche !

    Rien qu'en lisant l'aide quant au type de donnée attendu par cette propriété Name, certainement pas un objet ‼

    ___________________________________________________________________________________________________________
    Je suis Paris, Barcelone, London, Manchester, Egypte, Stockholm, Istanbul, Berlin, Nice, Bruxelles, Charlie, …

  5. #5
    Membre habitué
    Homme Profil pro
    Webmarketer
    Inscrit en
    Mars 2017
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmarketer
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2017
    Messages : 10
    Par défaut
    Bonjour Marc-l,

    Suite à votre message j'ai appliqué votre conseil.
    Mais j'arrive toujours au même point.
    La première boucle fonctionne, mais la deuxième me fais défault au même endroit.
    J'ai remplacé as object par as string.
    Mais ce que je n'arrive pas à comprendre c'est pourquoi la première boucle fonctionne et pas la deuxème...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    Dim i As Integer
     
        For i = 1 To 38
     
        Dim pp As String
        Dim te As String
        Dim ConnString As String
    "i" est bien égale à 2 quand la deuxème boucle s'enclanche
    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
     
    pp = Cells(i, 10) 
    te = Cells(i, 11)
     
    Set shpp = Sheets.Add(After:=Sheets(Sheets.count))
     
        shpp.Name = pp
     
        Sheets("MENU").Select
     
    ConnString = te
    Sheets(Sheets.count).Select
        With ActiveSheet.QueryTables.Add(Connection:=ConnString, Destination:=Range("A1"))
     
     
            .Name = _
            " "
            .FieldNames = True
            .RowNumbers = False
            .FillAdjacentFormulas = False
            .PreserveFormatting = True
            .RefreshOnFileOpen = False
            .RefreshStyle = xlInsertDeleteCells
            .SavePassword = False
            .SaveData = True
            .AdjustColumnWidth = False
            .RefreshPeriod = 0
            .TextFilePromptOnRefresh = False
            .TextFilePlatform = 775
            .TextFileStartRow = 1
            .TextFileParseType = xlDelimited
            .TextFileTextQualifier = xlTextQualifierDoubleQuote
            .TextFileConsecutiveDelimiter = False
            .TextFileTabDelimiter = True
            .TextFileSemicolonDelimiter = False
            .TextFileCommaDelimiter = True
            .TextFileSpaceDelimiter = False
            .TextFileColumnDataTypes = Array(1)
            .TextFileDecimalSeparator = ","
            .TextFileTrailingMinusNumbers = True
            .Refresh BackgroundQuery:=False
            End With
            Rows("1:1").Select
        Selection.Delete Shift:=xlUp
        Rows("2:3").Select
        Selection.Delete Shift:=xlUp
     
        Next i
    End Sub
    Deux ricard c'est toujours mieux qu'un

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    242
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 242
    Par défaut
    Bonjour,

    As tu essayé de nommer manuellement un onglet avec le contenu de ta colonne J ? Si déjà ça coince...

    Autre possibilité (la plus probable, au vu de ton code) : lorsque tu fais
    Set page = Cells(i, 10)
    , es-tu sûr que tu pointes sur la bonne feuille ? car tu boucles 38 fois et tu changes au moins autant de fois de feuille active... ==> identifie au préalable la feuille qui contient tes noms de page, puis :
    Set maFeuille = ...
    For i = 1 To 38 Step 1
    Set page = maFeuille.Cells(i, 10)
    (Et au passage déplace tes Dim avant la boucle en typant plus précisément tes variables, par exemple plutôt Range que Object...)

    De manière générale, il faut être le plus explicite possible dans l'identification des objets (penser à rajouter Option Explicit et éviter autant que possible les Select, les ActiveSheet, ...)

    Autre remarque : si ta variable page n'est utilisée que pour récupérer le texte qu'elle contient, autant la définir en type String et du coup virer le Set quand tu lui affecte une valeur, voire, si elle n'est utilisée qu'une fois, nommer directement ton onglet avec le contenu de la cellule sans passer par une variable intermédiaire.

  7. #7
    Membre habitué
    Homme Profil pro
    Webmarketer
    Inscrit en
    Mars 2017
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmarketer
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2017
    Messages : 10
    Par défaut
    Bonjour zenpbb,

    C'est avec une immense joie que je te dis que tu viens de résoudre mon problème.

    je n'aurais jamais pensé que se soit cela car, si on se réfère à la premère boucle, le chemin d'accès était tout tracé. Voici le code qui fonctionne :

    En éspérent que des personnent en auront besoins.

    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
     
    Sub bouclecharge()
     
        Dim i As Integer
        Dim pp As String
        Dim te As String
        Dim ConnString As String
        Set dataBase = Sheets("MENU")
     
        For i = 1 To 38
     
     
    pp = dataBase.Cells(i, 10)
    te = dataBase.Cells(i, 11)
    Set shpp = Sheets.Add(After:=Sheets(Sheets.count))
     
        shpp.Name = pp
     
        Sheets("MENU").Select
     
    ConnString = te
    Sheets(Sheets.count).Select
        With ActiveSheet.QueryTables.Add(Connection:=ConnString, Destination:=Range("A1"))
            .Name = _
            " "
            .FieldNames = True
            .RowNumbers = False
            .FillAdjacentFormulas = False
            .PreserveFormatting = True
            .RefreshOnFileOpen = False
            .RefreshStyle = xlInsertDeleteCells
            .SavePassword = False
            .SaveData = True
            .AdjustColumnWidth = False
            .RefreshPeriod = 0
            .TextFilePromptOnRefresh = False
            .TextFilePlatform = 775
            .TextFileStartRow = 1
            .TextFileParseType = xlDelimited
            .TextFileTextQualifier = xlTextQualifierDoubleQuote
            .TextFileConsecutiveDelimiter = False
            .TextFileTabDelimiter = True
            .TextFileSemicolonDelimiter = False
            .TextFileCommaDelimiter = True
            .TextFileSpaceDelimiter = False
            .TextFileColumnDataTypes = Array(1)
            .TextFileDecimalSeparator = ","
            .TextFileTrailingMinusNumbers = True
            .Refresh BackgroundQuery:=False
            End With
            Rows("1:1").Select
        Selection.Delete Shift:=xlUp
        Rows("2:3").Select
        Selection.Delete Shift:=xlUp
     
        Next i
    End Sub
    Voicie le fichier en PJ , réutilisable
    Problème résolue !

    exemple2 resolu.xlsm
    2 ricard c'est toujours mieux que 1

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

Discussions similaires

  1. Appeler une feuille avec un nom variable
    Par sophie123 dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 26/09/2017, 14h28
  2. Créer une nouvelle feuille avec le nom de la cellule active
    Par edynatal dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 26/01/2017, 09h57
  3. Réponses: 4
    Dernier message: 13/06/2014, 11h37
  4. Réponses: 1
    Dernier message: 22/11/2006, 20h49
  5. [JTable] Créer une JTable vide avec des noms de colonnes.
    Par Cyborg289 dans le forum Composants
    Réponses: 2
    Dernier message: 27/09/2005, 15h54

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