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 :

Macro qui fonctionne en pas à pas (F8) mais pas en une fois.


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Février 2013
    Messages : 66
    Par défaut Macro qui fonctionne en pas à pas (F8) mais pas en une fois.
    Bonjour,

    La macro que j'ai fonctionne en pas à pas (c'est à dire en appuyant sur F8)= ligne par ligne) mais pas en la lançant d'un coup à partir d'un fichier générateur.

    Son but :
    • Parcourir tous les fichiers d'un dossier renseigné en début de macro
    • Parcourir tous les onglets de ces fichiers
    • Y chercher le mot "annulation" (pour trouver la ligne d’entête du fichier - qui n'est pas forcément toujours sur la même ligne)
    • puis parcourir toutes les lignes inférieures à la ligne d’entête.
    • Chercher si la colonne "annulation" a des occurrences
    • copier la ligne entière vers un fichier vierge


    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
        Chemin = InputBox("saisir le chemin", "Saisie du répertoire")
     
        If Right(Chemin, 1) <> "\" Then
            Chemin = Chemin & "\"
        End If
     
     
        'appel de la fonction avec le chemin du dossier (adapter...)
        Tablo = RecupFichiers(Chemin)
     
        'si au moins un fichier trouvé...
        If Not (Not Tablo) Then
     
            'Workbooks.Add
            Set Fichier_Final = Workbooks.Add
            Ligne_Fichier_Final = 2
            For i = 1 To UBound(Tablo)
     
                'ouvre le classeur...
                Set Cls = Workbooks.Open(Chemin & Tablo(i), UpdateLinks:=False)
     
                'parcours sa collection de feuilles...
                For Each Feuille In Cls.Worksheets
                        Set c = Feuille.Range("A1:ZZ10").Find("Annulation", LookIn:=xlValues)
                        If Not c Is Nothing Then
                            For Ligne_Fichier_Source = c.Row + 1 To Feuille.Range("A" & Rows.Count).End(xlUp).Row
                                If Feuille.Cells(Ligne_Fichier_Source, c.Column) <> "" Then
                                    Cls.Feuille.Range(Rows(Ligne_Fichier_Source), Rows(Ligne_Fichier_Source)).Copy
                                    Fichier_Final.Sheets(1).Cells(Ligne_Fichier_Final, 1).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
                                    Ligne_Fichier_Final = Ligne_Fichier_Final + 1
                                End If
                            Next Ligne_Fichier_Source
     
                        End If
                Next Feuille
     
                'referme le classeur
                Application.CutCopyMode = False
                Cls.Close SaveChanges:=False
     
            Next i
     
        End If
        Application.DisplayAlerts = False
     
    End Sub
     
    Function RecupFichiers(Chemin As String) As String()
     
        Dim Tbl() As String
        Dim Fichier As String
        Dim i As Integer
     
        'seulement les fichiers .xlsx
        Fichier = Dir(Chemin & "*.xlsx")
     
        Do While (Len(Fichier) > 0)
     
            i = i + 1
            ReDim Preserve Tbl(1 To i)
            Tbl(i) = Fichier
            Fichier = Dir()
     
        Loop
     
        RecupFichiers = Tbl()
     
    End Function
    Vous avez une idée d’où vient le problème?

  2. #2
    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 guigol Voir le message
    La macro que j'ai fonctionne en pas à pas (c'est à dire en appuyant sur F8)= ligne par ligne) mais pas en la lançant d'un coup à partir d'un fichier générateur.
    Quel est le symptôme du dysfonctionnement ?
    Si l'exécution bugue, quel est le message et quelle ligne est désignée par le débugage ?
    Si le résultat est non conforme, quelle est la différence entre le souhaité et l'obtenu ?

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Février 2013
    Messages : 66
    Par défaut
    Les lignes ne sont pas copiées.
    Le fichier final reste vierge.

    Dans le fichier final, il doit quand meme se passer quelque chose car l'ascenseur se retrouve quelques dizaines de lignes plus bas. ce qui correspond au nombre de lignes que la macro est censée récuperer.

  4. #4
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Février 2013
    Messages : 66
    Par défaut
    Citation Envoyé par Patrice740 Voir le message
    Oups
    Pardon? Je n'ai pas compris ta réponse.
    Qu'as tu voulu dire?

  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
    N'aurais-tu pas des On Error dans ton code qui empêcheraient l'expression des bugs ?

    Citation Envoyé par guigol Voir le message
    Pardon? Je n'ai pas compris ta réponse.
    Qu'as tu voulu dire?
    Peut-être s'est-il aperçu après coup dans ton historique que tu fais partie de ces demandeurs qui n'aident jamais personne sur le forum et qui, pire, ne prennent même pas la peine de dire merci quand on leur apporte une réponse.
    Moi aussi ce type d'attitude me coupe parfois l'envie de répondre...

  6. #6
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Février 2013
    Messages : 66
    Par défaut
    Citation Envoyé par Menhir Voir le message
    N'aurais-tu pas des On Error dans ton code qui empêcheraient l'expression des bugs ?
    Merci pour cette piste de recherche. J'ai regardé de ce coté là. et n'ai rien trouvé.
    Je ne matrise pas bien, le copy paste. ce bout là te semble bien utilisé?


    Citation Envoyé par Menhir Voir le message
    Peut-être s'est-il aperçu après coup dans ton historique que tu fais partie de ces demandeurs qui n'aident jamais personne sur le forum et qui, pire, ne prennent même pas la peine de dire merci quand on leur apporte une réponse.
    Moi aussi ce type d'attitude me coupe parfois l'envie de répondre...
    Je sollicite effectivement ce forum (et d'autres). Et j'aide sur d'autres forums.
    Concernant les macros Excel, je ne me sens pas capable d'aider les gens qui posent des questions. Vos réponses m'impressionnent toujours. Bravo.

    Quand aux remerciements, tu as raison. Je ne le fais pas assez de manière générale. Je vais donc corriger cela à l'avenir.

  7. #7
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 681
    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 681
    Par défaut
    Bonjour,

    Vu que ta copie se fait dans une boucle j'ai ajouté des debug.print sur tes conditions pour voir si elles sont bien remplies
    Relance ton code avec ces modifs et regarde si les résultats sont cohérants
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
                  For Ligne_Fichier_Source = c.Row + 1 To Feuille.Range("A" & Rows.Count).End(xlUp).Row
    debug.print "param de la boucle for:"
    debug.print c.Row + 1
    debug.print  Feuille.Range("A" & Rows.Count).End(xlUp).Row
                                If Feuille.Cells(Ligne_Fichier_Source, c.Column) <> "" Then
    debug.print "condition du if:"
    debug.print  Feuille.Cells(Ligne_Fichier_Source, c.Column)
                                    Cls.Feuille.Range(Rows(Ligne_Fichier_Source), Rows(Ligne_Fichier_Source)).Copy
                                    Fichier_Final.Sheets(1).Cells(Ligne_Fichier_Final, 1).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
                                    Ligne_Fichier_Final = Ligne_Fichier_Final + 1
                                End If
                            Next Ligne_Fichier_Source

  8. #8
    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 guigol Voir le message
    Quand aux remerciements, tu as raison. Je ne le fais pas assez de manière générale. Je vais donc corriger cela à l'avenir.
    Visiblement, ce sera dans un avenir... très lointain.

  9. #9
    Membre émérite Avatar de Valtrase
    Homme Profil pro
    Jeune retraité...
    Inscrit en
    Janvier 2016
    Messages
    514
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Jeune retraité...
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Janvier 2016
    Messages : 514
    Par défaut
    Salut le fil...

    teste comme cela :
    Feuille.Range(Rows(Ligne_Fichier_Source), Rows(Ligne_Fichier_Source)).Copy
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Feuille.Range("A" & Ligne_Fichier_Source).EntireRow.Copy

  10. #10
    Membre Expert
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 817
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 817
    Billets dans le blog
    10
    Par défaut
    Bonjour,

    1- déclare bien toutes les variables...
    2- remplace :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Not (Not Tablo) Then
    par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    If IsArray(Tablo) Then
        MsgBox "Il y a : " & UBound(Tablo) & "Fichiers trouvés."

Discussions similaires

  1. Macro qui fonctionne dans un fichier Excel mais pas dans un autre
    Par Olivier2610 dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 12/04/2020, 21h05
  2. Macro qui fonctionne en pas à pas et se plante en exécution automatique
    Par Steve999 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 23/04/2018, 11h31
  3. [XL-2013] Macro qui fonctionne en pas à pas mais pas en "direct"
    Par alex955 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 06/10/2017, 17h24
  4. [LibreOffice][Tableur] Une macro qui fonctionne sous Linux mais pas sous windows
    Par ludox62 dans le forum OpenOffice & LibreOffice
    Réponses: 3
    Dernier message: 07/01/2014, 21h26
  5. [XL-2007] Macro qui fonctionne sur un poste mais pas sur un autre
    Par Runsh63 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 08/06/2012, 10h24

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