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 :

Trier un tableau par rapport aux dates


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 22
    Par défaut Trier un tableau par rapport aux dates
    Bonjour à tous !

    J'ai un tableau rempli de dates et j'aimerais que, grace à visual basic, je puisse récupérer les données de la ligne d'une des dates en fonction justement de sa date..

    Je vais donner un exemple pour essayer d'etre plus claire :

    Voici mon tableau:
    Données Date
    2 12/04/09
    3 11/04/09

    Et j'aimerais que visual basic compare la date de la premiere ligne du tableau à celle d'aujourd'hui (20/04/09) et contabilise une ligne par rapport à 1 critère:
    Combien de jours y'a t'il de différence?
    Soit -15jours, soit +30 jours ou soit entre les deux.


    J'ai créer une TextBox afin d'y inscrire la date d'aujourd'hui et un bouton de commande "calculer" .


    Je n'ai aucune idée pour commencer, quelqu'un peut m'aider?

    Merci beaucoup !!

  2. #2
    Membre Expert Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Par défaut
    les date c'est que des date passé des date futur, les 2?
    -15jours, soit +30 jours tu fait aujourd'hui-date, date -aujourd'hui une "valeur absolue" de la différence de jour?

    pour avoir la date d'aujourd'hui il suffit de taper date pas la pein de demander al'utilisateur
    essaye
    Dans le cas ou ton tableau commence à la deuxième ligne
    les date sont en 2ème colonne, on écrit le résultat en 3ème colonne, il n'y a rien dans la deuxième colonne après les date
    On regarde la différence de jour sans se préoccuper si c'est une différence positive ou négative

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private Sub CommandButton1_Click()
    Dim i As Integer
     
    For i = 2 To Range("B65536").End(xlUp).Row
        If Abs(Cells(i, 2) - Date) < 15 Then
            Cells(i, 3) = "moins de 15 jours de différence"
        ElseIf Abs(Cells(i, 2) - Date) <= 30 Then
            Cells(i, 3) = "entre 30 et 15 jours de différence" 'cela corespond aussi a une différence de 15 jour et de 30 jour exactement
        ElseIf Abs(Cells(i, 2) - Date) > 30 Then
            Cells(i, 3) = "Plus de 30 jours de différence"
        End If
    Next i
    end sub
    Si ca ne te convient pas et que tu n'arrive pas a adapter n'hésite pas

  3. #3
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 22
    Par défaut
    Merci pour ta réponse!

    Ca peut etre des dates passées et futures.

    A quoi correspond Range("B65536")?

    Et en fait c'est ok mais ça m'affiche " moins de 15 jours de différence" ect..
    sauf que je souhaite que ça me contabilise le nombre de lignes à moins de 15 jours ou plus de 30 jours.

  4. #4
    Membre Expert Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Par défaut
    le range correspond à la dernière ligne de la colonne regarde ce lien de Ouskel'n'or

    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
    Private Sub CommandButton1_Click()
    Dim i As long
    dim moins15 as long
    dim entre15et30 as long
    dim plus30 as long
    entre15et30 =0
    moins15 =0
    plus30 =0
    For i = 2 To Range("B65536").End(xlUp).Row
        If Abs(Cells(i, 2) - Date) < 15 Then
           ' Cells(i, 3) = "moins de 15 jours de différence"
           moins15 =moins15 +1
        ElseIf Abs(Cells(i, 2) - Date) <= 30 Then
            'Cells(i, 3) = "entre 30 et 15 jours de différence" 'cela corespond aussi a une différence de 15 jour et de 30 jour exactement
            entre15et30 =entre15et30 +1
        ElseIf Abs(Cells(i, 2) - Date) > 30 Then
           ' Cells(i, 3) = "Plus de 30 jours de différence"
           plus30 =plus30 +1
        End If
    Next i
    ' a toi de faire ce que tu veux des variable moins15, entre15et30 et plus30
    'exemple une message box
    MsgBox "Moins de 15 jours de différence : " & moins15 & vbCrLf & "Entre  15 et 30 jours de différence : " & entre15et30 & vbCrLf & "Plus de 30 jours de différence : " & plus30
    end sub

  5. #5
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 22
    Par défaut
    Bon je l'ai modifié à ma sauce et j'ai une erreur d'incompatibilité de type.

    Voici ce que j'ai fait pour la partie -20 jrs

    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
    Dim moins20 As Long
    Dim entre20et35 As Long
    Dim plus35 As Long
    entre20et35 = 0
    moins20 = 0
    plus35 = 0
    
    client$ = Choix_client.Value
     prev_livr$ = "Prévision de livraison " & Format$(Num_sem)
         Sheets(prev_livr$).Select
         ActiveSheet.Range("$A$1:$S$1066").AutoFilter Field:=12, Criteria1:=client$
        
         prev_livr$ = "'Prévision de livraison " & Format$(Num_sem)
         prev_livr$ = prev_livr$ & "'!"
         
         somme = 0
         
         For i = 2 To 10000
            cellule$ = "L" & Format(i)
            contenu$ = ActiveSheet.Range(cellule$).Value
            
    
    
            If Abs(Cells(i, 2) - Date) < 20 Then         
                 ' Cells(i, 3) = "moins de 20 jours de différence"
                     moins20 = moins20 + 1
                     Sheets(client$).Select
                         If Num_sem < 26 Then
                         cellule$ = Chr$(65 + Num_sem)
                            ElseIf Num_sem < 52 Then
                            cellule$ = "A" & Chr$(64 + Num_sem - 25)
                                 Else
                                 cellule$ = "BA"
                         End If
        
                        cellule$ = cellule$ & "18"
                        Range(cellule$).Select
                        ActiveCell.FormulaR1C1 = somme
    L'erreur arrive à la ligne souligné. En fait, ça correspond à une cellule "cells(i,2)"? Laquelle?

    Merci pour tout Krovax!

  6. #6
    Membre Expert Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Par défaut
    tu a quoi sur la ligne i (regarde la valeur de i au moment ou ca plante dans affiachage affiche les variable local) et la deuxième colonne?

    Rq : a mon avis For i = 2 To 10000 n'est pas une bonne idée du tout à moins que tu soit sure d'avoir toujours 10000 ligne remplie.

  7. #7
    Membre Expert Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Par défaut
    Citation Envoyé par Krovax Voir le message
    les date sont en 2ème colonne, on écrit le résultat en 3ème colonne, il n'y a rien dans la deuxième colonne après les date
    Du coup il faut utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For i = 2 To Range("A65536").End(xlUp).Row
    par de la fin de la collonne A et cherche la première ligne remplie
    et non
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For i = 2 To Range("B65536").End(xlUp).Row
    par de la fin de la collonne B et cherche la première ligne remplie

    mon code corrigé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    For i = 2 To Range("B65536").End(xlUp).Row
        If Abs(Cells(i, 1) - Date) < 15 Then
           moins15 =moins15 +1
        ElseIf Abs(Cells(i, 1) - Date) <= 30 Then
            entre15et30 =entre15et30 +1
        ElseIf Abs(Cells(i, 1) - Date) > 30 Then
           plus30 =plus30 +1
        End If
    Next i
    MsgBox "Moins de 15 jours de différence : " & moins15 & vbCrLf & "Entre  15 et 30 jours de différence : " & entre15et30 & vbCrLf & "Plus de 30 jours de différence : " & plus30
    end sub
    Cells(n,m) corespond à la cellule ligne n colonne m

  8. #8
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 22
    Par défaut
    Bon ça fait toujours pareil, ca saute le code à partir de cette ligne.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For i = 2 To Range("B65536").End(xlUp).Row
    C'est peut etre du au fait que "Range("B65536").End(xlUp).Row" = 1 lors de l'erreur?

  9. #9
    Membre Expert Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Par défaut
    je corrigr que a moitié désolé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For i = 2 To Range("A65536").End(xlUp).Row
    C'est un A pas un B
    si ca ne marche pas fait le test derniereligne = Range("A65536").End(xlUp).Row

  10. #10
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 22
    Par défaut
    Bon toujours pas.. derniereligne = 1 donc bon, je vais laisser tomber pour le moment.. je vais faire une autre partie de mon projet visual basic et puis j'y reviendrais plus tard..

    Merci beaucoup Kreuvar, et puis, pour la suite je sais déja que j'aurais besoin de toi ^^

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

Discussions similaires

  1. ordonner les parents par rapport aux dates des children
    Par fphenix dans le forum Requêtes
    Réponses: 4
    Dernier message: 11/03/2011, 14h29
  2. Decouper un tableau par rapport aux ecarts entre valeurs
    Par yoloosis dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 02/03/2010, 18h32
  3. Réponses: 4
    Dernier message: 16/01/2008, 11h08
  4. realiser un tri par rapport aux dates
    Par le_viet dans le forum Général VBA
    Réponses: 3
    Dernier message: 24/04/2007, 16h05
  5. Trier un tableau par rapport à un autre tableau
    Par deaven dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 02/05/2005, 10h27

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