[R] Commande recherche chiffre dans excel

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
leonick12
Niveau 2
Niveau 2
Messages : 19
Enregistré le : mer. 25 sept. 2013 23:09
Localisation : Villefranche de Rouergue (12)
Status : Hors ligne

[R] Commande recherche chiffre dans excel

#1

Message par leonick12 »

bonjour, j'ai besoin de votre aide, j'ai une commande qui me permet de chercher sur une page d'excel mais le probleme c'est qu'il cherche un seul caractere il le considere pas comme un chiffre seul, voila la commande en question :

Code : Tout sélectionner

Local $search_cell = $oExcel.Columns("A:E").Find($search_keyword)
le probleme est le suivant, il cherche par exemple 2 et au final il prends le premier chiffre de la colonne genre 22 ou 20 un chiffre qui contient 2 et pareil pour 10 qui prend dans 110 ou 210.

si vous avez des infos a ce sujet je suis preneur, je connais assez bien autoit, mais j'en suis pas un expert non plus.

Merci..
Modifié en dernier par leonick12 le mer. 23 avr. 2014 00:39, modifié 1 fois.
Avatar du membre
FireFox
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 217
Enregistré le : dim. 14 oct. 2012 01:30
Localisation : Picardie/Île-de-France, France
Status : Hors ligne

Re: [..] Commande recherche chiffre dans excel

#2

Message par FireFox »

Bonjour,
Je n'utilise pas l'UDF Excel mais d'après ce que j'ai cherché cette syntaxe devrait fonctionner :

Code : Tout sélectionner

.Find(le chiffre, Default, $xlValues, $xlWhole)
 
Le $xlWhole doit permettre de rechercher exactement ce que tu veux.

Cdlt, FireFox.
leonick12
Niveau 2
Niveau 2
Messages : 19
Enregistré le : mer. 25 sept. 2013 23:09
Localisation : Villefranche de Rouergue (12)
Status : Hors ligne

Re: [..] Commande recherche chiffre dans excel

#3

Message par leonick12 »

merci, apparemment ca a l'air de fonctionner, mais petit detail dans une liste ou il y a plusieurs fois le meme chiffre comment lui faire comprendre que c'est plus le meme, parce que en fait dans mon tableau je change la couleur des nombres trouvés mais du coup une fois fait il ne fait pas le nombre suivant, existe t'il un find qui cherche la couleur, comme ca je lui fait verifier si le nombre trouvé n'est pas deja coloré.

dans cette commande est il possible de definir une seule colonne et un nombre de ligne genre J10 à J20

Code : Tout sélectionner

Local $search_cell = $oExcel.Columns("I:J").Find($search_keyword, Default, $xlValues, $xlWhole)
pour une fois que je peut poser des questions, parce que d'habitude je galere tres souvent avant de trouver une solution et encore quand je la trouve.
Avatar du membre
FireFox
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 217
Enregistré le : dim. 14 oct. 2012 01:30
Localisation : Picardie/Île-de-France, France
Status : Hors ligne

Re: [..] Commande recherche chiffre dans excel

#4

Message par FireFox »

J'ai dû mettre la main à la pâte pour trouver comment ça marchait.

Je t'ai fait un exemple :
► Afficher le texte
Cdlt, FireFox.
leonick12
Niveau 2
Niveau 2
Messages : 19
Enregistré le : mer. 25 sept. 2013 23:09
Localisation : Villefranche de Rouergue (12)
Status : Hors ligne

Re: [..] Commande recherche chiffre dans excel

#5

Message par leonick12 »

bonjour, il y a un erreur a cette ligne :

Code : Tout sélectionner

$oExcel = $oExcel.Activesheet
l'erreur :

Code : Tout sélectionner

test ex site.au3 (15) : ==> Variable must be of type "Object".:
$oExcel = $oExcel.Activesheet
$oExcel = $oExcel^ ERROR
j'avoue ne pas trop comprendre...
Avatar du membre
FireFox
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 217
Enregistré le : dim. 14 oct. 2012 01:30
Localisation : Picardie/Île-de-France, France
Status : Hors ligne

Re: [..] Commande recherche chiffre dans excel

#6

Message par FireFox »

Bizarre, moi ça marche sous Excel 2010, sinon enleve la ligne.

Tu peux aussi reprendre ton objet oExcel, puisque t'as juste posté une ligne de ton code fallait bien que je re-construise un exemple complet.

