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 :

Problème avec le code VBA


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2013
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Problème avec le code VBA
    Bonjour à tous,

    voila je debute sur VBA j'ai une liste de date et heure j'essaye de trier tous ca en supprimant les dimanches et jours feriés ainsi que d'afficher les heures de 06:00 à 22h00.
    voici le code que j'ai essayé de faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub Suppr_dimanche_jours_feries()
    Dim i As Integer
    Application.ScreenUpdating = False
    For i = 0 To 21753
     If (Cells(i, 4) = "dimanche" Or Cells(i, 5) = "1 janvier" Or Cells(i, 5) = "25 décembre" Or Cells(i, 5) = "11 novembre" Or Cells(i, 6) < "06:00" Or Cells(i, 6) > "22:00") Then
    Cells(i, 1).EntireRow.Delete
    i = i - 1
    End If
    Next
    Application.ScreenUpdating = True
    End Sub
    sauf que j'ai 21753 lignes et c'est très long à exécuter
    Merci d'avance pour votre aide
    PS (j'utilise Excel 2010)

  2. #2
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 674
    Points
    18 674
    Par défaut

    Bonjour.

    Poste ton code avec l'icône prévue à cet effet ! (Ok)

    Ensuite attention aux sauts de ligne car tel que présenté, message d'erreur. (Ok)

    Enfin, c'est quoi la question ?


    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  3. #3
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 907
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 907
    Points : 28 882
    Points
    28 882
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Tu traites les dates et heures comme des chaînes de caractères.
    La première chose à faire est déjà de comprendre comment gérer les dates et heures dans excel.
    A moins que ce soit impératif d'utiliser le VBA, c'est tout à fait possible de le faire avec les fonctions natives d'excel.
    La lecture d'un de ces tutoriaux me semble indispensable Utiliser les fonctions Date et Heure sous Excel 2007, Les Fonctions Date/Heure et l'excellent didacticiel de Didier Gonard Comprendre et gérer les dates sous Excel et en VBA

    Bonjour,
    Juste pour illustrer le fait qu'il n'est pas obligatoire d'utiliser le VBA pour additionner des dates en sautant les week-end
    On considère que le 1er jour de l'année se trouve soit dans une feuille paramètre soit simplement référencée dans le gestionnaire des noms et est nommée wkDate
    Le calendrier annuel commence en A2
    En A2 la formule est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =wkDate + 1 + ((JOURSEM(wkDate;2)=5) * 2) + ((JOURSEM(wkDate;2)=6) * 1)
    En A3 la formule est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =A2 + 1 +  2 * (JOURSEM(A2;2)=5)
    Tirer ensuite la formule sur +/- 312 cellules
    On peut également améliorer cette formule en ayant deux paramètres supplémentaires pour les Samedi et Dimanche avec valeur VRAI ou FAUX. Ainsi si l'on veux un calendrier avec ou sans les samedi et dimanche le calendrier pourra dynamiquement se construire.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  4. #4
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2013
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Merci d'abord pour vos réponses,
    j'utilise le Vba pour faire quelque chose d'automatique j'ai plusieurs fichier excel du même type pour éviter de refaire a chaque fois la même chose j'essaye de créer un code ou une macro le problème c'est que j'ai beaucoup de mal en programmation voila pourquoi j'ai solliciter votre aide.

    la colonne 1 c'est les données les autres de heures, dates et jours c'est moi qui les a rajouté .


    si vous avez une autre façon de faire je suis prenante
    encore merci pour votre aide

  5. #5
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 907
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 907
    Points : 28 882
    Points
    28 882
    Billets dans le blog
    53
    Par défaut
    Bonjour
    Citation Envoyé par mimiaqu Voir le message
    Merci d'abord pour vos réponses,
    j'utilise le Vba pour faire quelque chose d'automatique j'ai plusieurs fichier excel du même type pour éviter de refaire a chaque fois la même chose
    En utilisant un modèle et les fonctions natives d'excel on peut également faire quelques choses d'automatique me semble t'il.
    De toutes manières avec ou sans VBA, la première chose à faire est de comprendre comment gérer les dates et les heures d'où la suggestion de lire les tutos sur la question.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  6. #6
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 674
    Points
    18 674
    Par défaut

    Manuellement, c'est faisable aussi via des filtres.

    Tu peux utiliser aussi l'enregistreur de macros pour voir ainsi le code généré lors de cette manipulation.

    Sinon vis à vis de ton code, pour les colonnes 4 & 5, c'est plus rapide en utilisant la méthode Find.

    Pour les heures de la colonne 6, je ne vois rien d'autre qu'un filtre …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  7. #7
    Invité
    Invité(e)
    Par défaut Bonjour test ç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
    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
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    Sub Suppr_dimanche_jours_feries()
    Dim I As Integer
    Application.ScreenUpdating = False
    For I = 21753 To 1 Step -1
     If Ferie(Cells(I, 4)) = True Or Cells(I, 6) < "06:00" Or Cells(I, 6) > "22:00" Then
    Cells(I, 1).EntireRow.Delete
    I = I - 1
    End If
    Next
    Application.ScreenUpdating = True
    End Sub
    Public Function Ferie(UneDate As Long, Optional DimanchesOuiNon As Boolean) As Boolean
    ' Par défaut la fonction ne considère pas que les Dimanche de Pâques
    ' et de Pentecôte sont fériés
    ' il suffit de renseigner l'argument DimanchesOuiNon à True à l'appel de la fonction
    ' pour les considérer comme fériés
    If IsSamediDimange(UneDate) Then
        Ferie = True
        Exit Function
    End If
    If IsNull(DimanchesOuiNon) Then DimanchesOuiNon = False
     
    Dim JFF ' table des fériés fixes (jours)
    Dim MFF ' table des fériés fixes (mois)
    JFF = Array(1, 1, 8, 14, 15, 1, 11, 25)
    MFF = Array(1, 5, 5, 7, 8, 11, 11, 12)
    Dim J As Long
    Ferie = False
    ' Recherche dans la table des jours fériés fixes
    For J = 0 To 7
    If Day(UneDate) = JFF(J) And Month(UneDate) = MFF(J) Then
    Ferie = True
    Exit Function
    End If
    Next J
    Dim FM ' contient les dates des lundis de Paques
    'FM = Array(38824, 39181, 39531, 39916, 40273, 40658, 41008, _
    '41365, 41750, 42100, 42457, 42842, _
    '43192, 43577, 43934, 44291, 44675, _
    '45026, 45383, 45768, 46118, 46475, _
    '46860, 47210, 47595)
     
    FM = Paque(Year(UneDate))
    ' Recherche si la date est un lundi de paques
    ' ou jeudi de l'ascension
    ' ou lundi de pentecôte
    'For J = 0 To 24 ' à changer si vous allez au delà de 2030
    If (UneDate = FM) Or (UneDate = FM + 39) Or (UneDate = FM + 50) Then
    Ferie = True
    Exit Function
    End If
    ' si DimanchesOuiNon est vrai
    ' on teste les dimanches de Pâques et Pentecote
     
     
    If DimanchesOuiNon Then
    If (UneDate = FM - 1) Or (UneDate = FM + 48) Then
    Ferie = True
    Exit Function
    End If
    End If
    'Next J
    End Function
    Private Function IsSamediDimange(J) As Boolean
    If Weekday(J) = 1 Then IsSamediDimange = True
    If Weekday(J) = 7 Then IsSamediDimange = True
    End Function
    Private Function MDDIF(A, B) As Long
    MDDIF = DateDiff("d", A, B)
    End Function
    Private Function MuMod(V, D)
    MuMod = Int(V / D)
    End Function
    Private Function Paque(Annee As Integer) As Date
    Dim A, B, C, D, E, F, G, H, I, J, K, l, M, N, O
    C = Annee - 1900
    D = C Mod 19
    E = (D * 7) + 1
    F = Int(E / 19)
    G = 11 * D - F + 4
    H = G Mod 29
    I = Int(C / 4)
    J = C - H + I + 31
    l = J Mod 7
    K = J Mod 7
    l = 25 - H - K
    M = CDate("31/03/" & Annee)
    Paque = M + l
    End Function

Discussions similaires

  1. [XL-2003] Problème avec un code en Vba Excel
    Par NEC14 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 15/06/2009, 09h34
  2. Problème avec un code VBA
    Par NEC14 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 08/08/2008, 13h57
  3. Problème avec un code Vba Excel
    Par NEC14 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 23/10/2007, 16h43
  4. [MySQL] OU est le probléme avec ce code ??
    Par adlich dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 27/04/2006, 17h47
  5. Problème avec open() [Excel VBA]
    Par heddicmi dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 28/11/2005, 16h21

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