Import données selon semaines et sur différents fichiers excels

Bonjours à tous !

Je cherche à récupérer les données d'un excel depuis un autre excel. Depuis un fichier "hebdo" je veux que selon la semaine que je rentre "S01, S02.." il aille me chercher une donnée (Semaines réparties sur ligne et données en colonne) qu'il me la copie, et qu'il me la colle dans mon fichier source "Excel_Bilan" selon la semaine en question ( Dans celui-ci les semaines sont sur une colonne).

J'ai réalisé cet macro ( je suis un gros débutant semaine dernière je ne savais pas encore que les macros existaient) donc c'est sûrement bourré de fautes..

Je vous partage les fichier excel en question cf pièce jointe. Et dernière chose, le fichier source se trouve dans un dossier différent du dossier contenant le fichier "hebdo".

9hebdo.xlsx (8.21 Ko)
Public Sub Traitement_Données_fonderie()

Dim Semaine As String, Excel_Bilan As String, Semaine As String, Semaine1 As String

'String chaine de carractère'

Application.ScreenUpdating = False
Application.DisplayAlerts = False

Chemin = "C:\Users\Asus200\Documents\macro test\X\hebdo.xls"

Semaine1 = InputBox("Numéro de la semaine ?")
Semaine = "S" & Semaine1

Dim n As Long
n = 2
While Cells(n, 3) <> Semaine         
    n = n + 1
    If n > 50000 Then

       MsgBox ("Une erreur est survenue")
        Exit Sub
    End If
Wend                    

Variateur1 = Range(4, n).Value

Excel_Bilan = ActiveWorkbook.Name
Workbooks(Excel_Bilan).Activate

Range("Q" & n).Value = Variateur1

End Sub

Bonjour,

Et bien félicitations ! C'est fort d'en connaître autant en une semaine !

Voici un essai pour votre code, si j'ai bien compris. On cherche en colonne 3 la position de correspondance (n). On renvoie la valeur associée en colonne 4 (comme un recherchev - à noter que la plupart des fonctions de feuille existe sur VBA) dans la variable variateur. On ouvre le fichier bilan d'après le chemin en début de code.

On attribue à la colonne Q en ligne n la valeur de variateur puis on ferme le fichier bilan.

Public Sub Traitement_Données_fonderie()

Dim Semaine As String, Excel_Bilan As String, Semaine As String, Semaine1 As String
Dim n As Long

Chemin = "C:\Users\Asus200\Documents\macro test\X\hebdo.xls" 'chemin bilan ?
Semaine1 = InputBox("Numéro de la semaine ?") 'input
Semaine = "S" & format(Semaine1, "00") 'semaine à chercher dans col 3 (format "00")

with sheets("nomfeuille") '<<< adapter nom feuille
    if application.countif(.columns(3), Semaine) > 0 then 'si existe dans col 3
        n = application.match(Semaine, .columns(3), 0) 'position 1ere corresp
        Variateur1 = .cells(n, 4).Value 'valeur en col 4
end with

set wbbilan = workbooks.open(Chemin) 'ouverture bilan

with wbbilan 'avec bilan
    .activesheet.Range("Q" & n).Value = Variateur1 'adapter activesheet !!!, Qn = variateur
    .close true 'ferme et sauve
end with

End Sub

Il faudra au moins adapter le nom de la feuille du fichier source et si possible celui de la feuille à modifier dans le fichier bilan.

Cdlt,

Salut 3GB,

Je ne suis pas certains de comprendre ta macro.. dans le doute je te réexplique ce que je souhaite :

J'ouvre mon fichier bilan, je renseigne la semaine X. La macro ouvre le fichier hebdo, cherche la colonne associée à SX et copie la valeur 1 :

S1 S2 S3

A 1 3

B

C

Ensuite il retourne dans mon fichier bilan, et colle dans la semaine correspondante :

A B C

S1 1

S2

S3

En fait, je ne comprends pas du tout ceci :

