Importer des données de fichier excel et les traiter

julie169

XLDnaute Nouveau
Salut à toutes et à tous,

Je cherche à calculer le prix de revient d'un appareil en utilisant deux fichiers excel.

Dans l'un on a tous les composants (et leur nombre) constituant l'appareil, dans l'autre on a le prix de plein de composants.(bien plus que pour l'appareil)

Je souhaite faire ce calcul automatiquement.
C'est à dire l'utilisateur du fichier que je veux créer doit sélectionner l'appareil dans une liste. cette liste sera en fait des noms de fichier excel tous contenus dans un même dossier (fichier qui contient la liste des composants de l'appareil )

après sélection de l'appareil par l'utilisateur (à ce moment on va chercher le fichier excel en question par ouverture discrète), on compare la liste des composants avec la liste des prix.
On va rechercher le prix des composants dans la liste des prix.
On calcule les prix par composant (X composant A à Y € = Z€)
et enfin le prix total de l'appareil. (Somme de tous les Z)

Comme vous l'avez compris il y a plusieurs séquence dans cette application.
Je suis toute disponible à les traiter les une après les autres. Le but étant aussi que je comprenne pour pouvoir refaire voir améliorer.

Merci à tous pour votre soutient.

Julie
 

julie169

XLDnaute Nouveau
Re : Importer des données de fichier excel et les traiter

...

c'est ça ?...


Ouiii!

...
Pour chaque type de composant
il retrouve l'identifiant (dans la colonne 1 ? rien ne correspond...)
...

J'ai volontairement supprimé une grande partie du fichier liste de prix.Xls.


..
il note le prix (de quelle colonne ?)
..

Tu trouves le prix dans la colonne G: 'Cost price'

Merci.

Julie
 

julie169

XLDnaute Nouveau
Re : Importer des données de fichier excel et les traiter

Bonsoir à tous!

C'est bon ça marche!! YYYHAAAAA!

par contre peux tu me fournir le code avec des commentaires pour que je comprenne. (les grosses lignes, après je me débrouille)
je vais encore développer deux trois petit appli et mon fichier de clacul de prix de revient sera top!

Merci à tous pour vos posts,
Special Thanks to Mr Tototiti.!
 
Dernière édition:

julie169

XLDnaute Nouveau
Re : Importer des données de fichier excel et les traiter

Salut et merci,

Tes commentaires m'ont permis de comprendre ton calcul grâce à la fonciton RechercheV (Vlookup)

J'ai encore besoin de développer certaines applis mais le résultat est déjà bien avancé.

Merci encore;


Julie
 

julie169

XLDnaute Nouveau
Re : Importer des données de fichier excel et les traiter

Salut à tous,
Salut Tototiti,

En fait il y a une erreur sur le fichier que tu m'as envoyé.

Le programme n'arrive pas à retrouver le code article (6 lettres + 6 chiffres sans désignation) dans la feuille avec les prix et donc c'est impossible de calculer un prix autre que 0€.

je me demandais comment on pouvait faire un VlookUp avec données partielle?
Le top serait une formule que l'on peut paramétrer avec comme argument un espace. car les données articles ont comme format dans certains cas '6lettres+6chiffres [espace] désignation' et dans d'autres un code quelconque 'NXXX [espace] désignation'.

pour mon problème ça serait: tu as d'un côté 'code article + désignation' et de l'autre uniquement 'code article' seulement.

Voir fichier joint (liste de prix)
Merci

Julie
 

Pièces jointes

  • Calcul_PdR.zip
    39.8 KB · Affichages: 44

tototiti2008

XLDnaute Barbatruc
Re : Importer des données de fichier excel et les traiter

Bonjour Julie,

à tester, la modif du code de la Sub CherchePrix :

Code:
        For i = 1 To UBound(ListeComp, 1)
            Code = Left(ListeComp(i, 2), InStr(1, ListeComp(i, 2), " ") - 1)
            'Si on ne trouve pas la référence du composant en colonne A
            If Application.WorksheetFunction.CountIf(Wkb.ActiveSheet.Range("A4:A" & DerLigne), Code) = 0 Then
                'on change la remarque
                Remarque = "Certains composants sont introuvables dans Liste prix composant.xls"
            Else
                'sinon on calcule le total avec la fonction Recherchev(Vlookup)
                Total = Total + CLng(ListeComp(i, 1)) * CDbl(Application.WorksheetFunction.VLookup(Code, Wkb.ActiveSheet.Range("A4:G" & DerLigne), 7, False))
            End If
        Next i
 

julie169

XLDnaute Nouveau
Re : Importer des données de fichier excel et les traiter

Salut Tototiti, Salut Forum,

Merci, la Sub recherche prix fonctionne, tu es vraiment trop fort!!

J'ai du modofier un peu car le format du fichier 'liste de prix' a quelque peu changé.
Regardes dans le dernier zip pour voir la différence.

