Page 1 sur 1
[..] Fonction en rapport du nombre d'enregistrement excel
Posté : mer. 25 mars 2009 15:58
par energie13
Bonjour,
J'ai un fichier excel. En fonction du nombre d'enregistrement( lignes) , je dois récupérer chaque numéro de téléphone de chaque ligne en effectuant un copier et lancer la fonction. Une fois la fonction exécutée il doit etre nécessaire de passer a la ligne suivante. (boucle)
J'ai crée ma fonction pour un cas : mais je ne sais pas comment faire pour compter le nb d'enregistrement et faire une boucle pour traiter tous les enregistrements de mon fichier excel.
Si besoin je peux rémunérer le travail. C'est une demande sérieuse et urgente.
Je vous remercie par avance.
Energie2b
Re: lancer fonction en rapport du nombre d'enregistrement excel
Posté : mer. 25 mars 2009 17:31
par GaRydelaMer
Bonjour
j'utilise quand à moi, les fonctions ADO pour faire ca.
Avec tu ouvres un RecordSet (jeu d'enregistrement) ou chaque ligne de ton fichier excel est une ligne de l'objet ADO.
Pour compter le nombre de ligne tu as des fonctions qui le font.
► Afficher le texte
Code : Tout sélectionner
Global Const $adOpenStatic = 3
Global Const $adLockReadOnly = 1
; pour les autres variables regarde dans l'aide de VBA excel sur ADO ou internet
Local $base = "ton fichier excel.xls"
Local $oConn = ObjCreate("ADODB.Connection")
With $oConn
.ConnectionString = "Driver={Microsoft Excel Driver (*.xls)};Dbq=" & $base
.Open
EndWith
Local $oRS = ObjCreate("ADODB.Recordset")
$oRS.Open("SELECT * FROM [nom de la feuille$]", $oConn, $adOpenStatic, $adLockReadOnly)
; ne pas oublier les [] et le $ pour le nom de la feuille
;Pour parcourir l'objet RecordSet (lire toutes les lignes)
If $oRS.EOF or $oRS.BOF Then
; Aucun enregistrement
EndIf
Local $Count = $oRS.RecordCount ; nombre de ligne dans ton tableau.
While Not $oRS.EOF
; lire la valeur d'une cellule, de la colonne TEL si elle est en 3ème position dans ton fichier excel par exemple
local $tel = $oRS.Fields("Tel").Value
local $tel = $oRS.Fields(2).Value ; les N° de champs commence à 0
; ici tu peux exécuter la fonction de ton choix avec le Tel ainsi récupéré
$oRS.MoveNext ; surtout ne pas oublier sinon tu auras une boucle infinie
WEnd
$oRS.Close
$oConn.Close ; Pour être propre on ferme l'objet RecordSet et la connection
;; Quelques Fonctions à connaitre
$oRS.Fields.Count ; nombre de colonne/Champs
$oRS.MoveFirst ; se déplace au 1er enregistrement
; Dans d'autre cas ou il te sera nécessaire d'écrire dans la table
$oRS.AddNew ; Ajoute un nouvel enregistrement
$oRS.Update ; valide la mise à jour (en cas d'ajout ou modification des valeurs
Voila j'espère t'avoir donné quelques pistes pour trouver la solution à ton PB n'hésite pas à demander plus de détail si tu as besoin ou si tu bloque sur un truc.
Dernier petit Truc si tu es pas sur du nom de tes champs ou si tu veux les connaitre.
Code : Tout sélectionner
For $i = 0 To $oRS.Fields.Count - 1
ConsoleWrite($oRS.Fields($i).Name & @LF)
Next
Voila mes 2 cents

Re: lancer fonction en rapport du nombre d'enregistrement excel
Posté : mer. 25 mars 2009 19:32
par energie13
Merci bcp pour toutes ces infos

J'ai réussi partiellement a le mettre en application :
J'ai une seule colonne avec mes numéros de tel dont le premier champ est tel puis les autres de la colonne sont les num de tel. Il arrive bien a me lister le nb d'enregistrement et me lancer X fois la fonction en fonction du nb d'enregistrement cependant, il garde uniquement la valeur du 3e enregistrement (variable en statique) comment faire pour qu'il récupère le numéro de tel de chaque ligne ?
Je bosse encore la dessus. Vraiment merci pour ta réponse c genial
► Afficher le texte
Code : Tout sélectionner
Global Const $adOpenStatic = 1
Global Const $adLockReadOnly = 3
; pour les autres variables regarde dans l'aide de VBA excel sur ADO ou internet
Local $base = "NDI.xls"
Local $oConn = ObjCreate("ADODB.Connection")
With $oConn
.ConnectionString = "Driver={Microsoft Excel Driver (*.xls)};Dbq=" & $base
.Open
EndWith
Local $oRS = ObjCreate("ADODB.Recordset")
$oRS.Open("SELECT * FROM [NDIpc30$]", $oConn, $adOpenStatic, $adLockReadOnly)
; ne pas oublier les [] et le $ pour le nom de la feuille
;Pour parcourir l'objet RecordSet (lire toutes les lignes)
If $oRS.EOF or $oRS.BOF Then
; Aucun enregistrement
EndIf
Local $Count = $oRS.RecordCount ; nombre de ligne dans ton tableau.
While Not $oRS.EOF
; lire la valeur d'une cellule, de la colonne TEL si elle est en 3ème position dans ton fichier excel par exemple
local $tel = $oRS.Fields("Tel").Value
;local $tel = $oRS.Fields(2).Value ; les N° de champs commence à 0
; ici tu peux exécuter la fonction de ton choix avec le Tel ainsi récupéré
winactivate("[CLASS:MozillaUIWindowClass]", "")
Mousemove ( 42, 125 ,0) ; click sur le premier onglet
sleep (2500)
mouseclick ("left")
sleep (3000)
Mousemove ( 53, 102 ,0) ; click sur onglet ulysse 1
mouseclick ("left")
mousemove (40,99,0) ; click sur le mini onglet ulysse 1
mouseclick ("left")
sleep (350)
sleep (600)
Mousemove ( 236 , 230,0) WinWaitActive ("Portal - Mozilla Firefox")
Sleep (100)
mouseclick ("left")
send ("^v")
send ("{ENTER}")
Mousemove ( 295 , 125,0)
mouseclick ("left")
sleep (300)
mousemove (293,102 ,0) ;onglet raccourcis remise a zero du lien
mouseclick ("left")
sleep (800)
Mousemove ( 276 , 261,0)
WinWaitActive ("-Portal - Mozilla Firefox")
Sleep (200) ;Temporise chargement
mouseclick ("left")
send ("^v")
mousemove ( 232, 304,0)
mouseclick ("left")
mousemove ( 233, 324,0) mouseclick ("left")
sleep (150)
send ("{ENTER}")
mousemove (515,127,0) ;onglet
mouseclick ("left")
sleep (600)
Mousemove (165,97,0) ;onglet
mouseclick ("left")
;sleep (600)
winwaitactive( "Mozilla Firefox")
sleep (200)
mousemove (216, 338,0) ;ndi dans diagV2
sleep (1000)
mouseclick ("left")
sleep (250)
send ("^v")
send ("{ENTER}")
sleep (200)
;winactivate("[CLASS:MozillaUIWindowClass]", "")
;mousemove (700,125,0)
;mouseclick ("left")
;sleep (200)
;mousemove (293,102 ,0) ;
;mouseclick ("left")
;sleep (400)
;Mousemove ( 261 , 242,0)
;WinWaitActive ("-Portal - Mozilla Firefox")
;Sleep (5000) ;Temporise chargement
;sleep (100)
;mouseclick ("left")
;send ("^v")
;sleep (100)
;mousemove (194,720 ,0)
;mouseclick ("left")
;send ("{ENTER}")
$oRS.MoveNext ; surtout ne pas oublier sinon tu auras une boucle infinie
WEnd
$oRS.Close
$oConn.Close ; Pour être propre on ferme l'objet RecordSet et la connection
Re: lancer fonction en rapport du nombre d'enregistrement excel
Posté : mer. 25 mars 2009 19:56
par GaRydelaMer
Bonsoir
Code : Tout sélectionner
Local $tel = 0
While Not $oRS.EOF
$tel = $oRS.Fields(0).Value
funtest($tel) ; ou direct funtest($oRS.Fields(0).Value)
$oRS.MoveNext ; surtout ne pas oublier sinon tu auras une boucle infinie
WEnd
Func funtest($numtel)
If $umtel = "" Then return
ConsoleWrite($numtel & @LF)
EndFunc
Dans cette boucle la variables $tel "change" à chaque tour avec la valeur de la ligne.
$oRS.Fields(0).Value lit la valeur de la colonne 0 de l'enregistrement courant.
ce qui correspond à la colonne 1 d'excel et à la ligne courante
Le MoveNext positionne un pointeur vers l'enregistrement suivant, et le rend courant
ce qui correspond à aller sur la cellule du bas.
En fait le While "tourne/boucle" tanque l'on est pas pas la fin $oRS.EOF (end of file) d'ou la condition de faire un MoveNext à chaque Tour.
Ce qui correspond à descendre à chaque fois d'une ligne.
ATTENTION même les dernières lignes vide et valide sous excel, ce qui va tromper le résultat du RecordCount.
La solution c'est du coté du SQL qu'elle existe:
Re: lancer fonction en rapport du nombre d'enregistrement excel
Posté : mer. 25 mars 2009 20:16
par GaRydelaMer
De ce que je comprend dans ton script tu veux coller le num dans une page web mais tu utilises pas la variable $tel.
Tu devrais jeter un œil du coté de l'UDF _IE.au3 pour interagir et chargé une page web dans un GUI.
De plus en, lisant ton code si tu deplace ta fenêtre ou tu change de résolution d'écran je suis pas sur que ca marche en utilisant les mouseMove surtout que tu peux rien faire sur le PC pendant ce temps.
Re: lancer fonction en rapport du nombre d'enregistrement excel
Posté : mer. 25 mars 2009 21:38
par energie13
Comment dois je faire alors ?
Par rapport au code que je t'ai fourni (sans tenir compte de la fonction) a quoi doit-il ressembler ?
Je suis un peu perdu la je ne vois pas ou insérer la boucle par rapport au code initial que tu m'as communiqué ?
De plus j'ai une extension a ce projet et je souhaiterai avoir tes coordonnées en pv pour en discuter et te communiquer les modalités si ca t'intéresse...
Je te remercie encore pour tout.
Re: lancer fonction en rapport du nombre d'enregistrement excel
Posté : mer. 25 mars 2009 23:25
par GaRydelaMer
Bonsoir
tout dépend du contexte.
Si ton but est de récupérer depuis un fichier Excel ou autre on fait du générique, une information ici un Num de tel, et l'ajouter a un site web a très peu de sens, et trés peu sécurisé.
Maintenant revenons au contexte, si le site web est à toi, j'imagine que les infos sont stocké dans une base de données tu dois donc avoir un accès a cette base de données. Ici il s'agira simplement de dialoguer avec la base sans passer par un navigateur.
Sinon si tel est ton souhait de passer par un navigateur, utilise les fonction faites pour ca.
Ouvrir un connexion au site, naviguer vers la page je suppose un formulaire web et de poster les données. Mais la aussi il y a 2 manière (c'est le HTML) soit un "get" soit un "post".
EN get tu donne simplement l'adresse de la page avec les paramêtres le fonctionnement de google par exemple. C'est a toi de coder l'envoie des paramêtre.
Voir sur le forum pour les fonctions, HTTPrequest, WinInet.
Pour me contacter utilise les messages privé du Forum.
Re: [..] Fonction en rapport du nombre d'enregistrement excel
Posté : mer. 25 mars 2009 23:57
par energie13
non pas du tout Ce n'est pas pour ca

Effectivement si c'était une db j'aurais pu faire une insertion de masse directement en important le fichier en le formatant pour du mysql ou autre. la ce sont différentes applications qui tournent et sur lesquelles je n'ai pas accès. Je suis obligé de traiter les cas unitairement en effectuant les mêmes commandes le tout est sécurisé mais ne fait pas référence a des pages web. c'est pour ca. Mon but est de récupérer chaque numéro de tel du fichier excel un a un et de lancer la fonction pour chaque numéro.
La fonction que j'ai mise ne sert qu'a titre d'exemple pour vérifier si ca fonctionne ou non. C'est pour ça que ça me faciliterait la vie si tu arrivais a m'aider pour développer cette fonction de base.
Je te remercie deja pour tes précieuses infos et de m'avoir répondu aussi rapidement. Je suis prêt également a te rémunérer pour le temps et te connaissances.
Re: [..] Fonction en rapport du nombre d'enregistrement excel
Posté : jeu. 26 mars 2009 00:53
par Tlem
@energie13
Votre proposition de rémunération, n'a pas lieu d'être sur le forum car nous sommes dans une communauté d'entre aide et de part ce fait, chacun donne librement de son temps pour aider les autres.
Éventuellement vous pouvez discuter de ce genre de chose en privé, mais de grâce, évitez le sujet sur le forum.
Merci.
Re: [..] Fonction en rapport du nombre d'enregistrement excel
Posté : jeu. 26 mars 2009 01:01
par energie13
Je comprends tout a fait la philosophie ma proposition portait simplement sur le temps qu'il passe. Merci encore pour votre forum