if application.countif(.columns(3), Semaine) > 0 then 'si existe dans col 3
        n = application.match(Semaine, .columns(3), 0) 'position 1ere corresp
        Variateur1 = .cells(n, 4).Value 'valeur en col 4

Peux tu me le réexpliquer ? Je te remercie !

Bonjour,

Oui, dans le code, le fichier bilan est le fichier hebdo. Mais en fait ça n'a pas d'importance puisque le code s'exécute (si je comprends bien) à partir du fichier bilan.

Je rebondis sur le cas des semaines. Sur tonpremier message, tu indiquais "S01", "S02". Donc, j'ai mis une ligne qui transforme toute saisie au format "S00".

Semaine = "S" & format(Semaine1, "00") 'semaine à chercher dans col 3 (format "00")

with sheets("nomfeuille") '<<< adapter nom feuille
    if application.countif(.columns(3), Semaine) > 0 then 'si existe dans col 3
        n = application.match(Semaine, .columns(3), 0) 'position 1ere corresp
        Variateur1 = .cells(n, 4).Value 'valeur en col 4
    else
        msgbox "semaine introuvable": exit sub
    end if
end with

Cette partie de code (dans lequel il manquait un END IF ) et que je modifie ainsi, va :

- tester l'existence de la Semaine ("S0X") dans la colonne 3 de la feuille "nomfeuille" >>> ligne if countif (équivalent de NB.SI),
- en cas de condition vérifiée (donc d'existence de cette semaine), affecter à la variable n la première position de correspondance de Semaine dans la colonne 3 de "nomfeuille" grâce à match (équivalent de EQUIV). C'est pour éviter une erreur dans la suite du code que j'ai mis la condition avec le countif.
- affecter à la variable Variateur1 la valeur de la cellule en colonne D de "nomfeuille" à la ligne n (ligne de correspondance) comme avec un RECHERCHEV.

- en cas d'absence de Semaine dans la colonne 3, renvoyer un message et une sortie anticipée de la procédure (rajoutée à l'instant).

Ensuite :

set wbbilan = workbooks.open(Chemin) 'ouverture bilan

with wbbilan 'avec bilan
    .activesheet.Range("Q" & n).Value = Variateur1 'adapter activesheet !!!, Qn = variateur
    .close true 'ferme et sauve
end with

- on ouvre le fichier hebdo,
- on attribue à la cellule à la ligne n (point central ici) de la colonne Q de la feuille active du fichier hebdo la valeur de notre variable Variateur (Dn de nomfeuille de bilan). C'est ce point où il y a peut-être une mauvaise interprétation de ma part car on reporte sur la même ligne, alors que ce n'est pas le même fichier, variateur1.
- puis on ferme en sauvegardant le fichier hebdo.

Le code à jour des petites modifs :

Public Sub Traitement_Données_fonderie()

Dim Semaine As String, Excel_Bilan As String, Semaine As String, Semaine1 As String
Dim n As Long

Chemin = "C:\Users\Asus200\Documents\macro test\X\hebdo.xls" 'chemin bilan ?
Semaine1 = InputBox("Numéro de la semaine ?") 'input
Semaine = "S" & format(Semaine1, "00") 'semaine à chercher dans col 3 (format "00")

with sheets("nomfeuille") '<<< adapter nom feuille
    if application.countif(.columns(3), Semaine) > 0 then 'si existe dans col 3
        n = application.match(Semaine, .columns(3), 0) 'position 1ere corresp
        Variateur1 = .cells(n, 4).Value 'valeur en col 4
    else
        msgbox "semaine introuvable": exit sub
    end if
end with

set wbhebdo = workbooks.open(Chemin) 'ouverture bilan

with wbhebdo 'avec bilan
    .activesheet.Range("Q" & n).Value = Variateur1 'adapter activesheet !!!, Qn = variateur
    .close true 'ferme et sauve
end with

End Sub

Est-ce que ça vous semble correct ? Il faut bien entendu adapter, au moins le nom de la feuille "nomfeuille".

Cdlt,

