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 :

VBA avec variables dans commande windows


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
    Commercial
    Inscrit en
    Juillet 2020
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Commercial

    Informations forums :
    Inscription : Juillet 2020
    Messages : 4
    Par défaut VBA avec variables dans commande windows
    Bonjour a tous

    J'essaie de simplifier ma version 2 d'un classeur excel d'analyse client que j'ai conçu il y a une paire d'années mais dont je devais transférer toutes les données fixes tous les mois d'un mois sur l'autre. C'était long et fastidieux
    J'ai donné aussi ce classeur a des collègues qui n'ont pas forcement la même arborescence de rangement que moi

    Pour faire simple; a chaque nouveau mois, j'ouvre mon classeur vierge que je renomme Analyse secteur 20-08 (pour le mois d’août) et je vais aller chercher des données dans le classeur du mois précédent soit pour exemple Analyse secteur 20-07

    Ces noms de classeurs avec les chemins sont écrit en texte dans 2 cellules de l'onglet données du classeur le plus récent

    Le problème est donc que dans la macro ci dessous, ces 2 noms sont intégrés dans la commande windows.

    Cela fait 2 jours entiers que je cherche partout un exemple sur le net comment mettre ces 2 noms en variable

    Le problème est que VB est un peu une langue très étrangère pour moi qui ne sait faire que enregistrer une macro
    Je sais aux vues des nombreuses réponses sur plein de sujets sur ce forum qu'il y a des experts toujours prêt a rendre service
    En tout cas je vous remercie par avance pour votre réponse

    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
    Sub ACT_1()
    '
    ' ACT_1 Macro
    '
    'Msgbox Ok + Annuler
     yourmsgbox = MsgBox("ATTENTION: A n'utiliser que pour remplir le tableau vierge", vbOKCancel, "Confirmation")
     
    If yourmsgbox = vbCancel Then
        Exit Sub
    End If
    '
    'Ouverture fichier analyse M-1
        Sheets("Données").Select
        Workbooks.Open Filename:=Range("h3").Value
    'Copie des données du fichier M-1
        Windows("Analyse Secteur 20-07.xlsm").Activate
        Sheets("BDD Clients").Select
        ActiveWorkbook.Worksheets("BDD Clients").AutoFilter.Sort.SortFields.Clear
        ActiveSheet.ShowAllData
        ActiveWorkbook.Worksheets("BDD Clients").AutoFilter.Sort.SortFields.Clear
        ActiveWorkbook.Worksheets("BDD Clients").AutoFilter.Sort.SortFields.Add2 Key _
            :=Range("H2:H1500"), SortOn:=xlSortOnValues, Order:=xlAscending, _
            DataOption:=xlSortNormal
        With ActiveWorkbook.Worksheets("BDD Clients").AutoFilter.Sort
            .Header = xlYes
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
        Range("A3:N3").Select
        Range(Selection, Selection.End(xlDown)).Select
        Selection.Copy
        Windows("Analyse Secteur 20-08.xlsm").Activate
        Sheets("BDD Clients").Select
        ActiveWindow.SmallScroll Down:=-15
        Range("BC3").Select
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
        Windows("Analyse Secteur 20-07.xlsm").Activate
        ActiveWindow.ScrollRow = 1480
        ActiveWindow.ScrollRow = 1475
        ActiveWindow.ScrollRow = 1459
        ActiveWindow.ScrollRow = 1410
        ActiveWindow.ScrollRow = 1136
        ActiveWindow.ScrollRow = 656
        ActiveWindow.ScrollRow = 339
        ActiveWindow.ScrollRow = 184
        ActiveWindow.ScrollRow = 164
        ActiveWindow.ScrollRow = 50
        ActiveWindow.ScrollRow = 32
        ActiveWindow.ScrollRow = 3
        ActiveSheet.Range("$A$2:$BB$1500").AutoFilter Field:=15, Criteria1:= _
            "_Pas SF"
        Range("F20:O20").Select
        Selection.End(xlDown).Select
        Range(Selection, Selection.End(xlUp)).Select
        ActiveWindow.SmallScroll Down:=-225
        Range("F20:O20").Select
        Range(Selection, Selection.End(xlDown)).Select
        Application.CutCopyMode = False
        Selection.Copy
        Windows("Analyse Secteur 20-08.xlsm").Activate
        Range("E3").Select
        ActiveSheet.Paste
        Windows("Analyse Secteur 20-07.xlsm").Activate
        ActiveSheet.Range("$A$2:$BB$1500").AutoFilter Field:=15
        Sheets("Contacts").Select
        Columns("A:F").Select
        Application.CutCopyMode = False
        Selection.Copy
        Windows("Analyse Secteur 20-08.xlsm").Activate
        Sheets("Contacts").Select
        Columns("A:F").Select
        ActiveSheet.Paste
        Sheets("BDD Clients").Select
    End Sub

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2010
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 194
    Par défaut
    Bonjour,

    bon alors c'est bien car pour une premiere question tu n'as pas joint un fichier mais posté du code. Maintenant pour facilité la lecture pense à mettre le code dans la balise code. Pour ce faire sélectionne ton code et utilise le bouton [#] de l’éditeur de message.
    Deuxièmement indente ton code . Le mieux est de le faire dans l’éditeur VBA avec la touche TAB. Quand tu colles ton code ici et que tu utilises la balise code l'indentation est conservée.

    exemple avec un bout de ton code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    ActiveWorkbook.Worksheets("BDD Clients").AutoFilter.Sort.SortFields.Add2 Key _
    :=Range("H2:H1500"), SortOn:=xlSortOnValues, Order:=xlAscending, _
    DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("BDD Clients").AutoFilter.Sort
       .Header = xlYes
       .MatchCase = False
       .Orientation = xlTopToBottom
       .SortMethod = xlPinYin
       .Apply
    End With
    alors oui effectivement c'est de l'enregistrement avec tous un tas de code inutile ou mal structuré:

    Je ne vais pas le faire pour toi mais je vais te guider.

    1) tous ce qui est méthodes "select" ou "activate" peuvent et doivent être remplacés . De plus toutes les lignes qui commence par "ActiveWindow.ScrollRow":
    sont à supprimer.
    2)VBA c'est comme la douane il faut tous déclarer.... enfin toutes les variables quoi

    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
    Sub ACT_1()
        '
        ' ACT_1 Macro
        '
        Dim MonClasseurdeDonnees As Workbook ' variable objet de type classeur
        Dim MaFeuilleDeDonnees As Worksheet ' variable objet de type feuille
        Dim yourmsgbox As VbMsgBoxResult ' variable de valeur type resultat de boite message
        'Msgbox Ok + Annuler
        yourmsgbox = MsgBox("ATTENTION: A n'utiliser que pour remplir le tableau vierge", vbOKCancel, "Confirmation")
     
        If yourmsgbox = vbCancel Then
            Exit Sub
        End If
        '
        'Ouverture fichier analyse M-1
        Set MonClasseurdeDonnées = Workbooks.Open(Filename:=Sheets("Données").Range("h3").Value)
        Set MaFeuilleDeDonnees = MonClasseurdeDonnées.Worksheets("BDD Clients")
        'Copie des données du fichier M-1
        With MaFeuilleDeDonnees
            If .AutoFilterMode = True Then .AutoFilterMode = False
            .AutoFilter.Sort.SortFields.Add2 Key _
                :=Range("H2:H1500"), SortOn:=xlSortOnValues, Order:=xlAscending, _
                DataOption:=xlSortNormal
            With .AutoFilter.Sort
                .Header = xlYes
                .MatchCase = False
                .Orientation = xlTopToBottom
                .SortMethod = xlPinYin
                .Apply
            End With
        End With
    je te laisse faire le reste. Je sais que tu n'arriveras pas à tous simplifier du premier coup mais essais et reviens avec ce que tu auras réussi à faire
    Bon maintenant que l'on vois plus claire on vas s'intéresser à la question des noms de fichiers en dur dans le code.

    Je ne suis pas certain d'avoir compris la façon utilisé pour recuperer le nom du fichier M-1 mais à priori il est écrit dans une cellule du fichier qui contient les macros. Plus précisément dans la cellule h3 de la feuille "Données". oui/non ?

    Donc pour cette partie il va falloir nous éclairer sur ce que tu souhaites. Dans tout les cas l'utilisation d'une variable qui contient le nom du classeur s'utilise comme ceci :

    Pour la demo je reprend le bout code plus haut :

    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
    Sub ACT_1()
        '
        ' ACT_1 Macro
        '
     
        Dim MonClasseurdeDonnees As Workbook ' variable objet de type classeur
        Dim MaFeuilleDeDonnees As Worksheet ' variable objet de type feuille
        Dim NomClasseurMoisPrecedent As String ' variable de valeur type chaine de caracteres
        Dim yourmsgbox As VbMsgBoxResult ' variable de valeur type resultat de boite message
        'Msgbox Ok + Annuler
        yourmsgbox = MsgBox("ATTENTION: A n'utiliser que pour remplir le tableau vierge", vbOKCancel, "Confirmation")
     
        If yourmsgbox = vbCancel Then
            Exit Sub
        End If
        '
        'Ouverture fichier analyse M-1
        NomClasseurMoisPrecedent = ThisWorkbook.Sheets("Données").Range("h3").Value 'ici on recupere le nom du fichier M-1
        Set MonClasseurdeDonnées = Workbooks.Open(Filename:=NomClasseurMoisPrecedent) 'on l'ouvre et on le met dans une variable
        Set MaFeuilleDeDonnees = MonClasseurdeDonnées.Worksheets("BDD Clients")
        'Tri et copie des données du fichier M-1
        With MaFeuilleDeDonnees
            If .AutoFilterMode = True Then .AutoFilterMode = False
            .AutoFilter.Sort.SortFields.Add2 Key _
                :=Range("H2:H1500"), SortOn:=xlSortOnValues, Order:=xlAscending, _
                DataOption:=xlSortNormal
            With .AutoFilter.Sort
                .Header = xlYes
                .MatchCase = False
                .Orientation = xlTopToBottom
                .SortMethod = xlPinYin
                .Apply
            End With
        End With

    voila je ne pourrais pas revenir ici avant lundi mais je suis sur que tu trouveras de l'aide pour la suite.

  3. #3
    Membre émérite Avatar de Alex020181
    Homme Profil pro
    Prestataire informatique développeur d'application Excel, Access, VBA
    Inscrit en
    Juin 2012
    Messages
    601
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Prestataire informatique développeur d'application Excel, Access, VBA

    Informations forums :
    Inscription : Juin 2012
    Messages : 601
    Par défaut
    Bonjour,

    Donc si j'ai bien compris tu souhaiterais que ton code identifie seul le mois du fichier à aller ouvrir en fonction du mois -1 du fichier que tu es en train de créer. Cela est faisable (VBA est capable d'identifier le numéro du mois en cours et d'en soustraire 1).
    Par contre tu dis aussi que les fichiers précédents ne se trouvent pas toujours dans les mêmes arborescences selon l'utilisateur. Donc Excel ne peux pas deviner seul où se trouve le fichier précédent.

    La meilleure solution à mon goût est de créer un bouton "Parcourir" qui te permettra de sélectionner le fichier adéquat.

    Le code complet pourrait être revu mais pour simplement répondre à ta demande ce bouton "Parcourir" devrait être une première étape.

    Est-ce bien cela ?

  4. #4
    Candidat au Club
    Homme Profil pro
    Commercial
    Inscrit en
    Juillet 2020
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Commercial

    Informations forums :
    Inscription : Juillet 2020
    Messages : 4
    Par défaut
    Merci Phil free beaucoup pour cette réponse rapide.
    Je vais m'y pencher rapidement, essayer de comprendre même si ca a l'air clair t te tenir au courant de l'avancée de la chose.
    Bon We
    Eric

  5. #5
    Candidat au Club
    Homme Profil pro
    Commercial
    Inscrit en
    Juillet 2020
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Commercial

    Informations forums :
    Inscription : Juillet 2020
    Messages : 4
    Par défaut
    Merci aussi beaucoup Alex
    Oui ce tableau va être utilisé par 3-4 autres personnes qui ont une arborescence de classement different du mien.
    La solution pour laquelle j'ai opté est a l'aide de formule intégrée; dans une cellule (la H3) dans un onglet (Données) du classeur ou se trouve ma macro; avec le chemin de chaque utilisateur et le nom du fichier du mois -1.
    Maintenant si c'est possible de l'intégrer dans la macro, je suis preneur

    Je ne préfère pas utiliser, pour cette partie, de bouton parcourir. Le but de cette refonte est qu'il y ait le moins de manipulations possibles, juste appuyer sur qq boutons lançant les macros qui s’enchaîneront entre divers captures de données sur un programme de mon entreprise.

    Mais je veux bien que tu restes a l’écoute, je vais sans doute bloquer a d'autres reprises.
    Bonne journée

  6. #6
    Candidat au Club
    Homme Profil pro
    Commercial
    Inscrit en
    Juillet 2020
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Commercial

    Informations forums :
    Inscription : Juillet 2020
    Messages : 4
    Par défaut
    De retour de congés, je me suis replonger dans mon projet en relisant vos 2 messages et en essayant d'appliquer vos infos. Même avec une concentration intense je ne comprends pas grand chose
    je vais avancer pas a pas
    En suivant tes instructions Phil Free j'ai réussi a passer le cap de la variable et je t'en remercie beaucoup
    Par contre je pense que l'instruction de la ligne 23 est trop puissante car elle supprime tous mes filtres (je n'ai plus mes petits boutons sur ma ligne) la ou je ne voulais juste que remettre tout a zero.
    Surtout n’hésitez pas a revenir vers moi si ce n'est pas clair
    Merci pour votre aide

Discussions similaires

  1. [Toutes versions] Insertion formule avec variable dans VBA
    Par Suomiland dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 24/06/2015, 07h30
  2. [XL-2007] ajouter la serie "X" dans un graphique en VBA avec variables pour Ligne et colonne
    Par maxime-a dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 01/04/2015, 14h40
  3. requete avec variable dans VBA
    Par Mathieu.Nanoux dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 07/09/2007, 13h41
  4. [AS2] Pb avec variables dans syntaxe
    Par ooyeah dans le forum ActionScript 1 & ActionScript 2
    Réponses: 1
    Dernier message: 05/07/2005, 11h28
  5. Probleme avec guillemets dans commande HREF
    Par angelevil dans le forum ASP
    Réponses: 4
    Dernier message: 02/05/2005, 19h06

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