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 :

Selection de tableaux depuis une liste déroulante [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    apt
    apt est déconnecté
    Membre éclairé
    Inscrit en
    Mai 2002
    Messages
    867
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 867
    Par défaut Selection de tableaux depuis une liste déroulante
    Bonsoir à tous,

    J'aimerais, depuis une liste déroulante et selon la valeur choisie, sélectionner deux tableaux à la fois qui se trouvent cote à cote et commencent depuis la même ligne.

    Par exemple si je choisi la valeur 3 dans la liste déroulante, on va chercher cette valeur dans la plage "N8:N100", et s'il y a succès de la recherche, je devrais sélectionner le premier tableau (Colonne A à K) plus le deuxième tableau (Colonne M et N).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("A" & y - 1 & ":N" & y + nbl)
    Mais j'ai un petit souci : Lorsque la valeur se trouve dans la colonne en plusieurs fois, la recherche est faussée induisant en faute la sélection désirée.


    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
    Private Sub Worksheet_Change(ByVal Target As Range)
        Dim x&, y&, nbl&, nblA&, nblM&, LastLg&, i&
        Dim PrntRng As Range
        Application.ScreenUpdating = False
        If Target.Address = "$B$1" And Target.Count = 1 Then
     
            x = Val(Target.Value)
            y = -1
            On Error Resume Next
            '--
            LastLg = [N65000].End(xlUp).Row
            i = 1
            Do Until i < LastLg
                '--
                y = Application.Match(x, Range("N" & i & ":N" & LastLg))
                If Range("M" & y).Value = "Récapitulatif N°" Then
                    i = LastLg
                Else
                    i = y + 1
                End If
                '---
            Loop
            '---
     
            If y < 1 Then
                MsgBox "Numéro (" & x & ") est introuvable"
            Else
                CommandButton1.Caption = "Imprimer " & vbCrLf & "Le tableau " & Range("B1")
                nblA = Range("A" & y - 1).CurrentRegion.Rows.Count - 2
                nblM = Range("M" & y - 1).CurrentRegion.Rows.Count - 2
     
                nbl = IIf(nblA > nblM, nblA, nblM)
                Set PrntRng = Range("A" & y - 1 & ":N" & y + nbl)
                PrntRng.Name = "Print_Area"
                Range("Print_Area").Select
            End If
        End If
        Application.ScreenUpdating = True
    End Sub

  2. #2
    apt
    apt est déconnecté
    Membre éclairé
    Inscrit en
    Mai 2002
    Messages
    867
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 867
    Par défaut
    Bonsoir,

    Peut-être un exemple qui peut bien éclaircir les choses.
    Fichiers attachés Fichiers attachés

  3. #3
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Lig As Long, NblA As Long, NblM As Long, Nbl As Long
    Dim Prem As String
    Dim c As Range
     
    Application.ScreenUpdating = False
    If Target.Address = "$B$1" Then
        If Target.Value <> "" Then
            Set c = Range("N:N").Find(Target.Value, LookIn:=xlValues, lookat:=xlWhole)
            If Not c Is Nothing Then
                Do
                    Prem = c.Address
                    If InStr(c.Offset(0, -1), "Récapitulatif N°") > 0 Then
                        Lig = c.Row - 1
                        Set c = Nothing
                        Exit Do
                    End If
                    Set c = Range("N:N").FindNext(c)
                Loop While Not c Is Nothing And c.Address <> Prem
            End If
            If Lig = 0 Then
                MsgBox "N° " & Target.Value & " introuvable"
            Else
                CommandButton1.Caption = "Imprimer " & vbCrLf & "Le tableau " & Target.Value & " Ligne " & Lig
                NblA = Range("A" & Lig).CurrentRegion.Rows.Count
                NblM = Range("M" & Lig).CurrentRegion.Rows.Count
                Nbl = Application.Max(NblA, NblM)
                Range("A" & Lig & ":N" & Lig + Nbl - 1).Select
            End If
        End If
    End If
    End Sub

  4. #4
    apt
    apt est déconnecté
    Membre éclairé
    Inscrit en
    Mai 2002
    Messages
    867
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 867
    Par défaut
    Bonjour mercatog,

    Ca marche très bien.

    Merci.

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

Discussions similaires

  1. Changer de page depuis une liste déroulante
    Par okoweb dans le forum jQuery
    Réponses: 9
    Dernier message: 21/08/2009, 10h58
  2. Supprimer des fichiers depuis une liste déroulante
    Par Flo88 dans le forum VBA Access
    Réponses: 7
    Dernier message: 28/03/2008, 09h14
  3. Réponses: 6
    Dernier message: 12/01/2008, 22h53
  4. Réponses: 12
    Dernier message: 18/10/2007, 10h34
  5. Réponses: 12
    Dernier message: 28/11/2006, 15h34

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