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 :

Sélection de lignes selon certains critères


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Inscrit en
    Octobre 2007
    Messages
    129
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 129
    Points : 55
    Points
    55
    Par défaut Sélection de lignes selon certains critères
    Hello!

    Je bloque actuellement sur un petit programme en VBA.
    J'ai créé des fichiers qui sont alimentés tous les jours par des utilisateurs qui renseignent ligne par ligne des informations. La première colonne contient des dates qui sont dans l'ordre. Mais il arrive que certains jours, des fichiers ne soient pas renseignés. Nous pouvons donc avoir plusieurs lignes de suite avec les dates 21/10/2007, puis 22/10/2007, puis ensuite 24/10/2007
    J'ai un autre fichier qui rassemble toutes les lignes renseignées par mes collègues. Je souhaite faire une récupération automatique pendant la nuit sur les fichiers de mes collègues. On clique sur un bouton qui ouvre un formulaire. On remplit la date de début de récupération, et la date de fin, puis l'heure à laquelle on souhaite que le fichier opère.
    Mon programme fonctionne mais si je mets certaines dates, ça ne fonctionne plus. Mon problème est dans la sélection des cellules.
    Je me suis inspiré de ce que j'ai pu voir sur ce site pour faire ce code, mais ça fonctionne que dans certaines conditions.


    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
     
    Sub RecupDonnées()
     
    Dim Plage As Range, NoLigne As Long, NoCol As Integer, Adres, Valeur
    Dim NoLigne2 As Long, NoCol2 As Integer, Adres2, Valeur2
     
    Range("A2:Q65536").Sort Key1:=Range("A3"), Order1:=xlAscending, Header:= _
    xlGuess, OrderCustom:=1, MatchCase:=True, Orientation:=xlTopToBottom, _
    DataOption1:=xlSortNormal
     
    Set Plage = Range("A3:A" & Range("A65536").End(xlUp).Row)
     
    For Each Cell In Plage
     
    If Cell >= vDateDébut Then
    NoLigne = Cell.Row
    NoCol = Cell.Column
    Adres = "A" & NoLigne
     
    Exit For
    Exit Sub
    End If
     
    If Cell > vDateFin Then
     
    Exit For
    Exit Sub
     
    End If
     
    If Cell < vDateDébut Then
    NoLigne = Cell.Row
    NoCol = Cell.Column
    Adres = "A" & NoLigne + 1
    Valeur = Cell
     
    End If
     
    Next
     
    For Each Cell In Plage
     
    If Cell <= vDateFin Then
    NoLigne2 = Cell.Row
    NoCol2 = Cell.Column
    Adres2 = "Q" & NoLigne2
    Valeur2 = Cell
     
    End If
     
    Next
     
    Range(Adres, Adres2).Select
    'Range(Adres, Adres2).Copy
    'Windows("consolidé.xls").Activate
    '[B4].Select
    'Selection.End(xlDown).Select
    'ActiveCell.Offset(1, 0).Select
    'Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
     
    'Else
     
    'Exit Sub
    '
    End If
     
    End Sub
    Imaginons que dans le fichier que je souhaite copier, les données vont du 17/10/2007 au 21/10/2007, si je rentre dans mon formulaire date début: 05/10/2007 et date fin 10/10/2007, alors ça plante.
    Je suis sûr qu'il y a un moyen plus simple et plus rapide de faire cette sélection...

    Merci d'avance pour votre aide!

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Points : 2 443
    Points
    2 443
    Par défaut
    Salut
    Comme j'ai la flemme, j'ai juste trafiqué le code donné
    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
     
    Sub RecupDonnées()
    Dim Adres As String
    Dim X As Long
    Dim Y As Long
    Intersect(UsedRange, Range("A2:Q65536")).Sort Key1:=Range("A3"), Order1:=xlAscending, Header:= _
    xlGuess, OrderCustom:=1, MatchCase:=True, Orientation:=xlTopToBottom, _
    DataOption1:=xlSortNormal
    For X = 3 To [A65536].End(xlUp).Row
        If Range("A" & X) >= vDateDébut Then
            Adres = "A" & X
            Exit For
        End If
    Next X
    If Adres = "" Then
        MsgBox "Pas de données"
        Exit Sub
    End If
    For Y = X To [A65536].End(xlUp).Row
        If Range("A" & Y) >= vDateFin Then Exit For
    Next Y
    Range(Range(Adres), Range("Q" & Y)).Select
    End Sub
    Me manque des données précises pour faire mieux
    A+

  3. #3
    Expert éminent

    Avatar de Maxence HUBICHE
    Homme Profil pro
    Développeur SQLServer/Access
    Inscrit en
    Juin 2002
    Messages
    3 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur SQLServer/Access

    Informations forums :
    Inscription : Juin 2002
    Messages : 3 842
    Points : 9 197
    Points
    9 197
    Par défaut
    Pourquoi n'utilises-tu pas le filtre élaboré, en copiant la plage selon tes critères de date, à la suite du tableau existant ?

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 563
    Détails du profil
    Informations personnelles :
    Âge : 61
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 563
    Points : 1 691
    Points
    1 691
    Par défaut
    tu as peut etre aussi un probleme de format de date, ou le fait d'entrer des dates qui n'existe pas n'est pas pris en compte. je te donne pas une solution, mais une piste a creuser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub voirdate()
    u = Format(Application.WorksheetFunction.Min(Range("a:a")), "dd/mm")
    v = Format(Application.WorksheetFunction.Max(Range("a:a")), "dd/mm")
    datedébut = InputBox("datedébut", , u)
    datefin = InputBox("datefin", , v)
    End Sub

  5. #5
    Membre du Club
    Inscrit en
    Octobre 2007
    Messages
    129
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 129
    Points : 55
    Points
    55
    Par défaut
    Merci pour vos contributions!

    Ce qui me pose problème, c'est la sélection des cellules.
    Comme je l'indiquais dans mon premier post, mon code fonctionne dans certains cas mais pas tous.
    Si je prends mon exemple de départ, si j'ai des données qui vont du 17 au 21/10/2007, ça fonctionne si vDateDébut = 18/10/2007 et vDateFin=20/10/2007.
    Par contre, si vDateDébut=05/10/2007 et vDateFin=15/10/2007, alors ça plante, alors que je voudrais que ça ne fasse rien.
    De même, si vDateDébut=23/10/2007 et vDateFin=25/10/2007, ça plante...

    Je me demandais si il était possible d'écrire un code plus simple.

    Merci

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Points : 2 443
    Points
    2 443
    Par défaut
    Salut
    Bel exemple de précision !

    Tu as un wagon de propositions, et aucune ne fait ce que tu demandes ?
    Dans ce cas, fais du pas-à-pas et indique où ça plante et avec quelles variables et quel code !

    Si tu veux qu'on puisse t'aider, arrête de penser qu'on peut regarder ce qui se passe par dessus ton épaule ! Ma boule de cristal est en entretien !
    A+

  7. #7
    Expert éminent

    Avatar de Maxence HUBICHE
    Homme Profil pro
    Développeur SQLServer/Access
    Inscrit en
    Juin 2002
    Messages
    3 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur SQLServer/Access

    Informations forums :
    Inscription : Juin 2002
    Messages : 3 842
    Points : 9 197
    Points
    9 197
    Par défaut
    Evites Inputbox quand tu veux autre chose que du texte.
    L'aide t'indique clairement que cela te renvoie du texte !!!!!

    Utilises plutôt Application.InputBox, et regarde comment on fait pour renvoyer une date dans l'aide

Discussions similaires

  1. [XL-2000] Modifier une cellule selon certains critères
    Par Nicolas Plan dans le forum Excel
    Réponses: 2
    Dernier message: 28/04/2009, 10h18
  2. Supprimer ligne selon 2 critères
    Par fidecourt dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 02/04/2009, 16h23
  3. Redirection de Page en javascript selon certains critères
    Par Anthonyyy dans le forum Général JavaScript
    Réponses: 12
    Dernier message: 12/03/2009, 20h08
  4. [ListView/GridView]Afficher une ligne selon un critère de l'item
    Par anthyme dans le forum Windows Presentation Foundation
    Réponses: 5
    Dernier message: 28/06/2008, 11h28
  5. [VBA-E] sélection plusieurs lignes selon critères
    Par clairefranclieu dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 06/09/2006, 17h22

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