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 plage selon données d'inputbox [XL-365]


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Septembre 2020
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Septembre 2020
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Sélection de plage selon données d'inputbox
    Bonjour à tous !
    Après avoir éclusé le forum, je ne m'en sors toujours pas - et étant débutant et autodidacte, je sens bien qu'il me manque une info et j'aurais bien besoin de vos lumières d'experts.
    Voici mon problème.

    J'ai un tableau à cinq colonnes : Nom - Date - Montant - Référence - Dispatch

    Dans ce tableau, les données sont classées par date puis, pour chaque date, par référence. Le nombre de lignes par date n'est pas fixe.
    Je voudrais une macro qui lance une inputbox dans laquelle on rentrerait une date, puis qui sélectionnerait toutes les lignes correspondant à la date saisie et les copierait dans un feuillet à part.
    Pour l'instant j'ai une macro, mais qui ne sélectionne / copie-colle que la dernière ligne à la date voulue, or j'aurais besoin qu'elle les sélectionne toutes...

    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
    Dim i As Integer
    Dim nb_lig As Integer
    Dim ds As Date
    nb_lig = Range("A" & Rows.Count).End(xlUp).Row
    ds = InputBox("Date souhaitée")
     
    For i = 2 To nb_lig
        Set zone = Range("A" & i & ":E" & i)
        If Cells(i, 2) = ds Then Range("A" & i & ":E" & i).Copy
     
    Next
    Sheets.Add After:=ActiveSheet
    ActiveSheet.Paste
     
    End Sub
    Comment pourrais-je faire ?
    Merci à tous

  2. #2
    Membre expert
    Avatar de Igloobel
    Homme Profil pro
    Développeur ERP - VBA et Formateur bureautique
    Inscrit en
    Septembre 2005
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur ERP - VBA et Formateur bureautique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 869
    Points : 3 442
    Points
    3 442
    Billets dans le blog
    1
    Par défaut
    Bonjour à tous

    je me suis permis d'ajouter quelques variables
    je te propose une affectation de nb_lig un peu plus courte (que perso j'utilise très souvent) même si la tienne fonctionne très bien

    voici donc une version de ton code qui fonctionne:

    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
    Sub test()
     
        Dim i As Integer
        Dim nb_lig As Integer
        Dim ds As Date
        Dim Der_Lign_Sel As Long
        Dim Deb_Lign_Sel As Long
     
     
    '    nb_lig1 = Range("A" & Rows.Count).End(xlUp).Row
        nb_lig = [A1].End(xlDown).Row
     
        ds = InputBox("Date souhaitée")
        Deb_Lign_Sel = 0
     
        For i = 2 To nb_lig
            If Deb_Lign_Sel = 0 Then
                If Cells(i, 2).Value = ds Then
                    Deb_Lign_Sel = i
                End If
            Else
                If Cells(i, 2).Value <> ds And Cells(i - 1, 2).Value = ds Then
                    Der_Lign_Sel = i - 1
                End If
            End If
        Next
     
        Range(Cells(Deb_Lign_Sel, 1), Cells(Der_Lign_Sel, 5)).Copy
     
        Sheets.Add After:=ActiveSheet
        ActiveSheet.Paste
     
    End Sub
    il y a une gestion de ta feuille2 à faire
    et moi pour une gestion plus simple de l'affaire je serais passé par un tableau en mémoire ou par un dictionnaire

    si tu as besoin de plus d'explication n'hésites pas

    A bientôt
    Ils ne savaient pas que c'était impossible ... du coup ils l'ont fait (Mark Twain)

    n'oubliez pas de si les messages vous aide ou sont pertinents et de mettre quand cela est !

  3. #3
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 240
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 240
    Points : 5 655
    Points
    5 655
    Par défaut
    Bonjour,

    Autre solution en passant par un filtre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
        Dim i As Long, NbVal As Long, nb_lig As Long
        Dim ds As Date
        nb_lig = Range("A" & Rows.Count).End(xlUp).Row
        ds = InputBox("Date souhaitée")
        ActiveSheet.Range("A1:E" & nb_lig).AutoFilter Field:=2, Criteria1:=ds
        NbVal = Range("_FilterDataBase").Resize(, 1).SpecialCells(xlCellTypeVisible).Count - 1
        Range("_FilterDataBase").Resize(, 5).SpecialCells(xlCellTypeVisible).Copy
        Sheets.Add After:=ActiveSheet
        ActiveSheet.Paste
    Cdlt

  4. #4
    Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Septembre 2020
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Septembre 2020
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par Igloobel Voir le message
    Bonjour à tous

    je me suis permis d'ajouter quelques variables
    je te propose une affectation de nb_lig un peu plus courte (que perso j'utilise très souvent) même si la tienne fonctionne très bien

    voici donc une version de ton code qui fonctionne:

    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
    Sub test()
     
        Dim i As Integer
        Dim nb_lig As Integer
        Dim ds As Date
        Dim Der_Lign_Sel As Long
        Dim Deb_Lign_Sel As Long
     
     
    '    nb_lig1 = Range("A" & Rows.Count).End(xlUp).Row
        nb_lig = [A1].End(xlDown).Row
     
        ds = InputBox("Date souhaitée")
        Deb_Lign_Sel = 0
     
        For i = 2 To nb_lig
            If Deb_Lign_Sel = 0 Then
                If Cells(i, 2).Value = ds Then
                    Deb_Lign_Sel = i
                End If
            Else
                If Cells(i, 2).Value <> ds And Cells(i - 1, 2).Value = ds Then
                    Der_Lign_Sel = i - 1
                End If
            End If
        Next
     
        Range(Cells(Deb_Lign_Sel, 1), Cells(Der_Lign_Sel, 5)).Copy
     
        Sheets.Add After:=ActiveSheet
        ActiveSheet.Paste
     
    End Sub
    il y a une gestion de ta feuille2 à faire
    et moi pour une gestion plus simple de l'affaire je serais passé par un tableau en mémoire ou par un dictionnaire

    si tu as besoin de plus d'explication n'hésites pas

    A bientôt

    Merveilleux, ça fonctionne nickel ! Trop, trop bien. Et au passage j'ai appris de nouvelles fonctions que je ne connaissais pas.

    Merci à tous les deux et très bonne journée à vous !

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

Discussions similaires

  1. [XL-2013] Macro création de sélection de plage de données puis création de graphique
    Par paul1004 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 20/07/2017, 15h09
  2. [XL-2016] TCD - Problème de sélection de plage de données variables
    Par Aliocha7775 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 26/05/2017, 11h10
  3. Macro Excel pour sélection de plage de données
    Par ginus489 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 22/09/2015, 11h40
  4. [XL-2003] Macro pour sélection de plage de données
    Par 3vince-fr dans le forum Excel
    Réponses: 5
    Dernier message: 22/05/2014, 11h40
  5. Réponses: 1
    Dernier message: 09/03/2007, 07h52

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