Macro Excel

Bonjour,

Je voudrai faire une macro mais je suis complètement nulle en macro. Cette macro serait pour me récupérer une valeur dans une colonne D dans une liste de fichiers selon la valeur d'une autre colonne B. En fait c'est plusieurs factures (une facture = un fichier Excel) et je veux récupérer la quantité vendue pour un article.

Quelqu'un pourrait-il m'aider, svp ?

Merci d'avance pour vos réponses.

Bonjour,

Une simple formule RechercheV ne suffirait-il pas ?

Si besoin, tu peux imbriquer deux RechercheV

Envoi un fichier avec un exemple concret de ce que tes données (si confidentielles, remplacer les valeurs). on regardera cela.

A+

Benead

Bonjour,

Je ne sais pas si la fonction RechercheV suffirait car il faut chercher dans une liste non défénie de fichiers Excel, les valeurs d'une colonne selon une autre colonne pour faire une somme des valeurs récupérées. En concret c'est récupérer la quantité vendue d'un article depuis les factures faites.

Je vous enverrai un exemple de facture si vous voulez.

Merci pour votre réponse.

@+

Elsa QUEYLAT

Bonsoir Elsa,

Oui, mets un exemple de facture, je regarderai cela ce weekend si personne ne te réponds d'ici là.

A+

Benead

bonsoir

a l'aveuglette

SOMME.si ou SOMMEPROD

QU' entend par fichier (onglets) sont -ils dans differents classeurs

comme quoi il faut imperativement joindre un document representatif de ton ouvrage

cordialement

Bonjour,

Ce sont des fichiers Excel différents. Voici en pièce 2 exmples de facture et je voudrai récupérer la somme des quantités vendues de Rosé que ce soit en BIB ou Vrac de toutes les factures (somme facture1 + somme facture2).

Merci d'avance.

Cordialement,

Elsa QUEYLAT

14facture1.xls (19.00 Ko)
20facture2.xls (19.00 Ko)

Bonsoir Elsa,

En fait, tu veux consolider x classeurs pour faire une base de données de synthèse.

Comment comptes-tu procéder ?

Est-ce que tous les classeurs, sont dans le même répertoire ? (c'est plus simple pour l'automatisation)

Que fais-tu des classeurs une fois qu'il sont intégrés dans la synthèse ? Le mieux est de les archiver dans un autre répertoire ou de préfixer son nom de fichier (SavClasseur1.xls par exemple)

Rassure-moi, stp, toutes les factures sont formatées de la même façon ? Avec le même nombre de lignes ?

Si Feuil2 et Feuil3 sont inutilisées, serait mieux de ne pas les avoirs, cela évite des erreurs ou des contrôles supplémentaires : si, par exemple, un utilisateur déplace une feuil2 et la mets devant Feuil1, ou fait deux factures dans le même classeur, cela oblige à faire du code pour vérifier toutes les possibilités. Cela dit, on pourrait mettre de coté le fichier ou t'informer si une anomalie est détecter.

A+

Benead

bonjour

une proposition de principe avec des formules simples

1) les classeurs doivent etre ouverts

2) c'est le fichier 1 qui sert de recepteur ( actuellement)

3) j'ai creer une liste simple des produits a rechercher pour tester ( a ameliorer )

17facture1.zip (7.63 Ko)
10f22-1.zip (4.41 Ko)

cordialement

Bonjour Benead,

Oui tous les classeurs (environ 50) sont dans le même répertoire et les factures sont formatées de la même façon avec le même nombre de lignes.

Je comptais archiver les fichiers dans un autre répertoire quand la synthèse de ces derniers est faite.

Les Feuil2 sont utilisées.

Merci d'avance pour ton aide.

cordialement,

Elsa


Bonjoru tulipe_4 ,

Ta solution fonctionne bien mais pour moi elle n'est pas très pratique car cela m'oblige à ouvrir tous les classeurs sachant qu'ils sont nombreux.

J'attends une nouvelle solution plus fonctionnelle pour moi, je pense que Benead a des pistes.

Merci quand même pour ton aide.

Cordialement.

Bonjour Elsa,

Quand du dis

Les Feuil2 sont utilisées.

Cela veux dire que tu peux avoir des factures sur Feuil1 et Feuil2 ou bien Feuil1 ou Feuil2 ?

J'attends ta réponse, ensuite je te fais un petit programme qui générera un portefeuille de lignes de factures et stockera les fichiers traités dans un autre répertoire.

A+

Benead

Quand je dis que les Feuil2 sont utilisées c'est qu'il y a d'autres données dans ces feuilles (par exemple, liste des clients avec leurs adresses) mais il ne peut pas y avoir de factures.

