Trouver un numéro de facture dans excel pour inscrire "payé" à côté

Résolu
b12n70 Messages postés 5 Date d'inscription mercredi 4 octobre 2006 Statut Membre Dernière intervention 5 octobre 2006 - 4 oct. 2006 à 16:48
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 - 5 oct. 2006 à 11:05
Bonjour à tous,

Je cherche comment localiser une valeur dans un tableau excel 2003, afin de venir écrire dans les cellules à côté.

Concrètement, ma macro est sur une facture, et quand on l'exécute, elle récupère le numéro de facture, le mode et la date de paiement, ouvre un autre classeur appelé "numérotation.xls", et (et c'est là que je plante) recherche dans la colonne K le numéro de facture, pour écrire "payé" dans la colonne L, la date en M et le mode en N.

Mon code actuel est le suivant : (désolé si le format n'y est pas, j'avoue ne pas avoir lu TOUTES les règles du forum)


Sub PayéFacture()


    Dim Num As String
    Dim Pay As String
    Dim Dat As String
    Dim Mode As String
   
'Récupère les informations dans la facture :

    Num = Cells(19, 3).Value
    Pay = Cells(60, 9).Value
    Dat = Cells(60, 5).Value
    Mode = Cells(60, 1).Value

    Workbooks.Open Filename:= _
    "[file://\\DCMZZ32J\Facturation\Numérotation.xls \\DCMZZ32J\Facturation\Numérotation.xls]"
        Sheets("Numéro").Select
    
    Columns("M:M").Select
       
Columns.Find(What:=Num, After:=ActiveCell, LookIn:=xlFormulas, LookAt _
        :=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:= _
        False, SearchFormat:=False).Activate
 

   ActiveCell(1, 2).Select
   ActiveCell.FormulaR1C1 = Pay
   ActiveCell(1, 2).Select
   ActiveCell.FormulaR1C1 = Dat
   ActiveCell(1, 2).Select
   ActiveCell.FormulaR1C1 = Mode
 

   ActiveWorkbook.Save
    ActiveWindow.Close
   
End Sub

C'est apparemment la partie recherche qui coince : Je n'arrive pas à définir la colonne K comme zone de recherche.

Qui pourrait me dire où est l'erreur ?

Merci d'avance

11 réponses

cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
5 oct. 2006 à 11:05
Tu écris:

Columns("K:K").Select

Columns.Find(What:=Num, After:=ActiveCell, LookIn:=xlFormulas, LookAt _

        :=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:= _

        False, SearchFormat:=False).Activate


Tu devrais remplacer Columns.Find par Selection.Find

ou éliminer la première ligne de sélection et mettre

Columns("K:K").Find....

MPi
3
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
4 oct. 2006 à 17:03
Bien que je ne connaisse pas VBA et que je ne comprenne pas trop ce que tu fais, dans la requete de recherche j'aurais plutot mis
LookIn: = xlValues

Et d'après ce que j'ai pu en compredre dans l'aide, je n'aurais peut-etre pas précisé l'argument After: aussi

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
0
Molenn Messages postés 797 Date d'inscription mardi 7 juin 2005 Statut Membre Dernière intervention 23 février 2011 7
4 oct. 2006 à 17:32
Ben, je ne comprends pas trop.
Ta formule est définie pour chercher dans la colonne M, c'est marqué en clair, il te suffit de mettre K à la place.


Ensuite, effectivement, il vaut mieux chercher une valeur plutôt qu'une formule (ça dépend comment est rentré ton n° de facture, mais je pense que çà fonctionnera mieux). Et donc, derrière, remplir tes cellules avec la valeur, et non une formule.

Ce qui donnera sur ton code :

Columns("K:K").Select
Columns.Find(What:=Num, After:=ActiveCell, LookIn:=xlValues, LookAt _
        :=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:= _
        False, SearchFormat:=False).Activate

Au fait, quel est l'intérêt de ceci ?
   ActiveCell(1, 2).Select
   ActiveCell.FormulaR1C1 = Pay
   ActiveCell(1, 2).Select
   ActiveCell.FormulaR1C1 = Dat
   ActiveCell(1, 2).Select
   ActiveCell.FormulaR1C1 = Mode

Tu sélectionnes à chaque fois la même cellule, et tu remplaces 3 fois la formule, autant mettre seulement la dernière ligne.
Et vu le contenu de tes variables, il est sans doute plus indiqué de mettre : 
Cells(1, 2).Value = Mode

Molenn
0
b12n70 Messages postés 5 Date d'inscription mercredi 4 octobre 2006 Statut Membre Dernière intervention 5 octobre 2006
4 oct. 2006 à 17:56
Autant pour moi !


 


En effet, c'est K que j'ai mis, M était pour un essai...

Molenn>
"Au fait, quel est l'intérêt de ceci ?
   ActiveCell(1, 2).Select
   ActiveCell.FormulaR1C1 = Pay
   ActiveCell(1, 2).Select
   ActiveCell.FormulaR1C1 = Dat
   ActiveCell(1, 2).Select
   ActiveCell.FormulaR1C1 = Mode"

En face de mon numéro, j'inscris "payé", je me déplace d'une cellule vers la droite, j'inscris la date, puis encore à droite "chèque"

Mais cette partie fonctionne.

Je vais essayer avec "values" au lieu de" formulas", et je vous tiendrai au courant.

Merci beaucoup en attendant !


 


 
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
b12n70 Messages postés 5 Date d'inscription mercredi 4 octobre 2006 Statut Membre Dernière intervention 5 octobre 2006
4 oct. 2006 à 18:07
Ok, c'est tout bon !

Merci pour votre aide.

