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

Signaler
Messages postés
5
Date d'inscription
mercredi 4 octobre 2006
Statut
Membre
Dernière intervention
5 octobre 2006
-
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
-
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

Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
18
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
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
36
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 #
Messages postés
797
Date d'inscription
mardi 7 juin 2005
Statut
Membre
Dernière intervention
23 février 2011
5
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
Messages postés
5
Date d'inscription
mercredi 4 octobre 2006
Statut
Membre
Dernière intervention
5 octobre 2006

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 !


 


 
Messages postés
5
Date d'inscription
mercredi 4 octobre 2006
Statut
Membre
Dernière intervention
5 octobre 2006

Ok, c'est tout bon !

Merci pour votre aide.

A bientôt !
Messages postés
5
Date d'inscription
mercredi 4 octobre 2006
Statut
Membre
Dernière intervention
5 octobre 2006

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" ?
Messages postés
126
Date d'inscription
vendredi 2 décembre 2005
Statut
Membre
Dernière intervention
23 février 2007

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
Messages postés
126
Date d'inscription
vendredi 2 décembre 2005
Statut
Membre
Dernière intervention
23 février 2007

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
Messages postés
126
Date d'inscription
vendredi 2 décembre 2005
Statut
Membre
Dernière intervention
23 février 2007

Pardon pour le double post.
Messages postés
797
Date d'inscription
mardi 7 juin 2005
Statut
Membre
Dernière intervention
23 février 2011
5
 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
Messages postés
5
Date d'inscription
mercredi 4 octobre 2006
Statut
Membre
Dernière intervention
5 octobre 2006

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