Cdlt, FireFox.
Modifié en dernier par FireFox le sam. 28 sept. 2013 18:33, modifié 2 fois.
leonick12
Niveau 2
Niveau 2
Messages : 19
Enregistré le : mer. 25 sept. 2013 23:09
Localisation : Villefranche de Rouergue (12)
Status : Hors ligne

Re: [..] Commande recherche chiffre dans excel

#7

Message par leonick12 »

ben finalement je suis completement paumé j'y arrive meme plus.

le but de la commande etait de lui faire ignorer la cellule si elle etait verte, on est pas parti dans le bon chemin je pense.
Avatar du membre
FireFox
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 217
Enregistré le : dim. 14 oct. 2012 01:30
Localisation : Picardie/Île-de-France, France
Status : Hors ligne

Re: [..] Commande recherche chiffre dans excel

#8

Message par FireFox »

leonick12 a écrit :ben finalement je suis completement paumé j'y arrive meme plus.

le but de la commande etait de lui faire ignorer la cellule si elle etait verte, on est pas parti dans le bon chemin je pense.
Poste ton code (et ton fichier excel) je vais le modifier pour répondre à ton besoin.

Cdlt, FireFox.
leonick12
Niveau 2
Niveau 2
Messages : 19
Enregistré le : mer. 25 sept. 2013 23:09
Localisation : Villefranche de Rouergue (12)
Status : Hors ligne

Re: [..] Commande recherche chiffre dans excel

#9

Message par leonick12 »

voila comme tu m'as demander le code et les fichiers qui vont avec..

Merci encore.

code :
► Afficher le texte
Fichiers joints
budget.xls
le tableau
(84 Kio) Téléchargé 75 fois
budget.txt
le fichier contenant les operations
(1.38 Kio) Téléchargé 66 fois
Avatar du membre
FireFox
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 217
Enregistré le : dim. 14 oct. 2012 01:30
Localisation : Picardie/Île-de-France, France
Status : Hors ligne

Re: [..] Commande recherche chiffre dans excel

#10

Message par FireFox »

Plusieurs choses:
-Pour la fonction SpashTextOn, quand le paramètre est une taille/coordonnée il faut que tu passes une donnée de type nombre et non texte; par exemple 500 et non "500".
-Le With permet de travailler sur un objet, tu ne peux donc pas y insérer directement des fonctions à l'intérieur :

Code : Tout sélectionner

