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

  • Initiateur de la discussion Initiateur de la discussion Romao
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

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+
 
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 🙂
 
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 😎
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

  • Question Question
Microsoft 365 INDEX equiv
Réponses
1
Affichages
158
Retour