A bientôt !
0
b12n70 Messages postés 5 Date d'inscription mercredi 4 octobre 2006 Statut Membre Dernière intervention 5 octobre 2006
5 oct. 2006 à 09:18
Oups, y'a encore un souci :

La recherche ne s'effectue pas uniquement dans la colonne K. Si elle trouve une cellule contenant le n° de facture en A1, elle ecrit en A2, A3 et A4.


 


Pourquoi, puisque je lui ai spécifié "columns ("K:K").Select" ?
0
cs_ZANUS Messages postés 126 Date d'inscription vendredi 2 décembre 2005 Statut Membre Dernière intervention 23 février 2007
5 oct. 2006 à 09:40
Salut, il faudrait peut-être que tu affiches le code que tu utilises finalement. Je supposses que tu as utilisé l'enregistreur, non?
Tu dois avoir ça

Dim Num As String
Dim Pay As String
Dim Dat As String
Dim Mode As String
  
'Récupère les informations dans la facture :


    Num = Cells(19, 3).Value
    Pay = Cells(60, 9).Value
    Dat = Cells(60, 5).Value
    Mode = Cells(60, 1).Value
    
    Workbooks.Open Filename:= _
        "Chemin de ton fichier/Nom de ton fichier"
        'Ouvrir tonfichier 
        Range("K:K").Select
        Cells.Find(What:=Num, After:=ActiveCell, LookIn:=xlValues, LookAt:= _
        xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext).Activate
        'Chercher la val Num
        ActiveCell(1, 2) = "Pay"
        'inscrire le texte Pay dans la cellule de droite de 1
        '(1,2)= même ligne (1), 2è colonne
ActiveCell(1, 3) = "Dat"
ActiveCell(1, 4) = "Mod"
Range("K1").Select
    ActiveWindow.Close
    End Sub
0
cs_ZANUS Messages postés 126 Date d'inscription vendredi 2 décembre 2005 Statut Membre Dernière intervention 23 février 2007
5 oct. 2006 à 09:41
Salut, il faudrait peut-être que tu affiches le code que tu utilises finalement. Je supposses que tu as utilisé l'enregistreur, non?
Tu dois avoir ça

Dim Num As String
Dim Pay As String
Dim Dat As String
Dim Mode As String
  
'Récupère les informations dans la facture :


    Num = Cells(19, 3).Value
    Pay = Cells(60, 9).Value
    Dat = Cells(60, 5).Value
    Mode = Cells(60, 1).Value
    
    Workbooks.Open Filename:= _
        "Chemin de ton fichier/Nom de ton fichier"
        'Ouvrir tonfichier 
        Range("K:K").Select
        Cells.Find(What:=Num, After:=ActiveCell, LookIn:=xlValues, LookAt:= _
        xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext).Activate
        'Chercher la val Num
        ActiveCell(1, 2) = "Pay"
        'inscrire le texte Pay dans la cellule de droite de 1
        '(1,2)= même ligne (1), 2è colonne
ActiveCell(1, 3) = "Dat"
ActiveCell(1, 4) = "Mod"
Range("K1").Select
    ActiveWindow.Close
    End Sub
0
cs_ZANUS Messages postés 126 Date d'inscription vendredi 2 décembre 2005 Statut Membre Dernière intervention 23 février 2007
5 oct. 2006 à 09:43
Pardon pour le double post.
0
Molenn Messages postés 797 Date d'inscription mardi 7 juin 2005 Statut Membre Dernière intervention 23 février 2011 7
5 oct. 2006 à 10:06
 874410 b12n70 :
A ma question, à quoi sert 
ActiveCell(1, 2).Select
ActiveCell.FormulaR1C1 = Pay

Je m'excuxe, je n'avais pas tilté qu'avec ActiveCell, ça se décalait.
Tellement l'habitude de faire Cells(1,2) Cells(1,3) ... quand je décale mes cellules

Sinon, je viens de réessayer chez moi, je n'arrive pas à lui faire trouver ce que je cherche dans une autre colonne que celle sélectionnée.
Si tu pouvais nous mettre le code de ta macro tel qu'il est à présent, ça serait mieux oui.

Molenn
0
b12n70 Messages postés 5 Date d'inscription mercredi 4 octobre 2006 Statut Membre Dernière intervention 5 octobre 2006
5 oct. 2006 à 11:03
Ca y est !

Après avoir bidouillé un peu et effectué une série de tests, j'ai mon résultat avec le code suivant :

J'utilise "selection.find" plutôt que "cells.find" pour forcer la recherche dans la colonne que je viens de sélectionner.

Sub PayéFacture()


    Dim Num As String
    Dim Pay As String
    Dim Dat As String
    Dim Mode As String
   
    Num = Cells(19, 3).Value
    Pay = Cells(60, 9).Value
    Dat = Cells(60, 5).Value
    Mode = Cells(60, 1).Value
   
    Workbooks.Open Filename:= _
    "[file://\\DCMZZ32J\Facturation\Numérotation.xls \\DCMZZ32J\Facturation\Numérotation.xls]"
        Sheets("Numéro").Select
       
  Columns("K:K").Select
Selection.Find(What:=Num, After:=ActiveCell, LookIn:=xlValues, LookAt _
        :=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:= _
        False, SearchFormat:=False).Activate




    ActiveCell(1, 2).Select
    ActiveCell.FormulaR1C1 = Pay
    ActiveCell(1, 2).Select
    ActiveCell.FormulaR1C1 = Dat
    ActiveCell(1, 2).Select
    ActiveCell.FormulaR1C1 = Mode
   
    ActiveWorkbook.Save
    ActiveWindow.Close
   
End Sub




Merci encore pour votre aide précieuse
0
Rejoignez-nous