Cordialement,

Elsa

Bonjour Elsa,

Merci pour les précisions. Je te fais un truc avant la fin de semaine. Peut-être ce soir si j'ai un peu de temps.

A+

Benead

Bonsoir,

Un conseil : il est préférable de renommer "Feuil1" par "Facture". Cela facilite la compréhension du programme, mais c'est aussi plus simple pour l'utilisateur.

Dans mes tests, j'ai conservé l'appellation " Feuil1", il faudra donc que tu changes la ligne

Set ShFacture = Wbk.Worksheets("Feuil1")

en mettant "Facture" si tu changes le nom de tes feuilles

Voici le code :

Option Explicit

Sub MajDeTousLesClasseurs()
   Dim sFichier As String, sCheminFact As String, sCheminSave As String
   Dim Wbk As Workbook, ShFacture As Worksheet

   ' Déclaration des variables répertoires
   sCheminFact = "D:\Test\Factures\"
   sCheminSave = "D:\Test\Factures\Save\"

   sFichier = Dir(sCheminFact & "\*.xl*") ' Recherche du premier Fichier Excel du répertoire
   Do While sFichier <> "" ' Boucle dans le répertoire
      Workbooks.Open sCheminFact & sFichier ' Ouverture du classeur
      Set Wbk = Workbooks(sFichier)
      Set ShFacture = Wbk.Worksheets("Feuil1")
      Call MajSynthese(ShFacture) ' Màj de la synthèse
      Workbooks(sFichier).Close False ' Fermeture du classeur
      Name (sCheminFact & sFichier) As (sCheminSave & sFichier) ' Déplacement du fichier dans le répertoire Save
      sFichier = Dir ' Fichier suivant
   Loop
'   ThisWorkbook.Save ' Enlever l'apostrophe pour sauvegarde automatique
End Sub

Private Sub MajSynthese(ShFacture As Worksheet)
   Dim lPremLig As Long, lLig As Long, lLigSynth As Long, ShSynth As Worksheet

   Set ShSynth = ThisWorkbook.Worksheets("Synthèse")

   With ShSynth
      lPremLig = 6   ' Première ligne détail de la facture
      For lLig = lPremLig To ShFacture.UsedRange.Rows.Count
         If Len(ShFacture.Cells(lLig, "B")) > 3 Then ' on teste que la longueur du libellé article est >3C (un ctrl parmi d'autres)
         lLigSynth = ShSynth.UsedRange.Rows.Count + IIf(.Cells(ShSynth.UsedRange.Rows.Count, "A") = Empty, 0, 1)
         .Cells(lLigSynth, "A") = ShFacture.Parent.Name ' Nom du classeur
         .Cells(lLigSynth, "B") = ShFacture.Range("B2").Value ' Code Facture (Entete)
         .Cells(lLigSynth, "C") = ShFacture.Cells(lLig, "A").Value ' Date (Ligne)
         .Cells(lLigSynth, "D") = Replace(ShFacture.Range("D3").Value, vbLf, " - ") ' Adresse (Entete)
         .Cells(lLigSynth, "E") = ShFacture.Cells(lLig, "B").Value ' libellé article (Ligne)
         .Cells(lLigSynth, "F") = ShFacture.Cells(lLig, "C").Value ' PU (Ligne)
         .Cells(lLigSynth, "G") = ShFacture.Cells(lLig, "D").Value ' Qté (Ligne)
         .Cells(lLigSynth, "H") = ShFacture.Cells(lLig, "E").Value ' Total (Ligne)
         End If
      Next lLig
   End With
End Sub

Je te mets le fichier de synthèse en pj

Tu dois changer les deux lignes :

   sCheminFact = "D:\Test\Factures\"
   sCheminSave = "D:\Test\Factures\Save\"

en mettant les chemins des répertoires des factures et des sauvegardes (Save)

Tu testes cela et me redis les ajustements à faire.

A+

Benead

Bonjour Elsa,

As-tu eu le temps de tester ?

Cela fonctionne t-il ?

A+

Benead

Bonjour,

En fait le modèle de facture a été modifié et je n'arrive pas à faire fonctionner ta macro avec mon nouveau modèle.

Te voici en PJ un exemple de facture, si tu peux adapter ce que tu as fait pour ce modèle ça m'arrangerait bien. Sinon ta synthèse me semble bien.

Cordialement,

Elsa

Bonjour Elsa33,

J'ai corrigé le résumé en fonction de la nouvelle facture. Si tu la modifies encore, il faudra modifier le code en conséquence.

Redis-moi si cela te convient ou s'il faut apporter un correctif.

A+

Benead

Rechercher des sujets similaires à "macro"