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 :

Mise en forme conditionnelle avec fonction Dir


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2017
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2017
    Messages : 22
    Points : 4
    Points
    4
    Par défaut Mise en forme conditionnelle avec fonction Dir
    Bonjour,

    Voici mon problème :
    Je doit réaliser une mise en forme conditionnelle sur plusieurs fichier qui sont dans un même dossier (je ne connais ni le nombre, ni les noms des fichiers).
    Pour cela j'ai donc utilisé la fonction Dir avec un While, et j'arrive parfaitement a ouvrir tous les fichiers que je veux.
    Je me suis aidé de l'enregistreur de macro automatique pour réaliser ma mise en forme conditionnelle et elle marche parfaitement sur mon PREMIER fichier.

    Problème : lorsque ma macro ouvre mon deuxième fichier j'ai l'erreur 5 qui apparait.

    J'ai essayé de "forcer" la macro pour qu'elle n'ouvre pas le premier fichier pas commence directement avec le deuxième et ma mise en forme fonctionne mais pose exactement le même problème pour le troisième fichier. et ainsi de suite ...

    Les fichier sont identique en terme de format et autre et la mise en forme est la même, je ne comprend donc pas ou se trouve le problème...

    Je met mes fichier en pièce jointe.
    Pour le tester il vous faut faire X copie du fichier "TLSE - copie 2" et les mettre dans un répertoire, puis écrire le chemin de ces fichiers dans la cellule qui correspond dans le fichier Test Délais qui contient la macro.


    Je suis à votre disposition pour toute info supplémentaire.

    Merci de votre réponse
    Fichiers attachés Fichiers attachés

  2. #2
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 073
    Points : 9 853
    Points
    9 853
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    montres-nous le code complet, c'est mieux qu'un fichier à décortiquer, sans parler des problèmes éventuels de sécurité

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2017
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2017
    Messages : 22
    Points : 4
    Points
    4
    Par défaut
    Désolé, je ne sais pas "citer" correctement les codes :

    l'erreur intervient toujours sur la ligne en gras



    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
    Dim Nom As String
    
    Sub ouvrir_fichiers()
    Application.ScreenUpdating = False
    
    chemin = Range("B4").Value & "\"
    Nom = Dir(chemin)
    
    While Nom <> ""
    
        fichier = chemin & Nom
        Workbooks.Open fichier
    
    conditionnelle
    
        Workbooks(Nom).Save
        Workbooks(Nom).Close
    
        Nom = Dir()
    
    Wend
    End Sub
    
    Sub conditionnelle()
    
    Range("I5").Select
        Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
            "=ET($D5=""Délai apparent"";I$2<SERIE.JOUR.OUVRE($I$2;$E5))"    
    Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
        With Selection.FormatConditions(1).Interior
            .Pattern = xlSolid
            .PatternColorIndex = xlAutomatic
            .Color = 16757387
            .TintAndShade = 0
            .PatternTintAndShade = 0
        End With
        Selection.FormatConditions(1).StopIfTrue = False
        
        Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
            "=ET($D5=""Délai total"";I$2<SERIE.JOUR.OUVRE($I$2;$E5))"
        Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
        With Selection.FormatConditions(1).Interior
            .Pattern = xlSolid
            .PatternColorIndex = xlAutomatic
            .ThemeColor = xlThemeColorAccent1
            .TintAndShade = 0.599993896298105
            .PatternTintAndShade = 0
        End With
        Selection.FormatConditions(1).StopIfTrue = False
        Range("I5").Select
        Selection.Copy
        Range("I5:AF6").Select
        Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
            SkipBlanks:=False, Transpose:=False
        Application.CutCopyMode = False
    End Sub

  4. #4
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 073
    Points : 9 853
    Points
    9 853
    Billets dans le blog
    5
    Par défaut
    On va déjà un peu nettoyer tout ça :

    - tu travailles sur des objets actifs : tu sélectionnes une cellule et tu agis ensuite dessus / Tu n'indiques pas la feuille donc tu travailles sur la feuille active / tu travailles sur le classeur actif (c'est ce point qui me semble à première vue le plus suspect)

    - l'indentation du code n'est pas le plus pratique pour lire ton code


    ici, j'ai ajouté deux variables modules : pour utiliser un objet "classeur" dans la procédure conditionnelle / pour utiliser un "NomFeuille" sur laquelle on doit travailler

    J'ai gommé au possible l'utilisation des objets actifs, et remis des filiations complètes d'objet (MonClasseur.MaFeuille.MaPlage.Macondition etc...)

    tu dois renseigner la variable "NomFeuille" de la procédure ouvrir_fichiers, et ensuite tester si le comportement est encore identique.
    ceci va déjà éliminer beaucoup d'hypothèses

    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
    Dim Nom As String
    Dim Wb As Workbook
    Dim NomFeuille As String
     
    Sub ouvrir_fichiers()
    Application.ScreenUpdating = False
        chemin = Range("B4").Value & "\"
        NomFeuille = "MaFeuille"
        Nom = Dir(chemin)
     
        While Nom <> ""
            Set Wb = Workbooks.Open(chemin & Nom)
                conditionnelle
                Wb.Close True
            Nom = Dir()
        Wend
    Application.ScreenUpdating = True
    End Sub
     
    Sub conditionnelle()
    With Wb.Worksheets(NomFeuille)
        With .Range("I5")
            .FormatConditions.Add Type:=xlExpression, Formula1:="=ET($D5=""Délai apparent"";I$2<SERIE.JOUR.OUVRE($I$2;$E5))"
            .FormatConditions(.FormatConditions.Count).SetFirstPriority
     
            With .FormatConditions(1)
                With .Interior
                    .Pattern = xlSolid
                    .PatternColorIndex = xlAutomatic
                    .Color = 16757387
                    .TintAndShade = 0
                    .PatternTintAndShade = 0
                End With
                .StopIfTrue = False
            End With
     
            .FormatConditions.Add Type:=xlExpression, Formula1:="=ET($D5=""Délai total"";I$2<SERIE.JOUR.OUVRE($I$2;$E5))"
            .FormatConditions(.FormatConditions.Count).SetFirstPriority
     
            With .FormatConditions(1)
                With .Interior
                    .Pattern = xlSolid
                    .PatternColorIndex = xlAutomatic
                    .ThemeColor = xlThemeColorAccent1
                    .TintAndShade = 0.599993896298105
                    .PatternTintAndShade = 0
                End With
                .StopIfTrue = False
            End With
            .Copy
        End With
     
        .Range("I5:AF6").PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
    End With
    Application.CutCopyMode = False
    End Sub

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2017
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2017
    Messages : 22
    Points : 4
    Points
    4
    Par défaut
    Bonsoir,

    Merci de vos réponses,

    La macro étant sur mon PC de travail je n'ai pas pu tester le code proposé en commentaire je le ferai demain matin, mais en attendant j'ai essayé mon code sur mon pc portable (perso) et il marche parfaitement, donc je ne pense pas que le problème vienne du code...

    Quel pourrait-être le problème dans ce cas ??

    Merci a vous

  6. #6
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 073
    Points : 9 853
    Points
    9 853
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    est-il possible de basculer sur la proposition que j'ai faite, qui reprend littéralement les mêmes traitements que toi, mais avec un peu plus de rigueur dans l'écriture ?

    partant de là, il te sera beaucoup plus facile de trouver ton erreur, en déroulant en mode "pas à pas" ta procédure pour inspecter tes variables.

  7. #7
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2017
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2017
    Messages : 22
    Points : 4
    Points
    4
    Par défaut
    Donc je viens d'essayer ton code, je n'ai eu as modifier qu'une seule chose pour le faire tourner (le "MaFeuille"), normalement tu confirmera...

    Mais j'ai encore exactement le même problème, a savoir :

    Erreur d'exécution '5':
    Argument ou appel de procédure incorrect

    Cette erreur arrive sur la ligne 23 lors de la manip. sur le deuxième fichier :

    [code] .FormatConditions.Add Type:=xlExpression, Formula1:="=ET($D5=""Délai apparent"";I$2<SERIE.JOUR.OUVRE($I$2;$E5))"[/coçde]

  8. #8
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 073
    Points : 9 853
    Points
    9 853
    Billets dans le blog
    5
    Par défaut
    On va tester si c'est pas le fait de traiter conditionnelle dans la boucle Dir() qui pose problème

    voici un petit aménagement, on collecte la liste des fichiers à traiter, et réalise le traitement après la boucle While/Wend
    j'ai prévu 1000 fichiers Max, on peut bien sûr baisser le curseur mais ça ne va pas plomber la procédure

    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
    Dim Nom As String
    Dim Wb As Workbook
    Dim NomFeuille As String
    Dim ListeFichier(1 To 1000), NbFichiers As Long
    Sub ouvrir_fichiers()
    Dim i As Long
    Application.ScreenUpdating = False
        chemin = Range("B4").Value & "\"
        NomFeuille = "MaFeuille"
        Nom = Dir(chemin)
     
        While Nom <> ""
            NbFichiers = NbFichiers + 1
            ListeFichier(NbFichiers) = chemin & Nom
            Nom = Dir()
        Wend
     
        For i = 1 To NbFichiers
            Set Wb = Workbooks.Open(ListeFichier(i))
            conditionnelle
            Wb.Close True
        Next i
    Application.ScreenUpdating = True
    End Sub
     
     
    Sub conditionnelle()
    With Wb.Worksheets(NomFeuille)
        With .Range("I5")
            .FormatConditions.Add Type:=xlExpression, Formula1:="=ET($D5=""Délai apparent"";I$2<SERIE.JOUR.OUVRE($I$2;$E5))"
            .FormatConditions(.FormatConditions.Count).SetFirstPriority
     
            With .FormatConditions(1)
                With .Interior
                    .Pattern = xlSolid
                    .PatternColorIndex = xlAutomatic
                    .Color = 16757387
                    .TintAndShade = 0
                    .PatternTintAndShade = 0
                End With
                .StopIfTrue = False
            End With
     
            .FormatConditions.Add Type:=xlExpression, Formula1:="=ET($D5=""Délai total"";I$2<SERIE.JOUR.OUVRE($I$2;$E5))"
            .FormatConditions(.FormatConditions.Count).SetFirstPriority
     
            With .FormatConditions(1)
                With .Interior
                    .Pattern = xlSolid
                    .PatternColorIndex = xlAutomatic
                    .ThemeColor = xlThemeColorAccent1
                    .TintAndShade = 0.599993896298105
                    .PatternTintAndShade = 0
                End With
                .StopIfTrue = False
            End With
            .Copy
        End With
     
        .Range("I5:AF6").PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
    End With
    Application.CutCopyMode = False
    End Sub

  9. #9
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2017
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2017
    Messages : 22
    Points : 4
    Points
    4
    Par défaut
    Merci de ta réponse mais j'avais déjà testé (d'une façon différente) en créant ma mise en forme en dehors de mon Dir et j'avais encore cette même erreur.

    Et je viens de m'apercevoir que sur 3 autres pc de mon travail la macro fonctionne normalement, j'ai l'impression que c'est uniquement sur mon pc que le problème arrive

  10. #10
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 073
    Points : 9 853
    Points
    9 853
    Billets dans le blog
    5
    Par défaut
    Alors on continue sur une autre piste :

    1) que contient ceci : Range("B4").Value ?
    2) en utilisant ma dernière proposition, peux-tu nous montrer la liste des fichiers qui sont placés dans le tableau ListeFichiers() ?

    si au sein d'un parc informatique, 3 postes fonctionnent et pas le quatrième, on cherchera en priorité à trouver la différence de configuration ou de logiciel entre les 3 machines Vs la machine impactée

  11. #11
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2017
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2017
    Messages : 22
    Points : 4
    Points
    4
    Par défaut
    Alors je viens d'essayer et effectivement même avec ta dernière proposition ça ne fonctionne pas,
    dans Range("B4").Value il y a tout simplement le chemin d'accès au dossier qui contient les fichiers.

    Tu veux que je te montre juste une capture d'écran avec la liste des mes fichiers ou que je te montre les fichiers en eux même ??

  12. #12
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 073
    Points : 9 853
    Points
    9 853
    Billets dans le blog
    5
    Par défaut
    la copie écran suffira

    ce qui m'embête, c'est que si ça fonctionne bien au premier fichier, il n'y a pas de raison de penser qu'on est sur un problème de mappage de lecteur reseau ou de restriction d'accès

    mais bon, je préfère quand même visualiser

  13. #13
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2017
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2017
    Messages : 22
    Points : 4
    Points
    4
    Par défaut
    Je n'est pas compris en quoi la capture d'écran va t'aider mais voila :
    Nom : Capture2.PNG
