VBA - Sélectionner une colonne avec deux critères

Romao

XLDnaute Nouveau
Bonjour à tous,

Je tombe sur un os ! Un de plus... Je souhaiterais pouvoir retrouver une colonne par la sélection de deux critères. Deux parce que pour une année, il y a deux saisons.

Je souhaiterais donc, en sélectionnant une période (2009 ou 2010) puis une catégorie (Printemps ou Automne) par InputBox, que la macro me retrouve le contenu de la colonne en question (par exemple, classement automne 2009, donc (C3:C5)) et me copie en feuil2 :

- La période puis la catégorie dans la première colonne dispo ligne 1 et 2
- Me colle en dessous le contenu du tableau

Comme vous pourrez le voir, je n'ai même pas réussi à terminer mon essai, bloquant à l'étape de sélection des données du tableau... Au passage, les données du tableau commencent toujours en ligne 3 et se termine toujours en ligne 5 (même chose au collage).

Est-ce que quelqu'un saurait m'aider ? :(

Merci par avance et au plaisir de vous lire !
 

Pièces jointes

  • Recherche multi1.xlsm
    14.5 KB · Affichages: 82

Grand Chaman Excel

XLDnaute Impliqué
Re : VBA - Sélectionner une colonne avec deux critères

Salut Romao,

Voici une proposition... il y a sûrement moyen de faire plus optimisé et plus rapide. Mais c'est un départ :

Code:
Sub test2()

Dim Per As Integer 'année
Dim Cat As String 'catégorie
Dim Cel As Range
Dim Derlig As Integer
Dim DerCol As Integer
Dim rg As Range, rg2 As Range

Per = InputBox("Entrez la période souhaitée")
Cat = InputBox("Entrez la catégorie souhaitée")

Set rg = Sheets("Feuil1").Range("B1")
Do Until IsEmpty(rg)    'on passe de colonne en colonne
    If rg = Per And rg.Offset(1, 0) = Cat Then  'on trouve correspondance
        Derlig = rg.Offset(1000, 0).End(xlUp).Row
    
    With ThisWorkbook.Sheets("Feuil2")  'on cherche 1re colonne vide
        Set rg2 = .Range("A1")
        Do Until IsEmpty(rg2)
            Set rg2 = rg2.Offset(0, 1)
        Loop
        Range(rg, rg.Offset(Derlig - 1, 0)).Copy Destination:=rg2   'on copy
    End With
    
    Exit Sub
    End If
Set rg = rg.Offset(0, 1)
Loop

End Sub

A+
 

Romao

XLDnaute Nouveau
Re : VBA - Sélectionner une colonne avec deux critères

Bonjour ô Grand Chaman :)

Effectivement, c'est nickel... J'avais testé un loop mais avec While et non Until. Et je n'avais pas pensé à copier tout en une fois au lieu de faire copier la période et la catégorie puis les données.

Un grand merci :)
 

JNP

XLDnaute Barbatruc
Re : VBA - Sélectionner une colonne avec deux critères

Bonjour le fil :),
Une solution sans boucle avec Evaluate
Code:
Sub test2()
Dim Per As String 'année
Dim Cat As String 'catégorie
Dim Col As Integer
Dim DerLig As Integer
Dim DerCol As Integer
Per = InputBox("Entrez la période souhaitée")
Cat = InputBox("Entrez la catégorie souhaitée")
Col = Evaluate("=IF(ISNA(MATCH(""" & Per & Cat & """,A1:AA1&A2:AA2,0)),0,MATCH(""" & Per & Cat & """,A1:AA1&A2:AA2,0))")
If Col = 0 Then MsgBox "Periode inexistante !": Exit Sub
DerLig = Range("A35000").End(xlUp).Row + 1
With Sheets("Feuil2")
Range(Cells(1, Col), Cells(DerLig, Col)).Copy .Cells(1, .Range("AA1").End(xlToLeft).Column + 1)
End With
End Sub
Bonne journée :cool:
 

Discussions similaires

Réponses
6
Affichages
276

Statistiques des forums

Discussions
312 595
Messages
2 090 103
Membres
104 378
dernier inscrit
neovo