Recherche de données sur plusieurs classeurs

Biomeca

XLDnaute Nouveau
Bonjour à tous !

J'ai un p'tit soucis ... d'où ma question

J'ai un volume de 80 classeurs (qui va grossir d'environ 200/an) qui correspondent à des résultats d'analyses individuelles ayant la même architecture.
Mon objectif est de pouvoir faire de recherche de valeur ou de donnée (en sachant que je sais où elle se situe : cellule, colonne, ou ligne) sur cette cet ensemble de classeurs.
Je sais qu'il est possible de le créer sous Matlab car je le fait pour faire des calculs particuliers. Mais je pense qu'excel est capable de le faire.
Par contre comment ? je ne le sais pas.

Pouvez-vous m'aider ?

Merci bcp
 
B

Biomeca

Guest
Merci

En effet la discussion est inéressante et d'un excellent niveau (largement au-dessus de ce que je sais mais tout peux s'apprendre).

Bref je vais voir plus en détail car hormis l'objectif de calculs pour sylvie. Moi je souhaite retrouver des valeurs du style :

A l'heure actuelle j'ai 80 fichiers mais certains ont une valeur négative qq part dans la colonne D à partir de la ligne 25 jusqu'à n. Je souhaite retrouver le nom des fichiers ayant ou correspondant à cette requette.

Donc l'idée semble intéressante car j'avais penser à la même architecture mais sous Matlab

1- Fichier avec les chemins (mise à jour régulièrement)
2- Fonctions diverses (recherche négatif dans telle colonne, ...)
3- Interface appellant fichier chemin + choix et évolution des box (sélection: valeur négativ ou positive).

Par exemple et excusez moi mais je prends un domaine autre que le mien (car mes fichiers sont des fichiers médicaux = respect du patient)

Un prof a un classeur par élève avec :
- une feuille par année
- dans cette feuille chaque colonne correspond à une matière
- un nombre fixe de ligne 20 notes par an

Au total le prof se retrouve avec x classeurs 'élève'.xls et se pose la question:
Qui sont les élèves (quels sont les classeurs) ayant une note négative (si 0 = 10 sur 20) dans telle matière

Résultats les fichiers sont : ......

Je ne sais pas si j'ai était assez clair.
En tout cas ta réponse m'a permis de trouver une piste et la certitude qu'excel peut le faire.

Si vous tous (le forum) vous avez des liens ou des tutos pour des exemples similaires n'hésitez pas à me le dire.
Je suis prenant même si je ne connais pas le langage VBA je sais précisément ce que je veux faire. Si le langage change matlab à vba la structre reste la même ou proche.
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Bonjour Biomeca, Bonjour Michel_M, le Forum

Oui c'est un travail commun que j'ai mis en exercice et démos dont l'aboutissement est cette version :

Lien supprimé

Il est clair aussi que la technologie ADO employée dans ce cas n'est pas non plus très facile pour quelqu'un qui débute en VBA.

Cependant sans modifier quoique ce soit tu pourrais utiliser cette démo en appliquant l'Option 'Faire un Listing de toutes les Cellules contenues dans la plage spécifiée' en ayant au préalable indiqué la Feuille (Sous condition que tous tes classeurs contiennent bien un onglet nommé identiquement) et en indiquant la Plage de Cellules (Ta Colonne, Exemble 'B1:B20').

Bien sur cette requête ADO te retourneras toutes les Valeurs contenues dans la Plage de la Feuille spécifiée de tous les Classeurs sélectionnés... Mais ensuite ce sera tout de même un jeu d'enfant d'éliminer les valeurs positives...

Tu te retrouveras ainsi avec la liste des noms de classeurs contenant des valeurs négatives...

Bonne découverte
[ol]@+Thierry[/ol]
 
B

Biomeca

Guest
Merci thierry

Je m'y colle ce soir si mon bb c décidé à dormir sinon ce sera pour ce wd.

Merci pour .zip