Affichages : 144
Taille : 2,4 Ko

  14. #14
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 073
    Points : 9 853
    Points
    9 853
    Billets dans le blog
    5
    Par défaut
    On ne s'est pas comprit

    en fait, je voulais visualiser ce qui est dans la variable ListeFichiers() qui est censée collecter, pour chaque fichier, l'association Chemin & NomFichier

    bon là, on a le nom des fichiers, montre-nous simplement maintenant ce que contient ton Range("B4") pour visualiser le chemin.
    Si ce chemin contient des infos confidentielles (comme un nom d'utilisateur ou de société) tu remplaces ça par XXXX

    Il n'y a pas de fichiers cachés dans ce dossier ? C'est un dossier sur un Reseau ou sur le PC ?

  15. #15
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2017
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2017
    Messages : 22
    Points : 4
    Points
    4
    Par défaut
    Alors, dans le range il y a ca :

    Nom : Capture3.PNG
Affichages : 181
Taille : 6,6 Ko

    Et dans la variable il y bien les bonnes informations car la macro ouvre bien les bons fichiers

    Pièce jointe 256330

    j'ai essayé les deux, c'est-à-dire avec un fichier sur le réseau que j'ai créé moi même et aussi sur le bureau du pc donc non il n'y as pas de fichier caché ou autre...

  16. #16
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2017
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2017
    Messages : 22
    Points : 4
    Points
    4
    Par défaut
    Tu as eu le temps de regarder joe.levrai ??

    En tous cas merci de ton aide...

Discussions similaires

  1. [XL-2010] Mise en forme conditionnelle avec fonction
    Par Compte temporaire dans le forum Excel
    Réponses: 1
    Dernier message: 18/09/2015, 15h48
  2. Mise en forme conditionnelle avec appel de fonction personnalisée
    Par Patnel dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 08/02/2013, 10h45
  3. [XL-2007] Mise en forme conditionnelle avec Date et fonction AUJOURDHUI()
    Par ghisunit dans le forum Excel
    Réponses: 2
    Dernier message: 29/04/2011, 21h46
  4. Mise en forme conditionnelle ou fonction si?
    Par emilie31 dans le forum Excel
    Réponses: 4
    Dernier message: 24/10/2007, 11h03
  5. Réponses: 4
    Dernier message: 29/03/2007, 09h10

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