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 :

probleme avec workbook.name


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    cadre administratif
    Inscrit en
    Juin 2023
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : cadre administratif

    Informations forums :
    Inscription : Juin 2023
    Messages : 3
    Par défaut probleme avec workbook.name
    Bonjour à tous.
    Je viens de m'inscrire et j'ai chercher sans succès une réponse à mon problème.

    Je fait une macro de ventilation.

    Pour commencer je souhaite ouvrir le classeur à ventiler puis faire diverses manip et ensuite revenir sur ce classeur que je n'ai pas fermé.
    Je commence donc par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    chemin_import.Caption = Application.GetOpenFilename("Fichiers Excel (*.xl*), *.xl*")  '      attribue le choix à chemin_import
     Workbooks.Open Filename:=chemin_import.Caption  '                                                      ouvre le classeur choisi
          nom_fichier = ActiveWorkbook.Name               '                                                          attribue le nom du classeur à ventiler à la variable nom_fichier
    ensuite je voulais utiliser ma variable nom_fichier (variable publique) pour faire :
    workbooks(nom_fichier).activatel'ennui c'est que dès le départ ma variable nom_fichier ajoute un nombre à mon nom de fichier !!!

    lorsque je met une msgbox de controle juste sous ma troisième ligne : MsgBox ActiveWorkbook.Name & " _ " & chemin_import.Captionj'obtiens en résultat pour le fichier toto : toto _ toto1 (puis à chaque nouvelle tentative toto2, toto3 ect ...

    Je précise qu'a ce stade je n'ai encore créer aucune boucle ni aucune incrémentation.


    voici le code complet de la macro qui s’exécute lorsque je clique sur le premier bouton de mon userform :



    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
    Private Sub B_import_Click()   '    lance le choix du claseur a ventiler
     
     
        chemin_import.Caption = Application.GetOpenFilename("Fichiers Excel (*.xl*), *.xl*")  '  attribue le choix à chemin_import
     
     
       If Left(chemin_import.Caption, 4) <> "Faux" Then  ' vérifie qu'un nom de fichier a été choisi
     
          Workbooks.Open Filename:=chemin_import.Caption  '   ouvre le classeur choisi
          nom_fichier = ActiveWorkbook.Name               ' attribue le nom du classeur à ventiler à la variable nom_fichier
     
        MsgBox chemin_import.Caption & "////" & nom_fichier
     
          Workbooks(nom_fichier).Sheets(1).Activate     ' selectionne la premiere feuille du classeur
          Dim var_col As Integer
          Dim var_critere As String
     
          var_col = 1
     
     
     
          Do While Workbooks(nom_fichier).Sheets(1).Cells(2, var_col).Value <> ""      '    récupére tous les entete de colonnes
     
              CB_critere.AddItem Workbooks(nom_fichier).Sheets(1).Cells(2, var_col).Value   ' les ajoute à la combobox CB_critere.
     
              var_col = var_col + 1
     
          Loop
     
     
       End If
     
     
    End Sub

  2. #2
    Membre Expert
    Inscrit en
    Décembre 2002
    Messages
    993
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 993
    Par défaut
    Bonjour, une solution possible consiste à utiliser la fonction Left pour extraire le nom de fichier sans l’extension et le numéro qui est ajouté automatiquement . Vous pouvez utiliser la fonction InStr pour trouver la position du point dans le nom de fichier et ensuite utiliser la fonction Left pour extraire le nom de fichier sans l’extension et le numéro. Voici un exemple:

    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
    chemin_import.Caption = Application.GetOpenFilename("Fichiers Excel (*.xl*), *.xl*") ' attribue le choix à chemin_import
     
    If Left(chemin_import.Caption, 4) <> "Faux" Then ' vérifie qu'un nom de fichier a été choisi
     
        Workbooks.Open Filename:=chemin_import.Caption ' ouvre le classeur choisi
        Dim nom_fichier As String
        Dim pos_point As Integer
        Dim pos_espace As Integer
     
        pos_point = InStr(1, ActiveWorkbook.Name, ".")
        pos_espace = InStr(1, ActiveWorkbook.Name, " ")
     
        If pos_espace > 0 Then
            nom_fichier = Left(ActiveWorkbook.Name, pos_espace - 1)
        Else
            nom_fichier = Left(ActiveWorkbook.Name, pos_point - 1)
        End If
     
        MsgBox chemin_import.Caption & "////" & nom_fichier
     
    End If

  3. #3
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 186
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Quelle est le type de la variable objet chemin_import ?
    Pour moi, il suffirait simplement de définir une variable de type String pour récupérer le chemin et le nom du fichier que renvoie la méthode GetOpenFilename et ensuite d'utiliser une variable objet de type Workbook pour assigner l'objet que renvoie Workbooks.Open
    Sauf si vous ouvrez un classeur comme modèle, je ne vois pas la raison d'avoir une incrémentation de son nom

    Exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub t()
      Dim wkb As Workbook
      Dim FullName As String
      FullName = Application.GetOpenFilename("Fichiers Excel (*.xl*), *.xl*")
      Set wkb = Workbooks.Open(Filename:=FullName)
      MsgBox "Vous avez ouvert le classeur " & wkb.Name
      Set wkb = Nothing
    End Sub
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  4. #4
    Candidat au Club
    Homme Profil pro
    cadre administratif
    Inscrit en
    Juin 2023
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : cadre administratif

    Informations forums :
    Inscription : Juin 2023
    Messages : 3
    Par défaut
    Citation Envoyé par Philippe Tulliez Voir le message
    Bonjour,
    Quelle est le type de la variable objet chemin_import ?
    Pour moi, il suffirait simplement de définir une variable de type String pour récupérer le chemin et le nom du fichier que renvoie la méthode GetOpenFilename et ensuite d'utiliser une variable objet de type Workbook pour assigner l'objet que renvoie Workbooks.Open
    Sauf si vous ouvrez un classeur comme modèle, je ne vois pas la raison d'avoir une incrémentation de son nom

    Exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub t()
      Dim wkb As Workbook
      Dim FullName As String
      FullName = Application.GetOpenFilename("Fichiers Excel (*.xl*), *.xl*")
      Set wkb = Workbooks.Open(Filename:=FullName)
      MsgBox "Vous avez ouvert le classeur " & wkb.Name
      Set wkb = Nothing
    End Sub

    Merci pour votre réponse.
    J'ai déja essayé avec dim chemin as string mais sans résultat
    Lorsque j'utilise votre macro je trouve le même problème : wkb.name prend le nom du fichier plus un numéro d'orde : toto devient toto13
    J'avoue que c'est très étrange

    En fait je voulais justement créer un modèle.

    L'idée était
    1-ouvrir un classeur d'origine puis supprimer toutes les valeurs en gardant les formats, listes de validations et autres...
    2 -Enregistrer le résultat en modèle,
    3- revenir sur le classeur d'origine et faire une sélection (par exemple par code postal) et copier la sélection dans le modèle vide,
    4- Enregistrer le classeur obtenu sous le nom voulu (ex : toto_75001, toto75002....)
    5 - revenir sur le classeur d'origine et recommencer à partir de l'étape 3

    J'utilise déjà une macro de ventilation qui marchait très bien jusqu'à ce que mes collègues me réclament des listes de validation. Le problème c'est que lorsque l'on copie des classeurs avec listes de validation on obtient des références circulaires et des liens corrompus.

    La solution du modèle mes semblait simple et sure mais je n'avais pas anticipé les problèmes de noms de fichiers.
    Reste la solution d'ouvrir et fermer à chaque fois ou d'utiliser les numéro d'ordre des workbooks mais je n'aime pas trop car risque de plantage.

    Du coup j'aimerais bien comprendre pourquoi le woorkbook.name me donne cette bizarrerie.

    Bonne journée.

  5. #5
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 186
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    J'ai déja essayé avec dim chemin as string mais sans résultat
    Lorsque j'utilise votre macro je trouve le même problème : wkb.name prend le nom du fichier plus un numéro d'orde : toto devient toto13
    J'avoue que c'est très étrange
    C'est effectivement très étrange.
    Tous les codes que je publie sont testés et je peux vous affirmer que je ne rencontre pas le problème que vous évoquez.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 598
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 598
    Par défaut
    A tout hasard, est-ce que les fichiers choisis sont des fichiers excel classique ou des fichiers modèles (xltx/xltm)?

    L'ajout d'un numéro me fait penser à ce que qui se passe quand on créé des nouveaux fichiers excel à la suite qui se nomment classeur1, classeur2, etc)

  7. #7
    Candidat au Club
    Homme Profil pro
    cadre administratif
    Inscrit en
    Juin 2023
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : cadre administratif

    Informations forums :
    Inscription : Juin 2023
    Messages : 3
    Par défaut
    Citation Envoyé par Franc Voir le message
    Bonjour, une solution possible consiste à utiliser la fonction Left pour extraire le nom de fichier sans l’extension et le numéro qui est ajouté automatiquement . Vous pouvez utiliser la fonction InStr pour trouver la position du point dans le nom de fichier et ensuite utiliser la fonction Left pour extraire le nom de fichier sans l’extension et le numéro. Voici un exemple:

    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
    chemin_import.Caption = Application.GetOpenFilename("Fichiers Excel (*.xl*), *.xl*") ' attribue le choix à chemin_import
     
    If Left(chemin_import.Caption, 4) <> "Faux" Then ' vérifie qu'un nom de fichier a été choisi
     
        Workbooks.Open Filename:=chemin_import.Caption ' ouvre le classeur choisi
        Dim nom_fichier As String
        Dim pos_point As Integer
        Dim pos_espace As Integer
     
        pos_point = InStr(1, ActiveWorkbook.Name, ".")
        pos_espace = InStr(1, ActiveWorkbook.Name, " ")
     
        If pos_espace > 0 Then
            nom_fichier = Left(ActiveWorkbook.Name, pos_espace - 1)
        Else
            nom_fichier = Left(ActiveWorkbook.Name, pos_point - 1)
        End If
     
        MsgBox chemin_import.Caption & "////" & nom_fichier
     
    End If
    Merci pour votre réponse.
    Je pense que je vais utiliser votre idée. J'y avais pensé mais je pensais logique d'utiliser une propriété (workbook.name) qui est normalement destinée à éviter ce genre de manipulation.

    Par contre il ne faut pas utiliser les formules sur le workbook.name car on retombe sur le même problème.
    Je vais devoir utiliser le nom du chemin complet et isoler le nom qui se trouve après le dernier \

    En tout cas merci beaucoup !

Discussions similaires

  1. Probleme avec WorkBooks.Open et plateforme Excel 32/64 bits ?
    Par chachaboy dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 04/04/2020, 16h37
  2. Probleme avec un code .name
    Par kyros21 dans le forum Macros et VBA Excel
    Réponses: 17
    Dernier message: 13/01/2012, 12h21
  3. probleme avec VisualState x:Name="focused"
    Par lilibad dans le forum Windows Presentation Foundation
    Réponses: 6
    Dernier message: 05/09/2011, 17h46
  4. problem avec django_qbe "error Empty modul name"
    Par midialzer dans le forum Django
    Réponses: 0
    Dernier message: 12/01/2011, 15h49
  5. [VC++] probleme avec le Pipe Named
    Par ksoft dans le forum Visual C++
    Réponses: 2
    Dernier message: 21/07/2006, 19h34

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