Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

un SELECT dans excel ?

5 réponses
Avatar
Rekam
Bien le bonsoir!

Je voulais savoir s'il était de possible de faire un équivalent de SELECT *
FROM maTable par une macro Excel sur un tableau Excel.
Je m'explique. J'ai un tableau de données et je voudrais récupérer un RANGE
qui ne contient que les lignes dont la 1ère case du tableau vaut 3 (par
exemple). En sql, je vois bien comment faire, mais là, je sèche.

Si qqun à une idée, je suis preneur ! Merci d'avance!

5 réponses

Avatar
Laurent M
Bonjour,

Le filtre automatique ne convient pas? S'il s'agit d'extraire les
données ailleurs, le filtre élaboré peut très bien faire le travail.
Précise tes besoins.

A+

Laurent
Avatar
Bourby
bonsoir,
si le "tableau" est une plage continue de cellules (et non pas un Array)
nommée monTableau dans Excel:
Sub selectionner()
Dim maPlageTableau As Range, maSelection As Range
Set maPlageTableau = [monTableau]
For i = 1 To maPlageTableau.Rows.Count
If maPlageTableau(i, 1).Value = 3 Then
If maSelection Is Nothing Then
Set maSelection = maPlageTableau(i, 1)
Else
Set maSelection = Union(maSelection, maPlageTableau(i, 1))
End If
End If
Next i
maSelection.Select
End Sub

Est-ce que cela convient?

Bourby


"Rekam" a écrit dans le message news:

Bien le bonsoir!

Je voulais savoir s'il était de possible de faire un équivalent de SELECT
*

FROM maTable par une macro Excel sur un tableau Excel.
Je m'explique. J'ai un tableau de données et je voudrais récupérer un
RANGE

qui ne contient que les lignes dont la 1ère case du tableau vaut 3 (par
exemple). En sql, je vois bien comment faire, mais là, je sèche.

Si qqun à une idée, je suis preneur ! Merci d'avance!


Avatar
LSteph
Bonsoir Rekam,
A part que tu peux vouloir soit la façon d'obtenir soit le résultat de ton
select autrement:


1-d'abord tu peux le faire un SQL dans le menu données en créant une requête
sur un fichier excel via msquery
sinon si tu demandes cela c'est que tu connais déjà d'autres procèdés
générant du SQL , Access , BO,
autres bases DBF.. Oracle...
donc si tu as office pro, access est quand même là et plutôt efficace pour
cela...

2-Sinon on peut faire aussi avec excel

a-D'abord tout simplementdans le menu Données en appliquant un filtre.

b-En formule aussi dans une feuille excel en utilisant
les formules RechercheV ou en combinant les formules Index et Equiv

3-Mais si tu souhaites une macro voici un exemple en VBA
sachant que ta table est Feuil1 et c'est
à placer alt+f11 Ctrl+rdans le code de feuil2 qui recevra le résultat:

'****
Private Sub Worksheet_Activate()
Dim maval As String
Dim c As Range
Dim cpt As Long
cpt = 1
maval = InputBox("valeur à sélectionner")
Application.ScreenUpdating = False
ActiveSheet.Cells.ClearContents
With Worksheets("feuil1")
ActiveSheet.Rows(1).Cells = .Rows(1).Cells.Value
For Each c In .Range("a2:a1000").Cells
If IsEmpty(c) Then Exit Sub
If c = maval Then
cpt = cpt + 1
ActiveSheet.Rows(cpt).Cells = .Rows(c.Row).Cells.Value
End If
Next
End With
End Sub
'***
'
'lSteph





"Rekam" a écrit dans le message de news:

Bien le bonsoir!

Je voulais savoir s'il était de possible de faire un équivalent de SELECT
*
FROM maTable par une macro Excel sur un tableau Excel.
Je m'explique. J'ai un tableau de données et je voudrais récupérer un
RANGE
qui ne contient que les lignes dont la 1ère case du tableau vaut 3 (par
exemple). En sql, je vois bien comment faire, mais là, je sèche.

Si qqun à une idée, je suis preneur ! Merci d'avance!


Avatar
Laurent M
Précisions:

En vba, la commande de filtre élaboré donne ça:

Range(MaBD).AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range(
MesCritères), CopyToRange:=Range(MaZoneRésultats), Unique:úlse

avec:

- MaBd: plage qui englobe tes données (y compris la ligne d'en-têtes)
- MaZoneRésultats: cellule en haut à gauche de la zone où tu veux placer
les résultats
-MesCritères est une plage contenant le critère. Cette zone doit
respecter certaines normes qu'il serait un peu fastidieux d'aborder ici
(mais je vais supposer que tu sais comment marche le filtre élaboré,
sinon regarde dans l'aide ou rappelle)


A+

Laurent
Avatar
Rekam
Salut

J'ai effectivement Access et j'ai effectivement décider de l'utiliser comme
bd plutôt qu'une feuille excel. Je suis donc dessus. Pour l'instant ça va.

Par contre, le filtre avancé que propose Laurent est également très
intéressant. Il pourrait me servir pour d'autres choses. En tout cas, merci à
tous et bonne soirée!
Rekam

"LSteph" wrote:

Bonsoir Rekam,
A part que tu peux vouloir soit la façon d'obtenir soit le résultat de ton
select autrement:


1-d'abord tu peux le faire un SQL dans le menu données en créant une requête
sur un fichier excel via msquery
sinon si tu demandes cela c'est que tu connais déjà d'autres procèdés
générant du SQL , Access , BO,
autres bases DBF.. Oracle...
donc si tu as office pro, access est quand même là et plutôt efficace pour
cela...

2-Sinon on peut faire aussi avec excel

a-D'abord tout simplementdans le menu Données en appliquant un filtre.

b-En formule aussi dans une feuille excel en utilisant
les formules RechercheV ou en combinant les formules Index et Equiv

3-Mais si tu souhaites une macro voici un exemple en VBA
sachant que ta table est Feuil1 et c'est
à placer alt+f11 Ctrl+rdans le code de feuil2 qui recevra le résultat:

'****
Private Sub Worksheet_Activate()
Dim maval As String
Dim c As Range
Dim cpt As Long
cpt = 1
maval = InputBox("valeur à sélectionner")
Application.ScreenUpdating = False
ActiveSheet.Cells.ClearContents
With Worksheets("feuil1")
ActiveSheet.Rows(1).Cells = .Rows(1).Cells.Value
For Each c In .Range("a2:a1000").Cells
If IsEmpty(c) Then Exit Sub
If c = maval Then
cpt = cpt + 1
ActiveSheet.Rows(cpt).Cells = .Rows(c.Row).Cells.Value
End If
Next
End With
End Sub
'***
'
'lSteph





"Rekam" a écrit dans le message de news:

Bien le bonsoir!

Je voulais savoir s'il était de possible de faire un équivalent de SELECT
*
FROM maTable par une macro Excel sur un tableau Excel.
Je m'explique. J'ai un tableau de données et je voudrais récupérer un
RANGE
qui ne contient que les lignes dont la 1ère case du tableau vaut 3 (par
exemple). En sql, je vois bien comment faire, mais là, je sèche.

Si qqun à une idée, je suis preneur ! Merci d'avance!