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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2017
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2017
    Messages : 22
    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 confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    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 169
    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
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2017
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2017
    Messages : 22
    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 confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    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 169
    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
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2017
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2017
    Messages : 22
    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 confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    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 169
    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.

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