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 :

Problème de noms de fichiers


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Inscrit en
    Avril 2008
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 9
    Points : 7
    Points
    7
    Par défaut Problème de noms de fichiers
    Bonjour à tous,

    J'ai créé une macro qui dans un classeur A:

    Ouvre un nouveau classeur B
    Retourne sur A pour y copier des données
    Va sur B pour y coller les données
    Fait des tri ...
    Ouvre une boîte de dialogue pour l'enregistrement de B
    Puis retourne sur A.

    Voici le 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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    Sub Export_Modif()
    '
    ' Export_Modif Macro
    '
     
    '
        Sheets("Modif").Select
        Cells.Select
        Selection.Copy
        Workbooks.Add
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=True, Transpose:=False
     
        Windows("Spendvision V3.xlsm").Activate
        Sheets("New employee").Select
        Range("A2:AB5000").Select
        Selection.Copy
        Windows("Classeur1").Activate
        Range("A5001").Select
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
     
        Application.CutCopyMode = False
        ActiveWindow.DisplayZeros = False
        ActiveWorkbook.Worksheets("Feuil1").Sort.SortFields.Clear
        ActiveWorkbook.Worksheets("Feuil1").Sort.SortFields.Add Key:=Range("A2:A5000" _
            ), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
            xlSortTextAsNumbers
        With ActiveWorkbook.Worksheets("Feuil1").Sort
            .SetRange Range("A1:AE11000")
            .Header = xlYes
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
        Range("A2").Select
        ' Boite de dialogue Enregistrer sous
        Application.Dialogs(xlDialogSaveAs).Show
         Windows("Spendvision V3.xlsm").Activate
         Sheets("Spendvision").Select
        Range("A2").Select
        Sheets("Managers").Select
        Range("A2").Select
        Sheets("Emails").Select
        Range("A2").Select
        Sheets("Mouvements").Select
        Range("A2").Select
        Sheets("Results").Select
        Range("A18").Select
        Sheets("Modif").Select
        Range("A2").Select
        Sheets("New employee").Select
        Range("A2").Select
        Sheets("Mode opératoire").Select
        Range("A4").Select
     
    End Sub

    Tout marche bien sauf que lorsque je répète cette macro une seconde fois ça bug du fait que classeur A lors de sa création s'appelle classeur 1 la 1ère fois mais si on recommence cela devient classeur 2 puis 3 ...

    Comment contourner ce problème ?

    PS Je débute en VBA

    Merci de votre aide

  2. #2
    Invité
    Invité(e)
    Par défaut bonjour,
    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
    Sub Export_Modif()
    Dim Wb As Workbook
    Dim WbNew As Workbook
    Set Wb = ActiveWorkbook
     
     
    Set WbNew = Workbooks.Add
    Wb.Sheets("Modif").Cells.Copy
    WbNew.Sheets(1).Range("a1").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=True, Transpose:=False
     
    Wb.Sheets("New employee").Range("A2:AB5000").Copy
    WbNew.Sheets(1).Range("A5001").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
    WbNew.Activate
    Application.CutCopyMode = False
    ActiveWindow.DisplayZeros = False
    WbNew.Worksheets("Feuil1").Sort.SortFields.Clear
    WbNew.Worksheets("Feuil1").Sort.SortFields.Add Key:=Range("A2:A5000" _
    ), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
    xlSortTextAsNumbers
    With WbNew.Worksheets("Feuil1").Sort
    .SetRange Range("A1:AE11000")
    .Header = xlYes
    .MatchCase = False
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    .Apply
    End With
    WbNew.Worksheets("Feuil1").Range("A2").Select
    ' Boite de dialogue Enregistrer sous
     
    Application.Dialogs(xlDialogSaveAs).Show
    WbNew.Close False
    Wb.Activate
    For i = 1 To Wb.Sheets.Count
         Wb.Sheets(i).Select
         Wb.Sheets(i).Range("a1").Select
    Next
    Wb.Sheets(1).Select
     
     
    End Sub

  3. #3
    Membre éprouvé Avatar de defluc
    Homme Profil pro
    Architecte
    Inscrit en
    Mai 2002
    Messages
    1 383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 383
    Points : 1 199
    Points
    1 199
    Par défaut
    Bonjour,

    J'ai un certain nombre de remarques qui t'éviteront bien des problèmes.
    - 1. comme rabâché sur ce forum, évites les "Select"
    - 2. plus tôt que de faire référence nommément au classeur de départ, utilises "ActiveWorkbook" ou "ThisWorkbook" et fait un "Set" sur on objet Workbook.

    Modifies ton code en conséquence et reviens soit pour mettre le sujet en résolu, soit pour reposer une question sur ce qui poserait encore problème.

    P.S. : Veilles à mettre ton code entre les balises "code" pour qu'il soit indenté.

    Bon travail

  4. #4
    Expert éminent sénior
    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
    Points : 18 674
    Points
    18 674
    Par défaut

    Bonjour, bonjour,

    les balises de code ne font pas l'indentation car c'est un style d'écriture

    Mais elles sont utiles pour désigner une ligne de code par son numéro; et sans, je ne réponds pas !

    pour les autres remarques, un bon code est sans Select (sauf exception) …

  5. #5
    Futur Membre du Club
    Inscrit en
    Avril 2008
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 9
    Points : 7
    Points
    7
    Par défaut Merci à tous
    Merci de votre rapidité à répondre, tout marche bien maintenant.
    Merci pour vos conseils et particulièrement à Robert pour son code.
    Pour ce qui est des "Select" c'est ce qui est proposé par VBA lorsqu'on procède par enregistrement comme le néophite que je suis, mais je travaille à m'améliorer et j'apprends beaucoup grâce à vous tous.

  6. #6
    Invité
    Invité(e)
    Par défaut
    L’enregistreur de macro est un bon didacticiel mais effectivement mérite d'être optimisé au niveau du rendu définitif.

    lorsqu’un .select est suivi d'une selection. Tu peux fusionner les deux.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Range("A1").select
    selection.copy
     
    Range("A1").copy 'je fusionne les deux instuction en une.
    L’enregistreur note tes actions sans imaginer ce que tu vas en faire.

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

Discussions similaires

  1. Opendialog et problème récupération nom du fichier
    Par jeff_68 dans le forum Composants VCL
    Réponses: 3
    Dernier message: 22/07/2010, 17h03
  2. 2 problèmes de nom de fichier
    Par laurentSc dans le forum Langage
    Réponses: 11
    Dernier message: 14/07/2010, 11h49
  3. Problème de nom de fichier et question subsidiaire
    Par Smiff dans le forum Langage
    Réponses: 2
    Dernier message: 05/02/2008, 22h39
  4. Réponses: 2
    Dernier message: 19/12/2006, 18h37
  5. [DOM] Problème d'accent sur les noms de fichier avec mon parseur
    Par ujoodha dans le forum Format d'échange (XML, JSON...)
    Réponses: 3
    Dernier message: 06/04/2006, 21h55

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