si je vois que c pas mal, je me débouillerai avec la formation continue pour une formation à vba en plus de ce que je vais faire de mon côté. A voir car les journées ne font que 24h voir moins (subjectivement) avec un bb.
 

Sylvie

XLDnaute Accro
Bonjour Biomeca, Bonjour Michel_M, Bonjour Thierry, le Forum

afin d'abonder dans le sens de Michel et de Thierry et en tant qu'utilisatrice avertie de cet USF ADO je t'avoue également qu'il m'est arrivé de le complèter par des filtres sur la feuille 'collectrice'. Une solution très simple (et terriblement efficace) serait de poser un filtre sur les valeurs positives.

Bonne journée
 

michel_m

XLDnaute Accro
Re Biomeca, bonjour Thierry, Sylvie-miss-pétanque,

Il manque plus que notre ami Michel_Xld pour reconstituer the ADO dream team !

Bon, Bioméca, pourrais tu nous dire le nombre et le nom des champs (je ne pense pas que cela viole le secret médical) et pourrais tu me répondre à ceci:
Il faut indiquer les patients ayant une valeur négative dans les champs:
faut il préciser les champs concernés?
faut il indiquer le nbre de valeurs négatives dans chaque champs ?

Je regarderai peut-être demain (dernier jour de congé et s'il fait aussi beau qu'aujourd'hui, ne compte pas trop)

A+ et bonne soiorée

Michel M
 
B

biomeca

Guest
Merci michel_m

je t'envoie juste un fichier d'exemple de données avant de rentrer chez moi.
je préciserai tout à l'heure (le temps de rentrer) ce que je souhaite rechercher c'est à dire :

1- quelle colonne et de quelle ligne à quelle ligne
2- et si il s'agit d'un min de x (valeur à rentrer)
d'un max .....
d'un négatif ou positif

Connais-tu des tuto ou des liens pour me dégrossir en vba ?


Car mon objectif est d'apprendre et pas simplement d'utiliser
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Re Bonsoir

Un tuto pour apprendre le VBA, huum huum, tout dépend déjà si tu es familier avec un langauge de programmation ?

L'aide VBA d'Excel est assez complète et elle contient des exemples. Pour apprendre à utiliser l'aide, enregistres une macro et une fois enregistrée décortiques là depuis VBE (Visual Basic Editor), en appuyant sur la touche [F1] quand tu as un mot sélectionné dans le module de code qui aura été enregistré...

Mon précédent message n'avait nullement pour but de te décourager d'apprendre le VBA, mais on ne commence pas à apprendre le VBA avec ADO, car là tu risques réellement un découragement.

Pour ton fichier, il faut qu'il soit sous format compressé '.zip' (pas '.rar'), de moins de 50Ko, sans espace ni accent ni caractères spéciaux dans le nom.

Bonne Soirée
[ol]@+Thierry[/ol]
 

Biomeca

XLDnaute Nouveau
Me.... oupsss
S'cusé pour le retard mais j'avais le bain du mon bb

Et encore merci

Bon voici la structure du fichier :

- une seule feuille et pas de nom attibué
- les lignes 1à 23 ne sont pas à lire et ceci toutes colonnes confondues
- les données à lire vont de L24 à L123
- et ce sur 95 colonnes


Etape 1
Sélection des fichiers
Etape 2
Choix de lecture (box)
- possibilité 1 : un choix pour chaque colonne
- possibilité2 : 4 choix possibles pour un choix de colonne

possibilité 2 me semble plus intéressante car il n'y a jamais de cellule vide on a en fait une matrice (d'où mon idée première Matlab) 100*23 ou l'inverse si colonne ligne.
Etape 3
les fichiers sont ....

Pour les 4 choix :
si max(A24:A123)<x (x à valeur à rentrer et A un exemple de colonne)
si min(A24:A123)<y (.....)
si a (la cellule)>0
si a<0

Pour le choix des colonnes ça peut ouvrir à d'autres perspectives et utilisations ce qui revient à faire:
- x (numéro de colonne)
- x:y (colonne à colonne)
-x;y (colonne et colonne)
-x;y:z (colonne et colonne à colonne)

