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éation d'un fichier .txt rapport depuis une macro. [XL-2016]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Octobre 2018
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2018
    Messages : 23
    Par défaut Création d'un fichier .txt rapport depuis une macro.
    Bonjour,

    Je voulais savoir si il était possible de créer un rapport d'erreur sous forme de .txt. Je voudrais que tout les messages box s'ouvrant comme erreurs soient retranscris ensuite dans un fichier rapport.

    Voici un exemple de mon code pour vous aider à y voir plus clair :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub bouclecolonneB()
        Set FL1 = Worksheets("Feuil1")
        NoCol = 2 'lecture de la colonne B
        For NoLig = 1 To Split(FL1.UsedRange.Address, "$")(4)
            Var = FL1.Cells(NoLig, NoCol)
        If IsEmpty(Var) = False Then
           If Len(Var) > 50 Then
            Rows(NoLig & ":" & NoLig).Font.Color = RGB(255, 0, 0) 'rouge
           MsgBox "La colonne désignation est éronnée. " & NoLig
           End If
           End If
        Next
        Set FL1 = Nothing
    End Sub
    En vous remerciant d'avoir lu ma demande .

  2. #2
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 680
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 680
    Par défaut
    Bonjour,

    Ce tuto sur la gestion d'erreur pour surement t'aider: https://silkyroad.developpez.com/VBA...nErreurs/#LIII

  3. #3
    Expert éminent 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
    Par défaut
    Un solution simple : tu remplaces tous tes MsgBox par des Debug.Print.
    Les messages s'inscriront dans la fenêtre d'exécution (sans causer d'arrêt du code comme le fait MsgBox).
    Si tu veux les conserver après les avoir consulté (ce qui est rarement utile), un simple copier coller vers le Notepad suffira.
    A lire : https://docs.microsoft.com/fr-fr/off...p/debug-object

    Perso, c'est une instruction dont j'use et j'abuse.
    C'est idéal pour balancer des messages intermédiaire avec lecture en direct sans être déranger dans le déroulement du code.

  4. #4
    Membre averti
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Octobre 2018
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2018
    Messages : 23
    Par défaut Hey !
    Citation Envoyé par Menhir Voir le message
    Un solution simple : tu remplaces tous tes MsgBox par des Debug.Print.
    Merci beaucoup c'est exactement ce que je recherche ! Mais ce que j'aimerais faire par la suite c'est ouvrir une fenêtre apars affichant exactement le même contenue. J'ai pour but de créer un exécutable à partir de cette macro vérifiant mon fichier pour ensuite afficher une message box avec toutes les lignes fausses comme tu m'as donné !

  5. #5
    Expert éminent 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
    Par défaut
    Citation Envoyé par Elhyra Voir le message
    J'ai pour but de créer un exécutable à partir de cette macro
    Avec VBA Excel ?

    vérifiant mon fichier pour ensuite afficher une message box avec toutes les lignes fausses comme tu m'as donné !
    Dans ce cas, mets les messages d'erreur dans une variable String avec un Chr(13) ou vbCrLf à la fin de chaque message.
    Une fois terminé, tu n'as plus qu'à mettre le contenu de cette variable dans la MsgBox.

  6. #6
    Membre averti
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Octobre 2018
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2018
    Messages : 23
    Par défaut
    Citation Envoyé par Menhir Voir le message
    Avec VBA Excel ?
    Hum oui, enfin je vais essayé de réadapter tout le code à Visual Basic Express pour ensuite en faire une application. Car oui je crois que c'est impossible depuis VBA Excel après mes recherches. Mais merci je vais essayer ce que tu m'as dis !

  7. #7
    Membre averti
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Octobre 2018
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2018
    Messages : 23
    Par défaut
    Citation Envoyé par halaster08 Voir le message
    Bonjour,

    Ce tuto sur la gestion d'erreur pour surement t'aider: https://silkyroad.developpez.com/VBA...nErreurs/#LIII
    J'ai regardé tout le tuto de haut en bas et je n'ai pas trouvé ce que je recherchais. Mais merci tout de même de votre réponse !

  8. #8
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 680
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 680
    Par défaut
    Citation Envoyé par Elhyra Voir le message
    J'ai regardé tout le tuto de haut en bas et je n'ai pas trouvé ce que je recherchais. Mais merci tout de même de votre réponse !
    Non il n'y pas la réponse toute faite que tu attend mais il y a des pistes a adapter à ton cas, par 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
     
    Sub UtilisationInstructionResume()
        Dim i As Integer, j As Integer
     
        On Error GoTo ErrorHandler
     
        'Par défaut i=0 (et va provoquer une erreur)
        j = 5 / i
        MsgBox j
     
     
        Exit Sub
     
    ErrorHandler:
        MsgBox "Erreur: " & Err.Number & vbCrLf & Err.Description 
        If i = 0 Then i = 1
        'Reprend l'exécution au niveau de la ligne à l'origine de l'erreur.
        Resume
     
    End Sub
    Ici en cas d'erreur on fait apparaître le numéro et la description dans un msgbox, plutôt qu'un msgbox envoie le dans une variable de type texte que tu récupère à la fin
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    dim msgerreur as string
     On Error GoTo ErrorHandler
    'ton code
     
    ErrorHandler:
        msgerreur =msgerreur  & chr(10)& "Erreur: " & Err.Number & vbCrLf & Err.Description
        Resume next

  9. #9
    Membre averti
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Octobre 2018
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2018
    Messages : 23
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    dim msgerreur as string
     On Error GoTo ErrorHandler
    'ton code
     
    ErrorHandler:
        msgerreur =msgerreur  & chr(10)& "Erreur: " & Err.Number & vbCrLf & Err.Description
        Resume next
    Hey ! Merci de ta réponse ! Du coup si j'ai bien compris je devrais placer ça par exemple comme ça :

    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
    Option Explicit
    Dim FL1 As Worksheet, NoCol As Integer
    Dim NoLig As Long, Var As Variant
    Dim msgerreur As String
     On Error GoTo ErrorHandler
    ErrorHandler:
        msgerreur = msgerreur & Chr(13) & "Erreur: " & Err.Number & vbCrLf & Err.Description
        Resume Next
     
    Private Sub CommandButton1_Click()
       Columns("B").Font.ColorIndex = xlAutomatic 'rétabli la couleur auto
    bouclecolonneB
     
    End Sub
     
    Sub bouclecolonneB()
        Set FL1 = Worksheets("Feuil1")
        NoCol = 2 'lecture de la colonne B
        For NoLig = 1 To Split(FL1.UsedRange.Address, "$")(4)
            Var = FL1.Cells(NoLig, NoCol)
        If IsEmpty(Var) = False Then
           If Len(Var) > 50 Then
            Rows(NoLig & ":" & NoLig).Font.Color = RGB(255, 0, 0) 'rouge
           MsgBox "La colonne désignation est éronnée. " & NoLig
           End If
           End If
        Next
        Set FL1 = Nothing
    End Sub
     
    ErrorHandler:
        msgerreur =msgerreur  & chr(10)& "Erreur: " & Err.Number & vbCrLf & Err.Description
        Resume next

  10. #10
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    re
    quand j'ai dis tout a l'heure des erreurs qui n'en sont pas c'est pas pour rien
    pourquoi voudrais tu faire une gestion d'erreur alors que ce que tu cherche a gérer n'en ai pas une mais seulement le resultat d'une condition que seul toi considere comme une erreur

    en aucun cas ceci ci dessous est une erreur seulement une condition meme si le msgbox dit que ca en est une
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if toto<> titi then msgbox "erreur c'a n'est pas bon"
    engros tu t'entete avouloir faire une gestion d'erreur alors que tu n'a qu'a stocker le resultat de ta condition

    dans mon exemple precedent j'ai oublié dim mess as string

    nous sommes bien d'accords que c'est cela que tu veux stocker
    "La colonne désignation est éronnée. " & NoLig
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  11. #11
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    re
    re se sont des erreurs qui n'en sont pas en fait c'est juste une non corespondance a une condition
    au lieu de faire un msgbox a chaque fois stock la non correspondance dans une variable string et a la fin tu construit ton rapport avec ce texte
    ici j'aficche toutes les erreurs relevées a la fin
    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
    Sub bouclecolonneB()
        Set FL1 = Worksheets("Feuil1")
        NoCol = 2    'lecture de la colonne B
        For NoLig = 1 To Split(FL1.UsedRange.Address, "$")(4)
            Var = FL1.Cells(NoLig, NoCol)
            If IsEmpty(Var) = False Then
                If Len(Var) > 50 Then
                    Rows(NoLig & ":" & NoLig).Font.Color = RGB(255, 0, 0)    'rouge
                    mess = mess & vbCrLf & "La colonne désignation est éronnée. " & NoLig
                End If
            End If
        Next
     
        MsgBox mess
            'creation de ton fichier rapport ici avec open for input par exemple
        Set FL1 = Nothing
    End Sub
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  12. #12
    Membre averti
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Octobre 2018
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2018
    Messages : 23
    Par défaut
    Citation Envoyé par patricktoulon Voir le message
    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
    Sub bouclecolonneB()
        Set FL1 = Worksheets("Feuil1")
        NoCol = 2    'lecture de la colonne B
        For NoLig = 1 To Split(FL1.UsedRange.Address, "$")(4)
            Var = FL1.Cells(NoLig, NoCol)
            If IsEmpty(Var) = False Then
                If Len(Var) > 50 Then
                    Rows(NoLig & ":" & NoLig).Font.Color = RGB(255, 0, 0)    'rouge
                    mess = mess & vbCrLf & "La colonne désignation est éronnée. " & NoLig
                End If
            End If
        Next
     
        MsgBox mess
            'creation de ton fichier rapport ici avec open for input par exemple
        Set FL1 = Nothing
    End Sub
    Merci de ta réponse ! J'ai essayé de l'intégrer à mon code pour essayé cette méthode mais la variable est manquante lors de l'éxécution de la macro, et je n'ai pas bien compris le commentaire de la fin : "creation de ton fichier rapport ici avec open for input par exemple" Mais merci tout de même ! C'est gentil de ta pars !

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

Discussions similaires

  1. [XL-2016] Ouvrir un fichier excel xlsm depuis une macro
    Par momocactus dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 24/08/2018, 16h10
  2. [Toutes versions] Traiter un fichier txt à partir d'une macro VBA Excel
    Par alaize dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 28/07/2011, 15h25
  3. [XL-2007] Création d'un fichier d'aide pour une macro complémentaire
    Par amery dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 14/01/2011, 15h57
  4. [XL-2007] Retraiter un fichier txt en creant une macro
    Par JDW78 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 06/12/2010, 18h31
  5. Réponses: 10
    Dernier message: 23/10/2007, 15h15

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