Requete dans une feuille Excel

papounez

XLDnaute Nouveau
Bonjour tout le monde,

J'ai une feuille Excel avec des données issues d'un fichier du personnel (extraction), avec tout un tas d'info comme le sexe, l'age, l'ancienneté, des critères de présence etc...

Je voudrais faire des tableaux d'effectif en automatique (effectif feminin, masculin, anciennete...) et des graphiques associés.

Mon soucis c'est que je ne sais pas par quel biais je vais faire mes requetes en VB pour l'instant, car je veux générer mes tableaux automatiquement avec mes propres ruptures.

Donc pas de formules dans les cellules, que du code. Je pensais utiliser les filtres (Selection.AutoFilter Field:=9, Criteria1:="M", VisibleDropDown:=True" par exemple) mais il y a peut-être plus simple. Je peux aussi parcourir toutes les lignes de la feuille est stocker ce qui m'intéresse pour chaque indicateur que je dois gérer. Utiliser les tableaux croiser (non visibles) pour faire mes requetes ?

Bref je ne sais pas quelle méthode utiliser.

Ci vous pouviez m'aiguiller un peu en me donnant vos précieux avis.

Merci beaucoup
 

ROGER2327

XLDnaute Barbatruc
Re : Requete dans une feuille Excel

Bonjour papounez
Les possibilités sont variées, mais le choix est difficile : il dépend de la structure de vos données, de leur nombre, de la complexité des requêtes et, pourquoi pas, des préférences stylistiques du programmeur. Vous trouverez certainement plus d'aide en déposant un échantillon de données (données éventuellement bidonnées pour ne pas nuire à la confidentialité) et des exemples de résultats attendus.​
À bientôt, peut-être ?
ROGER2327
#3671


Lundi 23 Merdre 137 (Interprétation de l'humour, ST)
21 Prairial An CCXVIII
2010-W23-3T17:27:25Z
 

papounez

XLDnaute Nouveau
Re : Requete dans une feuille Excel

Merci ROGER2327 de vous intéresser à mon cas.

J'ai un onglet avec 88 colonnes de données par salarié soit un nombre de ligne assez conséquent, car à ses lignes j'ai également des données de paye identifiées par un autre mot clé du style :

situat-salarie;societe,etabli;matricule;.........
mouvement;societe;etabli;matricule;brut;........

style de tableau :

Effectif global par catégories professionnelles au 31/N:

------- Homme Femme Total
ouvrier 100 50 150
ETAM 70 24 94
CAU 15 5 20

et le graphique en camembert qui va bien.

Ici j'ai une rupture par catégorie professionnelle.

Pour construire un tableau comme celui-là avec les données que j'ai, il faut que je fasse un tri sur les gens présent, le sexe et la catégorie professionnelle. Normalement je n'ai pas de calcul à faire comme par exemple pour savoir qui est présent en fin de période car j'ai un top.

Je ne donne pas mon fichier il est encours de construction et puis le but c'est d'avoir une piste puisque comme vous l'écrivez il peut y avoir x façon de traiter le problème.

Je pense que je vais utiliser les filtres "AutoFilter" avec range.count. Sauf
si vous pensez qu'il y a quelques chose de mieux à faire ?!

Merci.
 

papounez

XLDnaute Nouveau
Re : Requete dans une feuille Excel

Bon voilà premier problème !

Je veux compter le nombre de lignes issues de mon filtre avec Range(IntColIndic).Count et le problème c'est qu'il me renvoie 65536 soit je pense le nombre de cellules de la colonne que j'ai nommé au lieu de me renvoyer le nombre de cellules non nulles de cette même colonne !

J'aimerai bien récupérer le nombre comme c'est indiqué en bas de la feuille de calcul quand c'est filtré.

Ci-joint le bout de mon code :

Worksheets(StrSheetDonnees).Select
'filtre sur la presence fin de periode colonne 13 du tableau
Selection.AutoFilter
Selection.AutoFilter Field:=13, Criteria1:="1", VisibleDropDown:=True

For i = 0 To UBound(Split(StrRuptures, ";"))
Worksheets(StrSheetEFFECTIF).Range("A" & 7 + i).Value = Split(StrRuptures, ";")(i)
Selection.AutoFilter Field:=Range(IntColIndic).Column, Criteria1:=Split(StrRuptures, ";")(i), VisibleDropDown:=True
'effectif homme (colonne 9 pour le sexe)
Selection.AutoFilter Field:=9, Criteria1:="M", VisibleDropDown:=True
effH = Range(IntColIndic).Count
'effectif femme
Selection.AutoFilter Field:=9, Criteria1:="F", VisibleDropDown:=True
EffF = Range(IntColIndic).Count
Next i
 
Dernière édition:

ROGER2327

XLDnaute Barbatruc
Re : Requete dans une feuille Excel

Re...
Peut-être en écrivant :
Code:
[COLOR="DarkSlateGray"][B]effH = Range(IntColIndic)[COLOR="Red"].SpecialCells(xlCellTypeVisible)[/COLOR].Count[/B][/COLOR]
ROGER2327
#3674


Lundi 23 Merdre 137 (Interprétation de l'humour, ST)
21 Prairial An CCXVIII
2010-W23-3T22:33:26Z
 

papounez

XLDnaute Nouveau
Re : Requete dans une feuille Excel

Re...
Peut-être en écrivant :
Code:
[COLOR="DarkSlateGray"][B]effH = Range(IntColIndic)[COLOR="Red"].SpecialCells(xlCellTypeVisible)[/COLOR].Count[/B][/COLOR]
ROGER2327
#3674


Lundi 23 Merdre 137 (Interprétation de l'humour, ST)
21 Prairial An CCXVIII
2010-W23-3T22:33:26Z


Bonjour,

J'ai essayé et le problème c'est que ça ramène le nombre de cellules définies dans Range(IntColIndic) et non le nombre de cellules non vides. Je me demande s'il ne tient compte que d'un filtre sur les 3 que j'ai mis ?!

J'ai essayé ceci :

EffH = Application.WorksheetFunction.Subtotal(9, Columns(13)) et ça à l'aire de fonctionner dans la mesure ou je n'ai que des "1" dans les cellules. Du coup j'ai bien mon total.

Question: peut-on utiliser une connection de type ADODB afin d'utiliser des requetes sql sans ouvrir un classeur excel. C'est à dire avec :

Set Source = New ADODB.Connection
Source.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & Fichier & ";Extended Properties=""Excel 8.0;HDR=No;"";"

où data source = une feuille ou plage de cellules et non un fichier ?

Merci encore.
 

gzabollone

XLDnaute Nouveau
Re : Requete dans une feuille Excel

Bonjour,
L'utilisation des tableaux croisés me parait possible pour répondre à votre besoin. Les possibilités sont très larges avec des ruptures possibles, avec sous-totaux ou non. Les tableaux peuvent être à deux entrées et un graphique peut se construire à partir d'un tableau.
La doc disponible n'est pas toujours facile à utiliser.
Avec un exemple de votre 88 colonnes, une simulation est facile à faire.

possible
 

Discussions similaires

Statistiques des forums

Discussions
312 769
Messages
2 091 935
Membres
105 113
dernier inscrit
AOUJIL