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 :

Je patauge dans une gestion d'erreur [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre éclairé

    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    791
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 791
    Points : 688
    Points
    688
    Par défaut Je patauge dans une gestion d'erreur
    Bonjour,

    J'ai une macro qui entre autre doit aller chercher un fichier txt et mettre son contenu dans une cellule

    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
    'insérer le txt
            fichier = feuille2.Cells(j, 11)
            'initialiser data a vide
            Data = ""
            'changer ici le nom de répertoire
            URL = "G:\dossier\dossier\"
            On Error Resume Next
     
                    With feuille3.QueryTables.Add(Connection:="TEXT;" & URL & fichier, Destination:=feuille3.Range("$A$1"))
                        .Name = ActiveWorkbook.Connections.Count + 1
                        .FieldNames = True
                        .RowNumbers = False
                        .FillAdjacentFormulas = False
                        .PreserveFormatting = True
                        .RefreshOnFileOpen = False
                        .RefreshStyle = xlInsertDeleteCells
                        .SavePassword = False
                        .SaveData = True
                        .AdjustColumnWidth = True
                        .RefreshPeriod = 0
                        .TextFilePromptOnRefresh = False
                        .TextFilePlatform = 1252
                        .TextFileStartRow = 1
                        .TextFileParseType = xlDelimited
                        .TextFileTextQualifier = xlTextQualifierDoubleQuote
                        .TextFileConsecutiveDelimiter = False
                        .TextFileTabDelimiter = False
                        .TextFileSemicolonDelimiter = False
                        .TextFileCommaDelimiter = False
                        .TextFileSpaceDelimiter = False
                        .TextFileColumnDataTypes = Array(1)
                        .TextFileTrailingMinusNumbers = True
                        .Refresh BackgroundQuery:=False
                    End With
                    On Error GoTo 0
                    'compter combien de ligne il fait
                    derlgn = feuille3.Cells(feuille3.Columns(1).Cells.Count, 1).End(xlUp).Row
                    'recomplier les lignes en une cellule
                    For m = 1 To derlgn
                        If m = 1 Then
                            Data = Data & feuille3.Cells(m, 1)
                        Else
                            Data = Data & Chr(10) & feuille3.Cells(m, 1)
                        End If
                    Next m
            'ranger le résultat dans la cellule
            TXT = Replace(Data, Chr(9), " ")
     
            'effacer les liens fait avec les fichiers s'il y
            If ActiveWorkbook.Connections.Count > 0 Then
                For n = 1 To ActiveWorkbook.Connections.Count
                    ActiveWorkbook.Connections(n).Delete
                Next n
            End If
    le j étant le bon n° de ligne qu'on a trouvé précédement

    tant que le fichier existe, tout se passe merveilleusement

    Mon probleme, c'est quand le fichier n'existe pas
    Je pensais avoir été maligne en suivant le tuto sur les erreurs et avoir mis "On Error Resume Next" juste avant d'inserer et "On Error GoTo 0" juste apres pour le neutraliser

    De fait, ca fonctionne, si le fichier n'existe pas, j'ai une petite pop up polie qui le signale et ca ne plante pas ma macro
    Si le fichier existe, ca s'affiche tranquilement

    Par contre, apres avoir rencontré un fichier qui n'existe pas, ca n'affiche plus rien par la suite, meme sur les fichiers qui en ont

    Donc imaginons que j'ai un fichier pour le client 1 et le client 3 mais pas pour le client 2

    J'ouvre excel
    Je choisis le client 1, pas de probleme, le txt s'affiche
    Je choisis le client 2, pas de probleme, tout s'affiche et une pop up me préviens qu'il n'y a pas de txt
    Je choisis le client 3, patatra, le txt ne s'affiche pas
    je rechoisis le client 1 qui marchait il y a deux minutes, patatra, le txt ne s'afiche pas

    Si je ferme excel, que je le réouvre et que je fais client 1 et puis client 3 et puis retour au client 1, ca fonctionne

    Donc je présume que je ferme mal quelque chose quand je rencontre une absence de fichier, et que ca fout le bordel par la suite.
    Mais je ne trouve pas ce que je peux faire pour corriger ca.

    J'avais bien testé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Set filesys = CreateObject("Scripting.FileSystemObject")
    if filesys.FileExists(URL & fichier) then
    blabla
    else
    blibli
    end if
    Ca marche parfaitement pour mon pc, mais pas sur les pc des utilisateurs finaux, et leur activer des modules de plus n'est pas disponnible

    Est-ce que quelqu'un a une idée de ce que je pourrais faire pour ne pas avoir de plantage macro quand le fichier n'existe pas ET continuer a afficher les fichiers qui fonctionnent.

  2. #2
    Membre habitué Avatar de LouiMz
    Homme Profil pro
    Inscrit en
    Février 2010
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 104
    Points : 154
    Points
    154
    Par défaut
    Bonjour,

    Une petite question: celà ne serait-il pas plus simple d'executer la macro si et seulement si le fichier existe?

    Par exemple avec une fonction qui renvoi un booleen à partir du chemin d'acces au fichier:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Public Function fichier_existe(ByVal chemin As String) As Boolean
     
    'Fonction analysant le chemin d'un fichier
    'Si le fichier n'est pas présent dans le répertoire alors on renvoie False
     
    If Dir(chemin) = "" Then
        fichier_existe = False
    Else
        fichier_existe = True
    End If
     
    End Function
    Cordialement
    Cordialement

  3. #3
    Membre éclairé

    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    791
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 791
    Points : 688
    Points
    688
    Par défaut
    si, c'est beaucoup plus simple, mais je ne savais pas le faire <note la solution dans son carnet>

    Solution adoptée, merci

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

Discussions similaires

  1. [AC-2007] Faire une gestion d'erreur du type date dans une TextBox
    Par andy331 dans le forum IHM
    Réponses: 3
    Dernier message: 05/02/2010, 19h35
  2. Réponses: 6
    Dernier message: 08/10/2006, 16h49
  3. [VBA-E] Dysfonctionnement dans la gestion des erreurs
    Par Choco49 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 14/06/2006, 11h44
  4. Réponses: 4
    Dernier message: 05/06/2006, 11h34
  5. Modification d'un texte dans une fenetre "d'erreur"
    Par PAUL87 dans le forum Access
    Réponses: 8
    Dernier message: 21/10/2005, 13h12

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