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 :

Inserer a la bonne position en fonction d'une date [XL-2016]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2015
    Messages : 3
    Par défaut Inserer a la bonne position en fonction d'une date
    Bonjour tout le monde,

    Je sui assez nouveau en VBA. J'ai une feuille [/contents/1103-tableur-comment-l-utiliser excel] avec dans la colonne A des dates et en colonne B un score qui correspond a chaque date. Je récupère d'une autre feuille la date et son score sur deux variables respectivement, Date_Formated et score.
    Je vous envoie le bout de code correspondant a cette tache. Les date commencent a la ligne 2. Je veux donc que excel compare ma date avec les dates deja présentes une a une ( des jours peuvent être manquant, il n'y a pas un nouveau score tous les jours) et des que ma nouvelle date est supérieur ou egale a une des date deja présente il insère un ligne en dessous et inséré la nouvelle date avec le niveau score sur la ligne qu'il vient de créer. Le problème est qu'avec mon code la nouvelle date va toujours a la fin.

    Merci d'avance pour votre aide

    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
     
    For y = 2 To ligne
     
                test_date = .Cells(y, 1).Value
     
     
                    If Date_Formated >= test_date Then
     
                    .Range("A" & y + 1).EntireRow.Insert
     
                    .Range("A" & y + 1).Value = Date_Formated
     
                    .Range("B" & y + 1).Value = Score
     
                    .Range("E" & y + 1).Value = subject
     
                    ligne_trouvee = True
                    MsgBox "2"
     
                    End If
     
                    If ligne_trouvee = True Then Exit For
     
                Next

  2. #2
    Membre Expert Avatar de antonysansh
    Homme Profil pro
    Chargé d'études RH
    Inscrit en
    Mai 2014
    Messages
    1 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé d'études RH
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2014
    Messages : 1 115
    Par défaut
    Bonjour avi34,

    Le bout de code me parait correct.

    Regarde en pas à pas le résultat du test If Date_Formated >= test_date Then pour voir si la comparaison se fait bien comme tu la souhaites.
    Vérifie bien aussi le format des deux variables test_date et Date_Formated


    Autre chose, si le test est vrai, tu passes la variable ligne_trouvee à True pour ensuite (sorti du If) faire un Exit For. Il faut dans ce cas penser à remettre la variable a False si elle est réutilisée dans la suite du code.

    Pour régler ce détail, tu peux tester ce petit code en pas à pas et voir comme il se comporte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub test()
        Dim i&
        For i = 0 To 5
            If i = 2 Then
                '...
                Exit For
            End If
        Next
    End Sub
    Pas besoin de variable Bool pour savoir si je dois faire mon Exit For car la condition du If me l'indique déjà.

    EDIT :
    Pour ma comparaison de date, si tes dates sont bien au format date il est préférable de passer par des fonctions VB qui gèrent des dates.
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub test2()
        Dim d1 As Date, d2 As Date
            d1 = Now()
            d2 = DateAdd("d", 3, d1)
                MsgBox DateDiff("d", d1, d2)
                MsgBox DateDiff("d", d2, d1)
    End Sub

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2015
    Messages : 3
    Par défaut
    Merci beaucoup antonysansh ,

    Effectivement, en utilisant datediff(...) >=0 pour comparer les dates le code marche beaucoup mieux. J'ai aussi fait le tri en démarrant par la fin au lieu du debut,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for y=ligne to y=2 step -1
    Avec ces deux changement les dates sont placées au bon endroit.
    Merci beaucoup pour ton aide

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

Discussions similaires

  1. url en fonction d'une date
    Par silwebdesign dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 18/09/2006, 19h41
  2. Déterminer le jour en fonction d'une date
    Par Flagny dans le forum Access
    Réponses: 3
    Dernier message: 19/07/2006, 10h36
  3. afficher le jour en fonction d'une date
    Par oceane751 dans le forum Général JavaScript
    Réponses: 13
    Dernier message: 05/03/2006, 22h20
  4. [Dates] message en fonction d'une date
    Par chouchouboy dans le forum Langage
    Réponses: 14
    Dernier message: 24/02/2006, 17h31
  5. Réponses: 2
    Dernier message: 03/10/2005, 12h00

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