si condition de lecture remplie
alors fichier retenu
sinon continuer sur fichier suivant


Voilà sous Matlab (le seul que je connaisse) c possible avec qq for, if et ou elseif, pour l'ensemble des fichiers en créant une structure dans le workspace constituer de matrices identiques. C jouable

Mais c pas utiliser matlab pour ce qu'il est réellment fait = il va ramer pour créer la structure et faire une boucle dans boucle ...

d'où l'idée d'excel donc de vba

_thierry je ne suis pas vexé, ni décourager, mais je n'aime pas profiter. Partager des connaissances c ce qui m'interesse.

Mais ici mon objectif premier est de créer cet utilitaire car il aura des répercutions non négligeables sur la réflexion du choix thérapeutique par le staff clinique et technique pour le patient.
Donc mon souhait c faire mieux et toujours mieux pour le patient (esprit service publique et oui, on ne fait pas toujour grêve et ne compte pas nos heures ;-)

voici le fichier

Merci
 

michel_m

XLDnaute Accro
Re

Bon, on verra mieux avec ton classeur mais je sens que notre grand Chef Iroquois Thierry a déjà un userform en tête.

Pour apprendre VBA (ADO est une autre paire de manches mais si tu as la logique et la pratique base de données - SQL, tu t'y retrouveras vite) mon site préféré est www.info-3000.com très pédagodgique et décontracté.
Tu trouveras aussi des exemples intéressants dans le Wiki de notre ami MichelXLD (le Wiki est indiqué dans le bandeau bleu gauche du site).
Tout ca est en complément des conseils de Thierry.

Quant au service public de santé, ce sera avec plaisir; un de mes meilleurs souvenirs sur XLD a été de réaliser une appli pour la recherche sur la leucémie, et pour avoir été patient, je crois que chacun peut se féliciter du système français

Amicalement

Michel_M
 

MichelXld

XLDnaute Barbatruc
bonsoir chers amis et amie

cet exemple permet de verifier si une des cellules de la plage 'D24:D123' commence par le signe moins '-' , dans le classeur fermé . il ne reste plus qu'a boucler sur les 80 classeurs


Code:
Sub TheADOReaderV01()
'http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/USF_ADO_Calculs_Collector_V01_03.zip
'adapté de @+Thierry
Dim XLFile As String
Dim RangeSource As String
Dim ADOConnection As ADODB.Connection
Dim ADOCommand As ADODB.Command
Dim ADORecordSet As ADODB.Recordset
Dim Feuille As String
Dim Ctrl As Boolean

Ctrl = False
XLFile = 'C:\\Essai_Lecture_Base.xls'
Feuille = 'Essai_Lecture_Base'
RangeSource = 'D24:D123'

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

Set ADOCommand = New ADODB.Command
With ADOCommand
.ActiveConnection = ADOConnection
.CommandText = 'SELECT * FROM `' & Feuille & '$' & RangeSource & '`'
End With
  
Set ADORecordSet = New ADODB.Recordset
ADORecordSet.Open ADOCommand, , adOpenKeyset, adLockOptimistic
Set ADORecordSet = ADOConnection.Execute('`' & Feuille & '$' & RangeSource & '`')

Do While Not ADORecordSet.EOF 'boucle sur les données
If Left(ADORecordSet.Fields(0).Value, 1) = '-' Then
Ctrl = True
Exit Do
End If
ADORecordSet.MoveNext
Loop

If Ctrl = True Then
MsgBox 'repond à la requete'
Else
MsgBox 'ne repond pas à la requete'
End If

ADORecordSet.Close
ADOConnection.Close
End Sub


bonne soiree
MichelXld

Message édité par: michelxld, à: 25/08/2005 23:31
 

Discussions similaires

Réponses
6
Affichages
403

Statistiques des forums

Discussions
312 345
Messages
2 087 486
Membres
103 557
dernier inscrit
gerard.messerlin68@orange