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 :

Comment créée une maccro pour enregistrer un document ".MAC" ?


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Octobre 2014
    Messages : 6
    Points : 2
    Points
    2
    Par défaut Comment créée une maccro pour enregistrer un document ".MAC" ?
    Bonjour Messieurs Dames,

    Je viens à votre rencontre car j'ai un problème.
    J'ai découvert il y a peu de temps le VBA et ai encore énormément de mal a l'utiliser.

    Mon problème est le suivant.

    J'ai cette macro qui fonctionne très bien:




    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
    Sub Duplication()
     
    Dim Cell As Range
    Dim ligne As String
    Dim L As Long
     
    Sheets("Feuil1").Range("A1:A11").Copy Sheets("Feuil2").Range("A1")
     
    For Each Cell In Sheets("Feuil1").Range("F1:F65535")
        If Not Cell.Value = "" Then
            Sheets("Feuil1").Range("A18") = "   autECLSession.autECLPS.SendKeys " & " """ & Cell.Value & """ "
            Sheets("Feuil1").Range("A12:A23").Copy
            L = Sheets("Feuil2").Range("A65536").End(xlUp).Row + 1
            Sheets("Feuil2").Range("A" & L + 1).Insert
     
     
        End If
    Next Cell
     
    Sheets("Feuil1").Range("A24:A26").Copy Sheets("Feuil2").Range("A" & L + 13)
     
     
    End Sub
    Mais je voudrais lui rajouter une fonction d'enregistrement automatique dans un fichier ".mac"
    Je sais que c'est réalisable car la macro suivante fonctionne:


    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
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    Sub Commandes_Exceptionnelles()
     
    Dim FichierCommande As String
    Dim FichierMacro As String
    Dim DossierCommande As String
    Dim Chemin As String
     
    Dim NbLignes As Integer
    Dim Ligne As Integer
    Dim LigneDuBlocPDV As Integer
     
    Dim ITM8 As String
    Dim PDV As String
    Dim QTE As String
     
     
    Application.ScreenUpdating = False
     
    '*************************************************************************
    'OUVERTURE DU FICHIER EXCEL ET RENSEIGNEMENT DES VARIABLES DE CHEMINS ET NOMS DE FICHIERS
    MsgBox ("Ouvrir le fichier Excel de Commandes Exceptionnelles à passer")
    Application.FileDialog(msoFileDialogFilePicker).AllowMultiSelect = False
    Application.FileDialog(msoFileDialogFilePicker).Show
    FichierCommande = Application.FileDialog(msoFileDialogFilePicker).SelectedItems(1)
    FichierMacro = ThisWorkbook.Name
    Workbooks.Open Filename:=FichierCommande
    DossierCommande = ActiveWorkbook.Path
     
    '*************************************************************************
    'FORMATAGE DES TROIS COLONNES EN NOMBRE AFIN D'UNIFORMISER LE FORMAT ET DONC DE FACILITER LE TRAITEMENT
    Columns(1).TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo:=Array(1, 1), TrailingMinusNumbers:=True
    Columns(2).TextToColumns Destination:=Range("B1"), DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo:=Array(1, 1), TrailingMinusNumbers:=True
    Columns(3).TextToColumns Destination:=Range("C1"), DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo:=Array(1, 1), TrailingMinusNumbers:=True
     
    '*************************************************************************
    'NOMBRE DE LIGNES DU FICHIER EXCEL
    NbLignes = Cells(65536, 1).End(xlUp).Row
     
    '*************************************************************************
    'DETECTION DES ERREURS SUR LES CODES PDV, CODES ITM ET QTE
    For Ligne = 2 To NbLignes
      PDV = Worksheets(1).Cells(Ligne, 1).Value
        If (IsNumeric(PDV) = False) Or ((Len(PDV) > 5) Or (Len(PDV) < 4)) Then
           MsgBox ("Le programme va s'arrêter : il a détecté un code PDV non-conforme en cellule [A" & Ligne & "]")
           ActiveWorkbook.Saved = True
           ActiveWorkbook.Close
        Exit Sub
        End If
      ITM8 = Worksheets(1).Cells(Ligne, 2).Value
        If (IsNumeric(ITM8) = False) Or ((Len(ITM8) > 8) Or (Len(ITM8) < 7)) Then
           MsgBox ("Le programme va s'arrêter : il a détecté un code ITM8 non-conforme en cellule [B" & Ligne & "]")
           ActiveWorkbook.Saved = True
           ActiveWorkbook.Close
          Exit Sub
        End If
      QTE = Worksheets(1).Cells(Ligne, 3).Value
        If (IsNumeric(QTE) = False) Then
           MsgBox ("Le programme va s'arrêter : il a détecté une quantité non-conforme en cellule [C" & Ligne & "]")
           ActiveWorkbook.Saved = True
           ActiveWorkbook.Close
           Exit Sub
        Else
           If ((QTE > 500) Or (QTE < 1)) Then
              MsgBox ("Le programme va s'arrêter : il a détecté une quantité non-conforme en cellule [C" & Ligne & "]")
              ActiveWorkbook.Saved = True
              ActiveWorkbook.Close
              Exit Sub
           End If
        End If
    Next Ligne
     
    '*************************************************************************
    'TRI DE LA COLONNE PDV - POUR REGROUPER PAR PDV
    'ActiveWorkbook.Worksheets(1).Sort.SortFields.Clear
    'ActiveWorkbook.Worksheets(1).Sort.SortFields.Add Key:=Range("A2:A65536"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    'With ActiveWorkbook.Worksheets(1).Sort
    '        .SetRange Range("A1:C65536")
    '        .Header = xlYes
    '        .MatchCase = False
    '        .Orientation = xlTopToBottom
    '        .SortMethod = xlPinYin
    '        .Apply
    'End With
    Range("A1").Select
     
    BlocPDVNumero = 0
    LigneDuBlocPDV = 0
     
    'DEBUT DE LA 1ERE BOUCLE PAR LIGNE EXCEL
    For Ligne = 2 To NbLignes
     
      'ON FORMATE LES CODE PDV ET LES CODES ITM8
      PDV = Worksheets(1).Cells(Ligne, 1).Value
        If (Len(PDV) = 4) Then
           PDV = "0" & PDV
        End If
      ITM8 = Worksheets(1).Cells(Ligne, 2).Value
        If (Len(ITM8) = 7) Then
           ITM8 = "0" & ITM8
        End If
     
      QTE = Worksheets(1).Cells(Ligne, 3).Value
     
      If 2 = 1 Then
        BlocPDVNumero = 1
        '*************************************************************************
        'CREER LE FICHIER TEXTE
        Open DossierCommande & "\Bloc" & BlocPDVNumero & "_CmdeExecp.mac" For Append As #1
        'COMMENCE A ECRIRE DANS LE FICHIER TEXTE(.MAC)
        Print #1, "Description ="
      Else
        If LigneDuBlocPDV = 0 Then
           BlocPDVNumero = BlocPDVNumero + 1
           '*************************************************************************
           'CREER LE FICHIER TEXTE
           Open DossierCommande & "\Bloc" & BlocPDVNumero & "_CmdeExecp.mac" For Append As #1
           'COMMENCE A ECRIRE DANS LE FICHIER TEXTE(.MAC)
           Print #1, "Description ="
        End If
      End If
     
      LigneDuBlocPDV = LigneDuBlocPDV + 1
      Print #1, Chr(34) + PDV + ITM8
      Print #1, "[wait inp inh]"
      Print #1, "wait 30 msec"
      Print #1, "[enter]"
      Print #1, "[wait inp inh]"
      Print #1, "wait 30 msec"
      Print #1, "[pf4]"
      Print #1, "[wait inp inh]"
      Print #1, "wait 30 msec"
      Print #1, "[newline]"
      Print #1, Chr(34) + QTE
      Print #1, "[wait inp inh]"
      Print #1, "wait 30 msec"
      Print #1, "[pf9]"
        Print #1, "wait 30 msec"
      Print #1, "[pf9]"
      Print #1, "[wait inp inh]"
      Print #1, "wait 100 msec"
     
      If 1 = 2 Then
         '*************************************************************************
         'FERME LE FICHIER TEXTE(.MAC)
         LigneDuBlocPDV = 0
         Close #1
      Else
         If LigneDuBlocPDV = 400 Then
            '*************************************************************************
            'FERME LE FICHIER TEXTE(.MAC)
            LigneDuBlocPDV = 0
            Close #1
         End If
      End If
     
     
    Next Ligne
     
    ActiveWorkbook.Saved = True
    ActiveWorkbook.Close
     
    MsgBox ("Vos Fichiers .MAC ont été générés avec succés dans le dossier " & DossierCommande)
     
    Application.ScreenUpdating = False
     
    End Sub
    Mais je n'arrive pas a trouvé comment faire.
    Si quelqu'un aurait la gentillesse et le savoir faire afin de m'aider dans cette tache.

    Merci beaucoup d'avance.

    Cordialement

    Matthieu un jeune étudiant débutant qui ne demande qu'à apprendre.

  2. #2
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Visiblement, ton .MAC est uniquement un fichier texte et il est traité comme un fichier séquentiel.

    Il suffit que tu utilises la partie finale du second code, celle qui commence à CREER LE FICHIER TEXTE.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Octobre 2014
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Oui mais j'ai essayé et je n'arrive pas a trouvé la façon dont c'est écris.
    J'ai commencé les macros il y a 15 jours, et le peu que je réussi pour le moment, je l'ai trouvé sur des forums. Les deux macros que j'ai postées, sont des macros que j'ai reprises. Et la je bloque complètement sur ça.

  4. #4
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Citation Envoyé par matthieu27220 Voir le message
    Les deux macros que j'ai postées, sont des macros que j'ai reprises.
    Ca se voit.

    En plus, le second code que tu présentes est sans doute un truc provisoire ou une version de travail, sinon, je ne vois pas pourquoi sont écrits des trucs comme "If 1=2 Then" (pas besoin d'être informaticien, juste de pratiquer un minimum l'anglais, pour comprendre le problème sur ce test).

    J'ai commencé les macros il y a 15 jours, et le peu que je réussi pour le moment, je l'ai trouvé sur des forums. Les deux macros que j'ai postées, sont des macros que j'ai reprises. Et la je bloque complètement sur ça.
    Si tu te contentes de repomper des trucs plus ou moins au hasard sur internet et de demander aux autre de te les adapter, tu ne risques pas de progresser.
    Si tu veux progresser, lis des tutoriels pour connaitre les structures, regarde dans l'aide Excel pour connaitre les membres des différents objets, etc.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Octobre 2014
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Oui je sais bien mais ça fais 3 semaines que je lis des tutos, que j'essais plein de choses qui ne marchent pas, que personne autour de moi ne sais ce que veux dire VBA.

    En claire, j'ai posté ce message afin de trouvé la réponse et de comparé avec ce que j'ai fait afin de comprendre mes erreurs.

  6. #6
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Qu'est-ce que tu ne comprends pas dans le code ?
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  7. #7
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Octobre 2014
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Je ne comprend les conditions dans le code qui créée le fichier texte. Et donc je ne sais pas quelle partie récupérer pour ma maccro.

  8. #8
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Je suppose que tu parviens à comprendre la condition "If 2 = 1 Then"

    Pour la condition "If LigneDuBlocPDV = 0 Then", elle teste simplement si la variable LigneDuBlocPDV est nulle
    C'est une variable qui est mise à 0 juste avant le début de la boucle For Next et qui est incrémentée à l'intérieur de cette boucle.
    Je pense donc qu'elle sert à ne faire qu'une seule fois ce qui est à l'intérieur de la condition et ne pas le faire aux autres passage de la boucle.
    Le contenu de cette condition ouvre le fichier MAC pour écriture en lui donnant un nom contenant une valeur incrémentée ( BlocPDVNumero ).

    La dernière condition teste si cette même variable est égale à 400 car, visiblement, le concepteur de ce code ne voulait pas que ses fichiers contiennent plus de 400 lignes. Le contenu de cette condition ferme le fichier et remet la variable LigneDuBlocPDV à 0 ce qui, au prochain tour, déclenche la condition précédente pour ouvrir un nouveau fichier.

    Avec quelques indentations, le code est plus lisible.
    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
    Range("A1").Select
     
    BlocPDVNumero = 0
    LigneDuBlocPDV = 0
     
    'DEBUT DE LA 1ERE BOUCLE PAR LIGNE EXCEL
    For Ligne = 2 To NbLignes
     
    	'ON FORMATE LES CODE PDV ET LES CODES ITM8
    	PDV = Worksheets(1).Cells(Ligne, 1).Value
    	If (Len(PDV) = 4) Then PDV = "0" & PDV
     
    	ITM8 = Worksheets(1).Cells(Ligne, 2).Value
    	If (Len(ITM8) = 7) Then ITM8 = "0" & ITM8
     
    	QTE = Worksheets(1).Cells(Ligne, 3).Value
     
    	If LigneDuBlocPDV = 0 Then
    		BlocPDVNumero = BlocPDVNumero + 1
    		'*************************************************************************
    		'CREER LE FICHIER TEXTE
    		Open DossierCommande & "\Bloc" & BlocPDVNumero & "_CmdeExecp.mac" For Append As #1
    		'COMMENCE A ECRIRE DANS LE FICHIER TEXTE(.MAC)
    		Print #1, "Description ="
    	End If
     
    	LigneDuBlocPDV = LigneDuBlocPDV + 1
     
    	Print #1, Chr(34) + PDV + ITM8
    	Print #1, "[wait inp inh]"
    	Print #1, "wait 30 msec"
    	Print #1, "[enter]"
    	Print #1, "[wait inp inh]"
    	Print #1, "wait 30 msec"
    	Print #1, "[pf4]"
    	Print #1, "[wait inp inh]"
    	Print #1, "wait 30 msec"
    	Print #1, "[newline]"
    	Print #1, Chr(34) + QTE
    	Print #1, "[wait inp inh]"
    	Print #1, "wait 30 msec"
    	Print #1, "[pf9]"
    	Print #1, "wait 30 msec"
    	Print #1, "[pf9]"
    	Print #1, "[wait inp inh]"
    	Print #1, "wait 100 msec"
     
    	If LigneDuBlocPDV = 400 Then
    		'*************************************************************************
    		'FERME LE FICHIER TEXTE(.MAC)
    		LigneDuBlocPDV = 0
    		Close #1
    	End If
     
    Next Ligne
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  9. #9
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Octobre 2014
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Non, je bloque, je ne sais pas pourquoi il y a un truc que je ne dois pas faire.

  10. #10
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Avec une description aussi vague de ton problème, je ne vois pas trop ce qu'on peut faire...
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  11. #11
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Octobre 2014
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Et bien, pour essayé de m'exprimer clairement, je veux que ma premiere macro, la courte s'enregistre automatiquement dans un fichier texte et non dans un fichier xls.

  12. #12
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Tu peux montrer le code que tu as essayé de faire pour obtenir ça ?
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

Discussions similaires

  1. Réponses: 1
    Dernier message: 12/10/2015, 20h36
  2. Réponses: 2
    Dernier message: 21/05/2015, 12h42
  3. Réponses: 2
    Dernier message: 24/04/2012, 13h22
  4. Comment créé une "interface" pour mes programmes??
    Par alcazar dans le forum Autres éditeurs
    Réponses: 5
    Dernier message: 09/02/2004, 13h02

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