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 :

Recherche selon dates et heures


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Octobre 2012
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Bâtiment

    Informations forums :
    Inscription : Octobre 2012
    Messages : 24
    Points : 26
    Points
    26
    Par défaut Recherche selon dates et heures
    Bonsoir tout le monde
    J'aurais besoin d'un peu d'aide

    J'ai besoin dans un fichier Excel

    1 " colonne en B ( j'ai besoin de sélectionné toutes les dates qui ont moins de 3 jours ont enlevant les week donc là j'ai besoin de sélectionner les dates du 21 au 25 novembre)
    2 " colonnes en A ( j'ai besoin en 1 de supprimer toutes les heures qui sont avant 16h sur la date sur la plus ancienne donc le 21, ensuite supprimée les lignes qui ont une heure après 16 sur la date du 25)

    Merci pour votre aide je vous joins le dossier

    Bonne soirée
    Fichiers attachés Fichiers attachés

  2. #2
    Membre éclairé Avatar de Nako_lito
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2008
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Mai 2008
    Messages : 793
    Points : 827
    Points
    827
    Par défaut
    Avec ou sans macro excel ?
    - La dernière fois que j'ai testé ca fonctionnait !
    - Vous n'avez rien modifié ?
    - Non ! Je suis pas idiot non plus.
    - ....
    - Enfin si, juste le fichier .dll, mais a 4Ko, ca devait pas être important.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Octobre 2012
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Bâtiment

    Informations forums :
    Inscription : Octobre 2012
    Messages : 24
    Points : 26
    Points
    26
    Par défaut
    Avec macro excel si possible

    Merci pour votre aide

  4. #4
    Membre éclairé Avatar de Nako_lito
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2008
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Mai 2008
    Messages : 793
    Points : 827
    Points
    827
    Par défaut
    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
    Option Explicit
    Public Sub main()
        Dim range_ As Range
        Dim i, x As Integer
     
        With ThisWorkbook.Sheets("info")
     
            x = .UsedRange.SpecialCells(xlCellTypeLastCell).Row
            For i = 2 To x
                If Day(CDate(Format(.Range("B" & i).Value, "dd/mm/yyyy"))) < Day(Now) - 3 Then
                    If Hour(CDate(Format(.Range("A" & i).Value, "hh:MM:ss"))) < Hour("16:00") Then
                        .Range("A" & i).Clear
                    End If
                    .Range("B" & i).Clear
                Else
                    If Hour(CDate(Format(.Range("A" & i).Value, "hh:MM:ss"))) > Hour("15:00") Then
                        .Range("A" & i).Clear
                    End If
                End If
            Next i
        End With
    End Sub
    la boucle passe sur toute les lignes.

    Par ligne, test si la date < j-3.
    Si elle est inférieur a j-3, test si l'heure indiqué est inférieur a 16h
    Si elle est pas inférieur a j-3, test si l'heure est supérieur a 16h

    si les conditions sont remplies, efface la cellule.

    Par contre, dans ta demande, tu fais mention du jour le plus ancien et du jour le plus récent. Pour quelle raison ?

    Du coup, il se peut qu'il y ai un ajustement à faire sur mon code.
    Mais je pense que ton interrogation principale était sur "comment tester l'heure et le jour d'une cellule ?"

    Dans le code :
    Day, retourne le jour passé en paramètre, ici j'ai casté ta cellule au format jj/mm/aaaa, donc il retour le jj, et test si c'est > ou < a Day(j-3)
    Pareil pour l'heure avec Hour, sur un format hh:mm, est ce que c'est supérieur ou pas a 16:00.
    - La dernière fois que j'ai testé ca fonctionnait !
    - Vous n'avez rien modifié ?
    - Non ! Je suis pas idiot non plus.
    - ....
    - Enfin si, juste le fichier .dll, mais a 4Ko, ca devait pas être important.

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Octobre 2012
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Bâtiment

    Informations forums :
    Inscription : Octobre 2012
    Messages : 24
    Points : 26
    Points
    26
    Par défaut
    merci tous a l'air de fonctionné par contre

    comment intégrer cette macro a la suite de celle ci pour quel s'exécute a la suite ?

    Merci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        Sheets("RFID").Select
        Columns("A:L").Select
        Selection.Copy
        Windows("info.xlsm").Activate
        Range("A1").Select
        ActiveSheet.Paste
        application.CutCopyMode = False

  6. #6
    Membre éclairé Avatar de Nako_lito
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2008
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Mai 2008
    Messages : 793
    Points : 827
    Points
    827
    Par défaut
    oublie tout tes .select, .activate.

    Ca ne sert a rien dans le code que je t'ai fournis.

    est ce que la feuille a traiter fait parti du classeur d'ou est exécuter la macro ?
    - La dernière fois que j'ai testé ca fonctionnait !
    - Vous n'avez rien modifié ?
    - Non ! Je suis pas idiot non plus.
    - ....
    - Enfin si, juste le fichier .dll, mais a 4Ko, ca devait pas être important.

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Octobre 2012
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Bâtiment

    Informations forums :
    Inscription : Octobre 2012
    Messages : 24
    Points : 26
    Points
    26
    Par défaut
    oui la feuille fait partie de la macro

    avec ton code je voudrait le mettre a la suite d'une macro que j'ai deja creez et qui l'exctute en meme temps

  8. #8
    Membre éclairé Avatar de Nako_lito
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2008
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Mai 2008
    Messages : 793
    Points : 827
    Points
    827
    Par défaut
    tu peux faire :

    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
    sub nomDeTaMéthode()
     
        'copier ici les DIM de mon code
     
        'ici tu mets ton code : 
     
        '....
     
        ' jusque là
     
        'ici tu colle mon code du With ThisWorkbook.Sheets("info")
     
     
        'jusqu'au end with
     
    end sub
    - La dernière fois que j'ai testé ca fonctionnait !
    - Vous n'avez rien modifié ?
    - Non ! Je suis pas idiot non plus.
    - ....
    - Enfin si, juste le fichier .dll, mais a 4Ko, ca devait pas être important.

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Octobre 2012
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Bâtiment

    Informations forums :
    Inscription : Octobre 2012
    Messages : 24
    Points : 26
    Points
    26
    Par défaut
    j'ai un message d'erreur

    variable de controle For déjà utilisée ensuite probleme avec range

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub Pro()
     
       Dim range_ As Range
       Dim i, x As Integer
    après mon code ensuite le tien


    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
    Sheets("info").Select
     Columns("A:L").Select
     Selection.Copy
     Windows("info.xlsm").Activate
     Range("A1").Select
     ActiveSheet.Paste
     application.CutCopyMode = False 
     
     
     With ThisWorkbook.Sheets("info")
     
            x = .UsedRange.SpecialCells(xlCellTypeLastCell).row
            For i = 2 To x
                If Day(CDate(Format(.Range("B" & i).Value, "dd/mm/yyyy"))) < Day(Now) - 3 Then
                    If Hour(CDate(Format(.Range("A" & i).Value, "hh:MM:ss"))) < Hour("16:00") Then
                        .Range("A" & i).Clear
                    End If
                    .Range("B" & i).Clear
                Else
                    If Hour(CDate(Format(.Range("A" & i).Value, "hh:MM:ss"))) > Hour("15:00") Then
                        .Range("A" & i).Clear
                    End If
                End If
            Next i
        End With

  10. #10
    Membre éclairé Avatar de Nako_lito
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2008
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Mai 2008
    Messages : 793
    Points : 827
    Points
    827
    Par défaut
    Tu as des balises pour le code.

    Le code que tu as avancé comportait des erreurs, notament, tu ne ferme jamais ta méthode avec un end sub.

    De plus, je t'avais conseillé de virer les lignes avec des .select, .activate etc qui ne servent à rien. Il faut passer par des références absolues pour faire des actions de copie, collage, appele de range etc.

    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
    Sub Pro()
     
       Dim range_ As Range
       Dim i, x As Integer
     
     
        'le code que tu as mis avant le miens, je sais pas ce qu'il est censé faire donc je l'ai viré.
     
     
            x = .UsedRange.SpecialCells(xlCellTypeLastCell).row
            For i = 2 To x
                If Day(CDate(Format(.Range("B" & i).Value, "dd/mm/yyyy"))) < Day(Now) - 3 Then
                    If Hour(CDate(Format(.Range("A" & i).Value, "hh:MM:ss"))) < Hour("16:00") Then
                        .Range("A" & i).Clear
                    End If
                    .Range("B" & i).Clear
                Else
                    If Hour(CDate(Format(.Range("A" & i).Value, "hh:MM:ss"))) > Hour("15:00") Then
                        .Range("A" & i).Clear
                    End If
                End If
            Next i
        End With
    end sub
    - La dernière fois que j'ai testé ca fonctionnait !
    - Vous n'avez rien modifié ?
    - Non ! Je suis pas idiot non plus.
    - ....
    - Enfin si, juste le fichier .dll, mais a 4Ko, ca devait pas être important.

  11. #11
    Nouveau membre du Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Octobre 2012
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Bâtiment

    Informations forums :
    Inscription : Octobre 2012
    Messages : 24
    Points : 26
    Points
    26
    Par défaut
    Bonjour

    je vient de mettre dans ton code dans le fichier excel

    mais j'ai une erreur au niveaux du / x = .UsedRange.SpecialCells(xlCellTypeLastCell).Row

    UsedRange = référence incorrecte / ca peux venir d'ou ?

    Je joint le ficher avec la macro


    merci

    bonne journée
    Fichiers attachés Fichiers attachés

  12. #12
    Membre éclairé Avatar de Nako_lito
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2008
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Mai 2008
    Messages : 793
    Points : 827
    Points
    827
    Par défaut
    une erreur de ma part dans mon dernier post, j'ai oublié le with thisworkbook.sheets("Info") avant l'affectation du X.
    - La dernière fois que j'ai testé ca fonctionnait !
    - Vous n'avez rien modifié ?
    - Non ! Je suis pas idiot non plus.
    - ....
    - Enfin si, juste le fichier .dll, mais a 4Ko, ca devait pas être important.

Discussions similaires

  1. [Toutes versions] Autoriser la saisie selon date et heure
    Par Sylvie_076 dans le forum Excel
    Réponses: 12
    Dernier message: 04/10/2014, 21h18
  2. [XL-2007] Filtre de données selon date/heure
    Par chouchou60 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 06/06/2012, 11h32
  3. [XL-2010] Besoin Usf qui permet recherche selon intervalle de date
    Par duplaly dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 15/03/2011, 21h49
  4. Additionner des heures selon Date et heure
    Par samawati dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 11/04/2008, 19h47
  5. [DEBUTANT]recherche de date - heure la plus proche
    Par tripper.dim dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 13/06/2007, 12h15

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