OVH Cloud OVH Cloud

sélection dans une base de donnée

3 réponses
Avatar
alroussel
Bonjour à tous,

J'ai besoin de votre aide pour résoudre le problème suivant (dans la mesure
où cela est possible).

J'ai une base de donnée d'un nombre de lignes variable et modifiable qu'il
s'étale sur les col. A à AD.
Les colonnes A à J ont des données d'identification des personnes. Les col.
K à AD contiennent des données caractérisant ces personnes. Ces données sont
identiques sur l'ensemble des lignes mais leur nombre peut varier de deux à
20 suivant que la personne répond ou non à ces caractéristiques.

Je voudrais pouvoir parcourir cette base de données et sélectionner, comme
l'utilisteur le déciderai, les lignes où les 16 col à partir de colonne K
incluse seraient remplies, ou les 8, ou les 12 etc suivant demande (quelque
chose comme un imputbox ferait peut-être l'affaire mais comment).
Il est précisé que le nombre demandé ne peut être que pair (2, 4, 6,
....20). Un contrôe pourrait être fait si l'utilisteur se trompe
D'autre part ces lignes sélectionnées serait copiées dans une feuille qui
serait ajouté au classeur existant.
Il y a deux ou trois choses que je saurais écrire dans une macro, comme
ajoutér une feuille.
Il me semble que la solution passerais par en premier une copie de la base
de données dans une feuille puis ensuite que la sélection s'effectuerai sur
cette copie par suppression des lignes qui ne correspondrais pas au nombre
de caractéristiques demandées. Mais voilà je ne sais pas l'écrire dans une
macro (la comande de sélection)
merci d'avance pour votre aide
J'avais espéré avce la grille et la fonction critère mais en posant la
question prcedemment sur le forum ont m'a fait savoir qu'il n'était guère
possible de transmettre les données de la grille dans une feuille.

je bute là dessus

Alain ROUSSEL
Alain Roussel

3 réponses

Avatar
isabelle
bonjour Alain,

il me semble qu'un filtre automatic ferait l'affaire,
il faut adapter le nom des feuilles (base de données et feuille
récapitulative)
ici j'ai utilisé Feuil1 et Feuil2

Sub Macro1()
If Worksheets("Feuil1").AutoFilterMode Then
Range("A1:AD1").AutoFilter
Range("A1:AD1").AutoFilter
Else
Range("A1:AD1").AutoFilter
End If

On Error Resume Next
Set plage = Application.InputBox(prompt:="Faite votre sélection des
colonnes à filtrer", Type:=8)
If Err.Number <> 0 Then
MsgBox "Vous devez faire une sélection. recommencer"
Exit Sub
End If

nbr = plage.Item(plage.Count).Column
PrColonne = plage.Item(1).Column

For i = PrColonne To nbr
Selection.AutoFilter Field:=i, Criteria1:="<>"
Next

DrLig1 = Range("A:AD").Find("*", SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
DrLign2 = Application.CountA(Sheets("Feuil2").Range("A:A")) + 1

Range("A1:AD" & DrLig1).Copy _
Destination:=Sheets("Feuil2").Range("A" & DrLign2)

Set plage = Nothing
Application.CutCopyMode = False
End Sub

isabelle


Bonjour à tous,

J'ai besoin de votre aide pour résoudre le problème suivant (dans la mesure
où cela est possible).

J'ai une base de donnée d'un nombre de lignes variable et modifiable qu'il
s'étale sur les col. A à AD.
Les colonnes A à J ont des données d'identification des personnes. Les col.
K à AD contiennent des données caractérisant ces personnes. Ces données sont
identiques sur l'ensemble des lignes mais leur nombre peut varier de deux à
20 suivant que la personne répond ou non à ces caractéristiques.

Je voudrais pouvoir parcourir cette base de données et sélectionner, comme
l'utilisteur le déciderai, les lignes où les 16 col à partir de colonne K
incluse seraient remplies, ou les 8, ou les 12 etc suivant demande (quelque
chose comme un imputbox ferait peut-être l'affaire mais comment).
Il est précisé que le nombre demandé ne peut être que pair (2, 4, 6,
....20). Un contrôe pourrait être fait si l'utilisteur se trompe
D'autre part ces lignes sélectionnées serait copiées dans une feuille qui
serait ajouté au classeur existant.
Il y a deux ou trois choses que je saurais écrire dans une macro, comme
ajoutér une feuille.
Il me semble que la solution passerais par en premier une copie de la base
de données dans une feuille puis ensuite que la sélection s'effectuerai sur
cette copie par suppression des lignes qui ne correspondrais pas au nombre
de caractéristiques demandées. Mais voilà je ne sais pas l'écrire dans une
macro (la comande de sélection)
merci d'avance pour votre aide
J'avais espéré avce la grille et la fonction critère mais en posant la
question prcedemment sur le forum ont m'a fait savoir qu'il n'était guère
possible de transmettre les données de la grille dans une feuille.

je bute là dessus

Alain ROUSSEL
Alain Roussel


Avatar
alroussel
merci Isabelle pour ta réponse bien matinale
Je vais essayé cela et tetiendrai au courant de la suite
Mais d'avance encore merci et je ta souhaite une bonne journée

Alain

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

bonjour Alain,

il me semble qu'un filtre automatic ferait l'affaire,
il faut adapter le nom des feuilles (base de données et feuille
récapitulative)
ici j'ai utilisé Feuil1 et Feuil2

Sub Macro1()
If Worksheets("Feuil1").AutoFilterMode Then
Range("A1:AD1").AutoFilter
Range("A1:AD1").AutoFilter
Else
Range("A1:AD1").AutoFilter
End If

On Error Resume Next
Set plage = Application.InputBox(prompt:="Faite votre sélection des
colonnes à filtrer", Type:=8)
If Err.Number <> 0 Then
MsgBox "Vous devez faire une sélection. recommencer"
Exit Sub
End If

nbr = plage.Item(plage.Count).Column
PrColonne = plage.Item(1).Column

For i = PrColonne To nbr
Selection.AutoFilter Field:=i, Criteria1:="<>"
Next

DrLig1 = Range("A:AD").Find("*", SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
DrLign2 = Application.CountA(Sheets("Feuil2").Range("A:A")) + 1

Range("A1:AD" & DrLig1).Copy _
Destination:=Sheets("Feuil2").Range("A" & DrLign2)

Set plage = Nothing
Application.CutCopyMode = False
End Sub

isabelle


Bonjour à tous,

J'ai besoin de votre aide pour résoudre le problème suivant (dans la
mesure


où cela est possible).

J'ai une base de donnée d'un nombre de lignes variable et modifiable
qu'il


s'étale sur les col. A à AD.
Les colonnes A à J ont des données d'identification des personnes. Les
col.


K à AD contiennent des données caractérisant ces personnes. Ces données
sont


identiques sur l'ensemble des lignes mais leur nombre peut varier de
deux à


20 suivant que la personne répond ou non à ces caractéristiques.

Je voudrais pouvoir parcourir cette base de données et sélectionner,
comme


l'utilisteur le déciderai, les lignes où les 16 col à partir de colonne
K


incluse seraient remplies, ou les 8, ou les 12 etc suivant demande
(quelque


chose comme un imputbox ferait peut-être l'affaire mais comment).
Il est précisé que le nombre demandé ne peut être que pair (2, 4, 6,
....20). Un contrôe pourrait être fait si l'utilisteur se trompe
D'autre part ces lignes sélectionnées serait copiées dans une feuille
qui


serait ajouté au classeur existant.
Il y a deux ou trois choses que je saurais écrire dans une macro, comme
ajoutér une feuille.
Il me semble que la solution passerais par en premier une copie de la
base


de données dans une feuille puis ensuite que la sélection s'effectuerai
sur


cette copie par suppression des lignes qui ne correspondrais pas au
nombre


de caractéristiques demandées. Mais voilà je ne sais pas l'écrire dans
une


macro (la comande de sélection)
merci d'avance pour votre aide
J'avais espéré avce la grille et la fonction critère mais en posant la
question prcedemment sur le forum ont m'a fait savoir qu'il n'était
guère


possible de transmettre les données de la grille dans une feuille.

je bute là dessus

Alain ROUSSEL
Alain Roussel




Avatar
alroussel
Bonjour Isabelle,
J'ai essayé ta macro
Voilà les petits problèmes que je rencontre
- le filtre marche très bien et l'utisateur doit indiquer les colonnes sur
lesquelles il veut effectuer le filtre mais je voudrais pouvoir diriger ce
choix pour éviter des erreurs.
Je m'explique:
- le filtre doit être fait uniquement sur les colonnes K à AD. Ces colonnes
s'étagent de la manière suivante : colonne K = année1, colonne L= nom du
critère 1 puis colonne M= année 2 et colonne N = nom du critère 2, puis
colonne O = année 3 et colonne P= nom du critère 3 et ainsi de suite jusqu'à
la colonne AD soit au total sur les colonnes K à AD dix années indiquées et
dix critères correspondant.
- je voudrais dnc que dans l'imputbox l'utilisateur indique un chiffre comme
2, 4, 6, 8 ....jusq'à 20 qui s traduirait en fait que s'il est indiqué 2
c'est que le filtre s'effectue sur les colonnes K et L, 'il indique 4 le
filtre s'effectue sur les colonnes K à N, s'il indique 6 le filtre
s'effectue sur les colonnes K à P et etc jusqu'à 20 qui serait le filtre sur
ls colonnes K à AD.
Obligatoirement le nombre indiqué ne pourrait pas être inferieur à 2 et ne
peut être que pair et multiple de deux (4,6,8, ...20 (maxi)).
merci pour ta réponse et au moins savoir si cela est possible

Alain ROUSSEL
"alroussel" a écrit dans le message de news:
3fb09829$0$13301$
merci Isabelle pour ta réponse bien matinale
Je vais essayé cela et tetiendrai au courant de la suite
Mais d'avance encore merci et je ta souhaite une bonne journée

Alain

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

bonjour Alain,

il me semble qu'un filtre automatic ferait l'affaire,
il faut adapter le nom des feuilles (base de données et feuille
récapitulative)
ici j'ai utilisé Feuil1 et Feuil2

Sub Macro1()
If Worksheets("Feuil1").AutoFilterMode Then
Range("A1:AD1").AutoFilter
Range("A1:AD1").AutoFilter
Else
Range("A1:AD1").AutoFilter
End If

On Error Resume Next
Set plage = Application.InputBox(prompt:="Faite votre sélection des
colonnes à filtrer", Type:=8)
If Err.Number <> 0 Then
MsgBox "Vous devez faire une sélection. recommencer"
Exit Sub
End If

nbr = plage.Item(plage.Count).Column
PrColonne = plage.Item(1).Column

For i = PrColonne To nbr
Selection.AutoFilter Field:=i, Criteria1:="<>"
Next

DrLig1 = Range("A:AD").Find("*", SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
DrLign2 = Application.CountA(Sheets("Feuil2").Range("A:A")) + 1

Range("A1:AD" & DrLig1).Copy _
Destination:=Sheets("Feuil2").Range("A" & DrLign2)

Set plage = Nothing
Application.CutCopyMode = False
End Sub

isabelle


Bonjour à tous,

J'ai besoin de votre aide pour résoudre le problème suivant (dans la
mesure


où cela est possible).

J'ai une base de donnée d'un nombre de lignes variable et modifiable
qu'il


s'étale sur les col. A à AD.
Les colonnes A à J ont des données d'identification des personnes. Les
col.


K à AD contiennent des données caractérisant ces personnes. Ces
données



sont
identiques sur l'ensemble des lignes mais leur nombre peut varier de
deux à


20 suivant que la personne répond ou non à ces caractéristiques.

Je voudrais pouvoir parcourir cette base de données et sélectionner,
comme


l'utilisteur le déciderai, les lignes où les 16 col à partir de
colonne



K
incluse seraient remplies, ou les 8, ou les 12 etc suivant demande
(quelque


chose comme un imputbox ferait peut-être l'affaire mais comment).
Il est précisé que le nombre demandé ne peut être que pair (2, 4, 6,
....20). Un contrôe pourrait être fait si l'utilisteur se trompe
D'autre part ces lignes sélectionnées serait copiées dans une feuille
qui


serait ajouté au classeur existant.
Il y a deux ou trois choses que je saurais écrire dans une macro,
comme



ajoutér une feuille.
Il me semble que la solution passerais par en premier une copie de la
base


de données dans une feuille puis ensuite que la sélection
s'effectuerai



sur
cette copie par suppression des lignes qui ne correspondrais pas au
nombre


de caractéristiques demandées. Mais voilà je ne sais pas l'écrire dans
une


macro (la comande de sélection)
merci d'avance pour votre aide
J'avais espéré avce la grille et la fonction critère mais en posant la
question prcedemment sur le forum ont m'a fait savoir qu'il n'était
guère


possible de transmettre les données de la grille dans une feuille.

je bute là dessus

Alain ROUSSEL
Alain Roussel