Finalement cette partie là du programme fonctionne. Je dois encore travailler la partie selection de l'appareil et normalement ça sera pas trop mal. (grâce à toi)

Merci encore.
Julie

For i = 1 To UBound(ListeComp, 1)
Code = Left(ListeComp(i, 2), InStr(1, ListeComp(i, 2), " ") - 1)
'Si on ne trouve pas la référence du composant en colonne A
If Application.WorksheetFunction.CountIf(Wkb.ActiveSheet.Range("A4:A" & DerLigne), Code) = 0 Then
'on change la remarque
Remarque = "Certains composants sont introuvables dans Liste prix composant.xls"
Else
'sinon on calcule le total avec la fonction Recherchev(Vlookup)
Total_Purch = Total_Purch + CLng(ListeComp(i, 1)) * CDbl(Application.WorksheetFunction.VLookup(Code, Wkb.ActiveSheet.Range("A4:B" & DerLigne), 2, False))
Total_Sourcing = Total_Sourcing + CLng(ListeComp(i, 1)) * CDbl(Application.WorksheetFunction.VLookup(Code, Wkb.ActiveSheet.Range("A4:C" & DerLigne), 3, False))
End If
Next i
 

tototiti2008

XLDnaute Barbatruc
Re : Importer des données de fichier excel et les traiter

Bonjour Staple1600,

Merci,

à priori ça tourne à peu près, donc je ne sais pas trop ce qui a changé... attendons plutôt un retour de Julie sur des difficultés à adapter mon exemple, je saurais sans doute mieux sur quel fichier(s) travailler...

Merci de ton aide ;)
 

julie169

XLDnaute Nouveau
Re : Importer des données de fichier excel et les traiter

Salut à tous,

Tototiti,
En fait le fichier liste de prix est différent, et je dois maintenant calculer deux prix (total_Purch et total_Sourcing). Mais j'ai réussi à adapter ton exemple et maintenant ça tourne!

Merci.

Julie
 

julie169

XLDnaute Nouveau
Re : Importer des données de fichier excel et les traiter

Salut à tous,

J'ai besoin de quelques éclairsissements concernant une ligne de code contenue dans le fichier de Tototiti fonction sub rechercheprix .
Voilà le code en question:

Set Wkb = Workbooks.Open(AdrFic)
DerLigne = Wkb.ActiveSheet.Range("C65536").End(xlUp).Row
ListeComp = Wkb.ActiveSheet.Range("B2:C" & DerLigne).Value
Wkb.Close False

Déjà j'ai pas trop compris le rôle de DerLigne et surtout ce qu'il renvoi (un Long apparement)
et aussi j'ai modifié le code comme ça:

DerLigne = Wkb.ActiveSheet("Nomenclature").Range("A65536").End(xlUp).Row
ListeComp = WApplication.WorksheetFunction.VLookup(UFApp.ComboBox1.Text, Wkb.ActiveSheet.Range("D2:J" & DerLigne), 11, False)


ça bug pour DerLigne, "Variable objet ou variable de bloc With non définie"

Une explication scientifique ou bien je suis vraiment une débutante?

Merci
 

tototiti2008

XLDnaute Barbatruc
Re : Importer des données de fichier excel et les traiter

Re,

Explication :

Set Wkb = Workbooks.Open(AdrFic)
DerLigne = Wkb.ActiveSheet.Range("C65536").End(xlUp).Row
ListeComp = Wkb.ActiveSheet.Range("B2:C" & DerLigne).Value
Wkb.Close False

Signifie :
Wkb est le fichier que l'on ouvre (spécifié par son adresse AdrFic)

Derligne est le numéro de la dernière ligne remplie de la colonne C de la feuille active de ce fichier (je suis parti du principe qu'il n'y avait qu'une feuille)

ListeComp est une variable qui stocke toutes les valeurs (sous forme de tableau) de toutes les cellules de B2 à C & Derligne

Wkb.Close False
signifie on ferme le classeur sans l'enregistrer


pour ton code modifié :

DerLigne = Wkb.ActiveSheet("Nomenclature").Range("A65536").End(xlUp).Row
ListeComp = WApplication.WorksheetFunction.VLookup(UFApp.Combo Box1.Text, Wkb.ActiveSheet.Range("D2:J" & DerLigne), 11, False)

Le W en rouge est en trop

Si tes classeurs Appareil contiennent maintenant plusieurs feuilles, tu dois les appeler comme ça (ici tu auras la dernière ligne remplie de la colonne A):

DerLigne = Wkb.Worksheets("Nomenclature").Range("A65536").End(xlUp).Row

pour être franc, je ne comprend pas trop ce que tu veux faire avec :

ListeComp = Application.WorksheetFunction.VLookup(UFApp.Combo Box1.Text, Wkb.ActiveSheet.Range("D2:J" & DerLigne), 11, False)
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
315 087
Messages
2 116 083
Membres
112 654
dernier inscrit
SADIKA