With $oExcel
    .Visible = 1
    _ExcelSheetActivate($oExcel, "Depenses CEMP") ;PAS BON
    .ParametreX = _ExcelSheetActivate($oExcel, ... ; OK
EndWidth
 
-Je n'ai pas compris l'intérêt de ta boucle For qui fait un maximum de 50 itérations dans laquelle tu incrémentes une variable pour lire ton fichier texte, au final seulement 50 lignes max seront lues.

Après c'est trop le bordel à mes yeux je préfère réécrire le code, ne t'inquiète pas je vais tout commenter.

Cdlt, FireFox.
Avatar du membre
FireFox
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 217
Enregistré le : dim. 14 oct. 2012 01:30
Localisation : Picardie/Île-de-France, France
Status : Hors ligne

Re: [..] Commande recherche chiffre dans excel

#11

Message par FireFox »

Y'a même mieux à faire, si tu pouvais expliquer en détail tout ce que tu souhaites faire histoire que je rédiges le code...
leonick12
Niveau 2
Niveau 2
Messages : 19
Enregistré le : mer. 25 sept. 2013 23:09
Localisation : Villefranche de Rouergue (12)
Status : Hors ligne

Re: [..] Commande recherche chiffre dans excel

#12

Message par leonick12 »

mon script ce sert des donnes du compte recuperer sur le net et mis dans un fichier texte, je lit ce fichier et valide les operations sur le tableau excel en vert car la macro du fichier excel detecte les couleurs et fait varier tout mes tableaux du fichier complet en fonction de ca, tu verras dans le fichier que j'ai donner la macro est presente justement.

hesite pas pour toutes infos.
leonick12
Niveau 2
Niveau 2
Messages : 19
Enregistré le : mer. 25 sept. 2013 23:09
Localisation : Villefranche de Rouergue (12)
Status : Hors ligne

Re: [..] Commande recherche chiffre dans excel

#13

Message par leonick12 »

FireFox a écrit :Plusieurs choses:
-Pour la fonction SpashTextOn, quand le paramètre est une taille/coordonnée il faut que tu passes une donnée de type nombre et non texte; par exemple 500 et non "500".
-Le With permet de travailler sur un objet, tu ne peux donc pas y insérer directement des fonctions à l'intérieur :

Code : Tout sélectionner

With $oExcel
    .Visible = 1
    _ExcelSheetActivate($oExcel, "Depenses CEMP") ;PAS BON
    .ParametreX = _ExcelSheetActivate($oExcel, ... ; OK
EndWidth
 
-Je n'ai pas compris l'intérêt de ta boucle For qui fait un maximum de 50 itérations dans laquelle tu incrémentes une variable pour lire ton fichier texte, au final seulement 50 lignes max seront lues.

Après c'est trop le bordel à mes yeux je préfère réécrire le code, ne t'inquiète pas je vais tout commenter.

Cdlt, FireFox.
en fait il ouvre le fichier texte, il recupere la premiere ligne, verifie que la ligne contient bien une operation, il recupere et modifie la valeur pour que ca corresponde avec excel, apres il la cherche dans le tableau, une fois trouvé il la met en vert, et recommencer la manip jusqua la ligne ou il trouve plus d'operation. voila tout le deroulement complet.
leonick12
Niveau 2
Niveau 2
Messages : 19
Enregistré le : mer. 25 sept. 2013 23:09
Localisation : Villefranche de Rouergue (12)
Status : Hors ligne

Re: [..] Commande recherche chiffre dans excel

#14

Message par leonick12 »

voila j'ai trouvé la solution, ca marche super bien et je peut definir exactement la colonne et ligne que je veut.

c'est pas tres mega code, mais bon c'est de la bidouille, je fait avec ce que je connais.
► Afficher le texte
Modifié en dernier par mikell le dim. 29 sept. 2013 12:45, modifié 1 fois.
Raison : balise spoiler
Avatar du membre
FireFox
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 217
Enregistré le : dim. 14 oct. 2012 01:30
Localisation : Picardie/Île-de-France, France
Status : Hors ligne

Re: [..] Commande recherche chiffre dans excel

#15

Message par FireFox »

Il manque le fichier Cellules dans ce cas.

C'est pas assez détaillé mais je verrai si j'arrive à comprendre.
leonick12
Niveau 2
Niveau 2
Messages : 19
Enregistré le : mer. 25 sept. 2013 23:09
Localisation : Villefranche de Rouergue (12)
Status : Hors ligne

Re: [..] Commande recherche chiffre dans excel

#16

Message par leonick12 »

le fichier cellules ne manquent pas il se creer avec la lecture du tableau

voila la version complete et niquel pour le tableau depenses, ca tiens compte de l'annee pour les op ainsi que du mois sur le tableau, ca evite de rester tout le temps sur le meme mois.

Code : Tout sélectionner

#include <Excel.au3>
$arret=0
$arret2=0
$annee=@YEAR

; -------------------------- ouverture fichier(s)

$ligne=1
#include <Excel.au3>
Local $oExcel=_ExcelBookOpen("C:\Users\leonick\Desktop\budget.xls",1)

FileWrite("C:\Users\leonick\Desktop\CELLULES.txt","")   
   
   FileOpen("C:\Users\leonick\Desktop\CELLULES.txt",0)
   

FileOpen("C:\Users\leonick\Desktop\budget.txt",0)

With $oExcel
    .Visible = 1
    _ExcelSheetActivate($oExcel,"Depenses CEMP")

EndWith
; --------------------------- recherche le mois en cours 

Select
Case @MON =1
$monthday = "janvier"
Case @MON =2
$monthday = "février"
Case @MON =3
$monthday = "mars"
Case @MON =4
$monthday = "avril"
Case @MON =5
$monthday = "mai"
Case @MON =6
$monthday = "juin"
Case @MON =7
$monthday = "juillet"
Case @MON =8
$monthday = "août"
Case @MON =9
$monthday = "septembre"
Case @MON =10
$monthday = "octobre"
Case @MON =11
$monthday = "novembre"
Case @MON =12
$monthday = "décembre"
EndSelect

Local $search_keyword = $monthday
Local $search_cell = $oExcel.Columns("A:Z").Find($search_keyword) ; ------- chercher la colonne du mois en cours

If( IsObj($search_cell) = 1 ) Then ; Si la recherche à abouti
 ;  Local $ligne = $oExcel.Columns("A:Z").Find($search_keyword).Row

Local $colonne = $oExcel.Columns("A:Z").Find($search_keyword).Column

;$line = _ExcelReadCell($oExcel, $ligne, $colonne)
;SplashTextOn("","Colonne : "&$colonne,"300","100","50","50")
;Sleep(2000)

Else

SplashTextOn("","Pas bon","300","100","50","50")

Sleep(2000)

EndIf

$ligne=1
$ligne_cellule=12
$colonne_cellule=$colonne

For $zb = 50 To 0 Step -1

; ---------------------------------------------------------------------- recuperation ligne fichier

$valeur=FileReadLine("C:\Users\leonick\Desktop\budget.txt",$ligne)

if $valeur="" Then
   FileDelete("C:\Users\leonick\Desktop\CELLULES.txt")
   Exit
Else
   EndIf
   
 Local $result = StringInStr($valeur,$annee)
  
if $result<1 Then ; plus de ligne avec operation
   
   $arret=$arret+1
   
   if $arret=3 Then

     Exit
     
  Else
     
  EndIf
  
Else ; ligne avec op adaptation a excel
    $result = StringInStr($valeur,"-")
$result=$result+2
$valeur=StringMid($valeur, $result)
$valeur=StringReplace($valeur, "€", "")
$valeur=StringReplace($valeur, " ", "")
$resulttt = StringInStr($valeur,",00")

if $resulttt >0 Then
   $valeur=StringReplace($valeur, ",00", "")
Else
EndIf

 $valeur=StringReplace($valeur, ",10", ",1")
 $valeur=StringReplace($valeur, ",20", ",2")
 $valeur=StringReplace($valeur, ",30", ",3")
 $valeur=StringReplace($valeur, ",40", ",4")
 $valeur=StringReplace($valeur, ",50", ",5")
 $valeur=StringReplace($valeur, ",60", ",6")
 $valeur=StringReplace($valeur, ",70", ",7")
 $valeur=StringReplace($valeur, ",80", ",8")
 $valeur=StringReplace($valeur, ",90", ",9")       
EndIf

; --------------------------------------- recherche

For $za = 50 To 0 Step -1
 
    $line = _ExcelReadCell($oExcel, $ligne_cellule, $colonne_cellule)
    
    $line=StringReplace($line, ".", ",")
    
;   SplashTextOn("F"&$ligne&"C"&$ligne_cellule,"C "&$line&"F "&$valeur,"300","100","50","50")
Sleep(50)
;SplashOff()

if $line=$valeur then ; si la cellule correspond à l'operation
   
    $valeurs=FileRead("C:\Users\leonick\Desktop\CELLULES.txt")  ; fichier qui contient les lignes de cellules cochees
    
       
   $result = StringInStr($valeurs,$ligne_cellule) ; verifie le fichier des cellules
   
   if $result = 0 Then
      
    ;  SplashTextOn("","ligne pas cochée","300","100","50","50")
;Sleep(1000)
;SplashOff()

 ; ------------------------------------------------------------------------------------- coloriage
      $oExcel.ActiveSheet.Range(Chr(64 + $colonne_cellule) & $ligne_cellule).Value
       With $oExcel.ActiveSheet.Range(Chr(64 + $colonne_cellule) & $ligne_cellule).Font

    If Mod($ligne_cellule, 2) Then
       Else
      EndIf
           
     .ColorIndex = 43
            .Strikethrough = False
           .Superscript = False
          .Subscript = False
         .OutlineFont = False
        .Shadow = False
EndWith

FileWriteLine("C:\Users\leonick\Desktop\CELLULES.txt",$ligne_cellule) ; ajoute ligne cellule cochee
$ligne_cellule=12
$za=0

Else
   
;  SplashTextOn("","ligne cochée","300","100","50","50")
;Sleep(1000)
;SplashOff()
   
   EndIf
   
  Else
  If $line="" Then ; cellule vide
$arret2=$arret2+1

if $arret2=3 Then

  $ligne_cellule=12
  
  Else
     EndIf
 ; $za=0

  Else
  EndIf
  
EndIf

    $ligne_cellule=$ligne_cellule+1
    
    if $ligne_cellule =51 Then
       $ligne_cellule=12
       
       $za=0
       
    Else
       EndIf
            
        Next
$ligne=$ligne+1
Next
 FileDelete("C:\Users\leonick\Desktop\CELLULES.txt")
Avatar du membre
FireFox
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 217
Enregistré le : dim. 14 oct. 2012 01:30
Localisation : Picardie/Île-de-France, France
Status : Hors ligne

Re: [..] Commande recherche chiffre dans excel

#17

Message par FireFox »

Tu aurais pu au moins appliquer mes remarques dans la modification de ton script.

Ce n'est pas grave, mais tu n'as toujours pas expliqué ce que fais ton script; ce que j'ai compris c'est qu'il va comparer les prix aux cellules et si le prix n'est pas répertorié dans le fichier cellules alors il recommence au début (là j'ai pas compris pourquoi) sinon il met la cellule en vert.

Y'a pas mal de points à éclaircir.

PS: y'a pas de macros dans le fichier excel.

Cdlt, FireFox.
leonick12
Niveau 2
Niveau 2
Messages : 19
Enregistré le : mer. 25 sept. 2013 23:09
Localisation : Villefranche de Rouergue (12)
Status : Hors ligne

Re: [..] Commande recherche chiffre dans excel

#18

Message par leonick12 »

Le fichier texte contient simplement les operations du compte qui sont recuperer plus tot avec une autre manip, apres il ouvre le fichier texte, il recupere la premiere ligne, verifie que la ligne contient bien une operation, il recupere et modifie la valeur pour que ca corresponde avec excel, apres il la cherche dans le tableau, une fois trouvé il la met en vert, et recommencer la manip jusqua la ligne ou il trouve plus d'operation. voila tout le deroulement complet

Apres pour les manips desole, tout le reste fonctionner deja donc j'ai juste rajouter ce qui me manquer.
Modifié en dernier par Tlem le dim. 29 sept. 2013 18:18, modifié 1 fois.
Raison : Suppression de la citation (inutile en la circonstance)
Avatar du membre
FireFox
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 217
Enregistré le : dim. 14 oct. 2012 01:30
Localisation : Picardie/Île-de-France, France
Status : Hors ligne

Re: [..] Commande recherche chiffre dans excel

#19

Message par FireFox »

On va revenir juste à la fonction find pour que tu puisses rajouter à ton script ce que tu souhaites.

Ce que j'avais trouvé était un peu fouillis, il s'avère qu'on peut utiliser range avec les coordonnées alpha-numériques.

Ouvre un nouveau fichier excel et lance ce nouvel exemple :
► Afficher le texte
Comme tu peux le voir j'ai remplacé Columns par range, pour spécifier sur quelle plage je veux effectuer ma recherche, si la 1ère occurence se trouve à la ligne 2 alors je vais commencer à 3 (ici A3).

Conseils pour ton script: Les Else sont inutiles si il n'y a rien dans le Else donc tu peux écrire :

Code : Tout sélectionner

If ... Then
    ;ton code
EndIf
 
Et si ton code dans le If ne fait qu'une seule ligne tout simplement :

Code : Tout sélectionner

If ... Then ;ton code
 
Après il y a pleins d'améliorations à faire et corrections.

Par exemple lorsque tu ouvres un fichier avec FileOpen il faut fermer le handle par un FileClose.
Les incrémentations $ligne = $ligne+1 par $ligne += 1

Bref, lis bien le manuel d'aide pour les fonctions que tu utilises.

Edit: Tu peux remplacer ton Select par:

Code : Tout sélectionner

Local $aMois[12] = ["janvier", "février", "mars", "avril", "mai", "juin", "juillet", "août", "septembre", "octobre", "novembre", "décembre"]
$monthday = $aMois[@MON -1]
 
Cdlt, FireFox.
leonick12
Niveau 2
Niveau 2
Messages : 19
Enregistré le : mer. 25 sept. 2013 23:09
Localisation : Villefranche de Rouergue (12)
Status : Hors ligne

Re: [..] Commande recherche chiffre dans excel

#20

Message par leonick12 »

oui c'est sur que t'a plus l'habitude que moi, moi j'ai beau connaitre autoit depuis quelques annees, j'ai pris les mauvaises habitudes et surtout j'ai pas chercher plus simple, je part du principe que ca marche donc j'avoue ne pas me compliquer plus, mais j'ai fait une version definitive qui est parfaite tiens compte du mois de l'annee des cases cochees ou non et aussi reparti les operations sur les feuilles en fonction des donnees de l'operation, mais je vais tester certains de tes trucs. encore merci, c'est plutot rare un bon dialogue sur les forums.
Répondre