C'est ce que j'étais en train de regarder... et effectivement depuis word çà marche nickel.
Alors deux solutions => soit çà vient de access en lui même, soit çà vient du traitement que je fais au milieu
EDIT : je confirme c'est bien le traitement que je fais au milieu qui fait tout merder ^^
je met mon code si jamais quelqu'un voit ce qui peut gêner... Merci encore
Sub import_PDP_metrics()
photo_prevision_mois ("ARRIEL" )
End Sub
'ATTENTION!!!!!!!!!!!!!!!
'
'Action à affectuer la première semaine de chaque mois
Function photo_prevision_mois(nom_moteur As Variant)
Dim fichier1 As Variant
Dim rst As ADODB.recordset
Dim date_courante As Variant
Dim chSQL As String
Dim i As Variant
Dim j As Variant
Dim k As Variant
Dim mois_en_cours As Variant
Dim année_en_cours As Variant
Dim semaine_en_cours As Variant
Dim colonne_en_cours As Variant
Dim nbr_semaine As Variant
Dim plan_prod As Variant
Dim date_ref As Variant
Dim Xl As Excel.Application
Dim Classeur As Excel.Workbook
Dim connect As ADODB.connection
Dim pdp_int As Variant
Dim pdp_ext As Variant
Dim dem_com As Variant
Dim mois_pdp As Date
'on ouvre la connection
Set connect = CurrentProject.connection
'on crée le recorset
Set rst = New ADODB.recordset
'requête pour récupérer les données de la date courante
chSQL = "select * from date_courante"
'on récupère les données de la date courante avec le resultset
rst.Open chSQL, connect
'on accède au premier élément qui correspond à la valeur de nos données
rst.MoveFirst
'on donne les valeurs voulues dans le résultat de notre requête
mois_en_cours = rst.Fields("mois" ).Value
année_en_cours = rst.Fields("année" ).Value
semaine_en_cours = rst.Fields("semaine" ).Value
colonne_en_cours = rst.Fields("colonne_en_cours" ).Value
rst.Close
'on crée mois_pdp à partir des données de date_courante
mois_pdp = "01/" & mois_en_cours & "/" & année_en_cours
'on ouvre le fichier excel
Set Xl = New Excel.Application
Xl.Visible = True
Set Classeur = Xl.Workbooks.Open("mon_fichier".xls" )
'on test les cas où il y a différentes feuilles sur le même fichier PDP excel
If nom_moteur = "ARRIEL" Then
'si la famille en cours de traitement est arriel, on traite d'abord la feuille arriel1 puis la feuille arriel 2
'on sélectionne la feuille du fichier qui corresponated à arriel 1
Classeur.Worksheets("PDP ARRIEL1" ).Activate
'on récupère le mois en cours sous forme '01/08/2008' dans le PDP
date_ref = année_en_cours & "/" & semaine_en_cours
'on initialise i à la valeur de la colonne_en_cours qui doit être la colonne de la première semaine du mois en cours
i = colonne_en_cours
'on initialise j à 0
j = 0
'on traite variante après variante jusqu'à ce qu'il n'y en ait plus
While Cells(5 + j, 1) <> "Fin de détail"
'on fait une boucle qui récupère puis insère dans l'infocentre les valeurs des pdp internes et externes pour
'chaque semaine du mois qui débute
While Cells(2, i) = "" Or Cells(2, i) = mois_pdp
'on crée le recorset
Set rst = New ADODB.recordset
'on test si la valeur du PDP interne puis externe dans le pdp excel est vide
'si elle est vide on met la valeur du PDP interne ou externe (selon les cas) à 0
'sinon on met la valeur récupérée dans le pdp
If Cells(9 + j, i) = "" Then
pdp_int = 0
Else
pdp_int = Cells(9 + j, i)
End If
If Cells(10 + j, i) = "" Then
pdp_ext = 0
Else
pdp_ext = Cells(10 + j, i)
End If
'on test si la valeur de la demande commerciale dans le pdp excel n'est pas vide
'si c'est le cas on met dem_com à 0 sinon on met la valeur du pdp
If Cells(6 + j, i) = "" Then
dem_com = 0
Else
dem_com = Cells(6 + j, i)
End If
'requête pour insérer le PDP prévu pour la semaine en cours de traitement du mois en cours
chSQL = "insert into Infocentre_Moteurs_mois_en_cours_prévu (reference, designation, version_fab, famille, code_gest, date_dem_arbitrée, demande_arbitrée, date_ref, qte, semaine, date_indicateur, valeur_Meuro, statut) values ('" & Cells(5 + j, 1) & "', '" & Cells(5 + j, 2) & "', 'interne', 'ARRIEL 1', '" & Cells(2, 1) & "', #" & Cells(2, 2) & "#, " & dem_com & ", '" & date_ref & "', " & pdp_int & ", '" & Cells(3, i) & "', #" & Cells(3, 2) & "#, '0', 'prévu')"
'on récupère les données de la date courante avec le resultset
connect.Execute chSQL
'requête pour insérer le PDP prévu pour la semaine en cours de traitement du mois en cours
chSQL = "insert into Infocentre_Moteurs_mois_en_cours_prévu (reference, designation, version_fab, famille, code_gest, date_dem_arbitrée, demande_arbitrée, date_ref, qte, semaine, date_indicateur, valeur_Meuro, statut) values ('" & Cells(5 + j, 1) & "', '" & Cells(5 + j, 2) & "', 'externe', 'ARRIEL 1', '" & Cells(2, 1) & "', #" & Cells(2, 2) & "#, " & dem_com & ", '" & date_ref & "', " & pdp_ext & ", '" & Cells(3, i) & "', #" & Cells(3, 2) & "#, '0', 'prévu')"
'on récupère les données de la date courante avec le resultset
connect.Execute chSQL
'rst.Close
'on incrémente ensuite i de 1
i = i + 1
Wend
i = colonne_en_cours
'on passe à la variante suivante
j = j + 13
Wend
'on sélectionne la feuille du fichier qui correspond à arriel 2
Classeur.Worksheets("PDP ARRIEL2" ).Activate
'on récupère le mois en cours sous forme '01/08/2008' dans le PDP
date_ref = année_en_cours & "/" & semaine_en_cours
'on initialise i à la valeur de la colonne_en_cours qui doit être la colonne de la première semaine du mois en cours
i = colonne_en_cours
'on initialise j à 0
j = 0
'on traite variante après variante jusqu'à ce qu'il n'y en ait plus
While Cells(5 + j, 1) <> "Fin de détail"
'on fait une boucle qui récupère puis insère dans l'infocentre les valeurs des pdp internes et externes pour
'chaque semaine du mois qui débute
While Cells(2, i) = "" Or Cells(2, i) = mois_pdp
'on crée le recorset
Set rst = New ADODB.recordset
'on test si la valeur du PDP interne puis externe dans le pdp excel est vide
'si elle est vide on met la valeur du PDP interne ou externe (selon les cas) à 0
'sinon on met la valeur récupérée dans le pdp
If Cells(9 + j, i) = "" Then
pdp_int = 0
Else
pdp_int = Cells(9 + j, i)
End If
If Cells(10 + j, i) = "" Then
pdp_ext = 0
Else
pdp_ext = Cells(10 + j, i)
End If
'on test si la valeur de la demande commerciale dans le pdp excel n'est pas vide
'si c'est le cas on met dem_com à 0 sinon on met la valeur du pdp
If Cells(6 + j, i) = "" Then
dem_com = 0
Else
dem_com = Cells(6 + j, i)
End If
'requête pour insérer le PDP prévu pour la semaine en cours de traitement du mois en cours
chSQL = "insert into Infocentre_Moteurs_mois_en_cours_prévu (reference, designation, version_fab, famille, code_gest, date_dem_arbitrée, demande_arbitrée, date_ref, qte, semaine, date_indicateur, valeur_Meuro, statut) values ('" & Cells(5 + j, 1) & "', '" & Cells(5 + j, 2) & "', 'interne', 'ARRIEL 2', '" & Cells(2, 1) & "', #" & Cells(2, 2) & "#, " & dem_com & ", '" & date_ref & "', " & pdp_int & ", '" & Cells(3, i) & "', #" & Cells(3, 2) & "#, '0', 'prévu')"
'on récupère les données de la date courante avec le resultset
connect.Execute chSQL
'requête pour insérer le PDP prévu pour la semaine en cours de traitement du mois en cours
chSQL = "insert into Infocentre_Moteurs_mois_en_cours_prévu (reference, designation, version_fab, famille, code_gest, date_dem_arbitrée, demande_arbitrée, date_ref, qte, semaine, date_indicateur, valeur_Meuro, statut) values ('" & Cells(5 + j, 1) & "', '" & Cells(5 + j, 2) & "', 'externe', 'ARRIEL 2', '" & Cells(2, 1) & "', #" & Cells(2, 2) & "#, " & dem_com & ", '" & date_ref & "', " & pdp_ext & ", '" & Cells(3, i) & "', #" & Cells(3, 2) & "#, '0', 'prévu')"
'on récupère les données de la date courante avec le resultset
connect.Execute chSQL
'rst.Close
'on incrémente ensuite i de 1
i = i + 1
Wend
i = colonne_en_cours
'on passe à la variante suivante
j = j + 13
Wend
ElseIf nom_moteur = "toto" Then
'même traitement qu'au dessus mais pour toto
ElseIf .......etc
Else
'sinon on traite normalement
End If
'on ferme la connection
connect.Close
Set connect = Nothing
'on ferme notre fichier excel
Classeur.Close SaveChanges:=False
Xl.Quit
Set Classeur = Nothing
Set Xl = Nothing
End Function
Message édité par wasa131313 le 07-08-2008 à 15:27:08