Je suis désolé, mais la macro ne fonctionne pas sur mes fichiers, et je ne comprends pas tes explications..

Bonjour,

Oui, dans le code, le fichier bilan est le fichier hebdo. Mais en fait ça n'a pas d'importance puisque le code s'exécute (si je comprends bien) à partir du fichier bilan.

En effet, je code s'effectue depuis le fichier bilan, mais pourquoi dans le code le fichier bilan est le fichier hebdo ? ce sont deux fichiers différents

Je rebondis sur le cas des semaines. Sur tonpremier message, tu indiquais "S01", "S02". Donc, j'ai mis une ligne qui transforme toute saisie au format "S00".

Semaine = "S" & format(Semaine1, "00") 'semaine à chercher dans col 3 (format "00")

with sheets("nomfeuille") '<<< adapter nom feuille
    if application.countif(.columns(3), Semaine) > 0 then 'si existe dans col 3
        n = application.match(Semaine, .columns(3), 0) 'position 1ere corresp
        Variateur1 = .cells(n, 4).Value 'valeur en col 4
    else
        msgbox "semaine introuvable": exit sub
    end if
end with

Cette partie de code (dans lequel il manquait un END IF ) et que je modifie ainsi, va :

- tester l'existence de la Semaine ("S0X") dans la colonne 3 de la feuille "nomfeuille" >>> ligne if countif (équivalent de NB.SI), Donc la nous sommes bien sur le fichier hebdo ?
- en cas de condition vérifiée (donc d'existence de cette semaine), affecter à la variable n la première position de correspondance de Semaine dans la colonne 3 de "nomfeuille" grâce à match (équivalent de EQUIV). C'est pour éviter une erreur dans la suite du code que j'ai mis la condition avec le countif.

Donc la si condition vérifiée, la variable n se POSITIONNE sur la première cellule sous la cellule SXX ? Ok, comment je fais si je veux qu'elle prenne la 2ème, ou 3ème cellule ?

- affecter à la variable Variateur1 la valeur de la cellule en colonne D de "nomfeuille" à la ligne n (ligne de correspondance) comme avec un RECHERCHEV.

La je ne comprends plus rien.. nous sommes toujours dans le fichier hebdo ? Pourquoi les semaines sont en ligne ....? qu'est ce que la colonne D...?

- en cas d'absence de Semaine dans la colonne 3, renvoyer un message et une sortie anticipée de la procédure (rajoutée à l'instant).

Si absence de semaine dans la colonne 3, il faut que la macro aille voir en colonne 4..?

Ensuite :

set wbbilan = workbooks.open(Chemin) 'ouverture bilan

with wbbilan 'avec bilan
    .activesheet.Range("Q" & n).Value = Variateur1 'adapter activesheet !!!, Qn = variateur
    .close true 'ferme et sauve
end with

- on ouvre le fichier hebdo, la non plus je ne comprends pas... on ouvre le fichier bilan à l'aide du (chemin) pourtant le chemin est celui du fichier hebdo
- on attribue à la cellule à la ligne n (point central ici) de la colonne Q de la feuille active du fichier hebdo la valeur de notre variable Variateur (Dn de nomfeuille de bilan). C'est ce point où il y a peut-être une mauvaise interprétation de ma part car on reporte sur la même ligne, alors que ce n'est pas le même fichier, variateur1.
- puis on ferme en sauvegardant le fichier hebdo.

Est ce qu'on s'est bien compris, quand je dis que je veux que depuis mon fichier bilan je rentre le numéro de semaine, la macro va dans le fichier hebdo dans lequel les semaines sont sur une même ligne et donc sur des colonnes différentes, prends la valeur de la semaine correspondante et de la ligne X, et la colle dans mon fichier bilan qui est ouvert, sur la colonne Y de ma ligne semaine ?

Si oui alors je n'arrive vraiment pas à comprendre la macro pour les raisons citées plus haut..

Rechercher des sujets similaires à "import donnees semaines differents fichiers excels"