IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Ouvertures et Fermetures de Fichiers


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club Avatar de Polygos
    Homme Profil pro
    Ma petite entreprise
    Inscrit en
    Avril 2016
    Messages
    190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ma petite entreprise
    Secteur : Distribution

    Informations forums :
    Inscription : Avril 2016
    Messages : 190
    Points : 52
    Points
    52
    Par défaut Ouvertures et Fermetures de Fichiers
    Bonsoir
    j'ai un code un peu long qui remplit deux fichiers wb2 et wb3 à partir d'un fichier wb1 qui est une base de données d'articles.
    On lit ligne à ligne le wb1, article par article et Selon certaines conditions, on renseigne soit pour l'article le fichier wb2, soit le wb3
    La différence vient des informations que l'on prend de wb1, différentes selon que l'on les mets ds wb2 et wb3.

    À la fin, on copie wb2 pour lui donner un nom et pareil avec wb3.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
        Dim wb1 As Workbook 'FICHIER SOURCE: BDD
        Dim wb2 As Workbook 'FICHIER CIBLE:CREATION COMPLETE DE L'ARTICLE
        Dim wb3 As Workbook 'CIBLE: MAJ PQ SEULEMENT (qques données seulement)
        Dim ws1 As Worksheet
        Dim ws11 As Worksheet
        Dim ws2 As Worksheet
        Dim ws3 As Worksheet
     
    ' SOURCE
        Set wb1 = ThisWorkbook '("BDD")
        Set ws1 = wb1.Worksheets("Données produits")
     
    'On charge les modèles qui vont servir au remplissage
    'CIBLE POUR CREATION COMPLETE
        Set wb2 = Workbooks.Open("\\Station-serveur\Modèles\Fichiers pour mise à jour\Fichier de création.xlsm")
        Set ws2 = wb2.Worksheets("Modèle")
     
    'CIBLE POUR MAJ LIMITEE
        Set wb3 = Workbooks.Open("\\Station-serveur\Modèles\Fichiers pour mise à jour\MAJ réduite.xlsm")
        Set ws3 = wb3.Worksheets("Price Template")
     
    'REMPLISSAGE CONDITIONNEL DES DEUX FICHIERS CIBLES
    .
    ...de wb1 à wb2 et wb3 alternativment donc...
    .
    .
    .
    'SAUVEGARDES
     
    'DU FICHIER DE CREATION
        wb2.Activate
        Worksheets("Modèle").Copy
        Activeworkbook.save as "\\Station-serveur\Fichiers pour mise à jour\Fichier de création renseigné.xlsx")
    ' Je veux refermer le modèle sans le contenu, vierge donc
      ActiveWorkbook.Close Savechanges:=False
     
    'DU FICHIER DE MISE A JOUR LIMITEE
        ws3.Activate
        Worksheets("Price Template").Copy 
        ActiveWorkbook.SaveAs "\\Station-serveur\Fichiers pour mise à jour\Fichier PQ renseigné.xlsx")
    ' Fermeture du fichier modèle, vierge également.
        ActiveWorkbook.Close Savechanges:=False
    Et bien, ça ne fonctionne pas.
    Je devrais avoir fermé les deux modèles et enregistré les deux fichiers renseignés pourtant.

    Je ne veux pas vous saouler avec les détails du code, aussi j'ai résumé la structure ainsi: les deux modèles WB2 ET WB3 sont donc ouverts consécutivement, mais je n'arrive pas à les fermer après copy/renommage d'une version de leur sauvegarde renseignée dont c'était le but.

    J'obtiens une erreur de compilation:

    un classeur nouveau se créé tout seul au fur et à mesure de mes tentatives (j'en suis à classeur 9) bien que je les sauvegarde pas, qui s'appelle VBAProject (classeur9) donc, rempli de private sub que je n'ai pas crées et se bloque sur une fonction non définie totalement inconnue de moi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Worksheet_activate
    templateworksheetgotactivated
    End Sub
    Je ne vois pas d'ou il vient et bien sur mes deux fichiers ne sont pas sauvegardés...
    Au final, il me reste ouvert les deux fichiers modèles, renseignés:
    wb3 non renommé
    wb2 renommé
    et ce classeur 9 qui est une copie remplie de wb3, mai snon renommée

    VoiLa le contenu des codes de ce classeur 9 qui s'est créé tout seul:
    qui a créé la feuille shtemplate1(Price Template) qui est bien le nom de la feuille de wb3, soit ws3.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    Option Explicit
     
     
    Public lastcolorIndex As Integer
    Public ProductIDColumnNumber As Integer
     
     
    Private Sub cboOfferCreation_Click()
        'Odd behavior. Use MouseUp to determine when to run Click.
        DropdownGotClicked cboOfferCreation
    End Sub
     
    Private Sub cboOfferCreation_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
        'dismiss dropdown if user double-clicks:
        DropdownGotDoubleClicked cboOfferCreation
    End Sub
     
    Private Sub cboOfferCreation_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal x As Single, ByVal y As Single)
        'if user holds mouse down, assume they want to select a range, so dismiss the dropdown:
        DropdownGotMouseDowned cboOfferCreation
    End Sub
     
    Private Sub cboOfferCreation_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal x As Single, ByVal y As Single)
        'Fires before dropdown's value is set to the clicked list item. Use to determine when to run Click Event.
        DropdownGotMouseUpped cboOfferCreation
    End Sub
     
     
    Private Sub cboOfferCreation_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
        DropdownGotKeyDowned cboOfferCreation, CInt(KeyCode), Shift
    End Sub
     
     
    Private Sub Worksheet_Activate()
        TemplateWorksheetGotActivated
    End Sub
     
     
    Private Sub Worksheet_Change(ByVal Target As Range)
        TemplateWorksheetGotChanged Target
    End Sub
     
     
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
        TemplateWorksheetGotSelectionChanged Target
    End Sub
    Une piste ?
    La méthode ne doit pas être bonne.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Polygos Voir le message

    Bonjour,

    Vos modèles ne sont pas de véritables modèles. Ceux-ci devraient être de la forme .xltx (s'ils ne contiennent pas de macros), et vous feriez une création à partir d'eux au lieu d'une ouverture.
    Si vos modèles contiennent des macros, il faudra simplement définir le format de sauvegarde dans chacun des SaveAs.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
            'CIBLE POUR CREATION COMPLETE
            Set wb2 = Workbooks.Add(Template:="\\Station-serveur\Modèles\Fichiers pour mise à jour\Fichier de création.xltx")
            wb2.SaveAs Filename:="\\Station-serveur\Fichiers pour mise à jour\Fichier de création renseigné.xlsx"
     
            'CIBLE POUR MAJ LIMITEE
            Set wb3 = Workbooks.Add(Template:="\\Station-serveur\Modèles\Fichiers pour mise à jour\MAJ réduite.xltx")
            wb3.SaveAs Filename:="\\Station-serveur\Fichiers pour mise à jour\Fichier PQ renseigné.xlsx"
    Nb : Avec 161 messages au compteur, vous devriez savoir que votre code doit être placé en balises #.

  3. #3
    Membre du Club Avatar de Polygos
    Homme Profil pro
    Ma petite entreprise
    Inscrit en
    Avril 2016
    Messages
    190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ma petite entreprise
    Secteur : Distribution

    Informations forums :
    Inscription : Avril 2016
    Messages : 190
    Points : 52
    Points
    52
    Par défaut
    Bonjour,
    c'est juste mais j'oublie un peu tout en ce momet et vu l'heure...
    Pour le fond, j'ai toujours opéré comme ça et ça fonctionne bien sur d'autres programmes avec le format xlsm qui est le format natif de ce fichier de stock; les fichiers à importer sont des fichiers d'Amazon, fournis par eux en xlsm.

    Ce qui est étrange c'est que j'ai un autre code, construit de la même manière et qui ne me génère pas ces fichiers parasites dont je ne trouve pas l'origine.

    Je ne connais pas l'usage du xlt; j'appelle modèle mon modèle donné par la plateforme telle qu'elle, un xlsm, sans doute il doit être ainsi.
    Et ce qui m'étonne c'est que je fais rigoureusement de la même manière avec un code qui fonctionne bien, lui.
    Pourquoi je ne peux pas remplir bêtement le fichier vide qu'ils me donnent (et que j'appelle modèle), tel quel, et en enregistre une copie que je renomme puis ferme le "modèle" ?
    C'est ça que je veux faire.

    Pourquoi se créé automartiquement ce classeur 1, 2, 3, etc à chaque tentative et qui contient ces codes dans la feuille(joint)

    Je crains qu'il n'y ait un mic mac sur les ouvertures/fermetures/sauvegardes
    Fichiers attachés Fichiers attachés

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Polygos Voir le message
    OK,

    Essayez :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
     
    Sub Test2()
     
    Dim wb1 As Workbook 'FICHIER SOURCE: BDD
    Dim wb2 As Workbook 'FICHIER CIBLE:CREATION COMPLETE DE L'ARTICLE
    Dim wb3 As Workbook 'CIBLE: MAJ PQ SEULEMENT (qques données seulement)
    Dim ws1 As Worksheet
    Dim ws11 As Worksheet
    Dim ws2 As Worksheet
    Dim ws3 As Worksheet
     
            ' SOURCE
            Set wb1 = ThisWorkbook '("BDD")
            Set ws1 = wb1.Worksheets("Données produits")
     
            'On charge les modèles qui vont servir au remplissage
            'CIBLE POUR CREATION COMPLETE
            Set wb2 = Workbooks.Open("\\Station-serveur\Modèles\Fichiers pour mise à jour\Fichier de création.xlsm")
            Set ws2 = wb2.Worksheets("Modèle")
     
            'CIBLE POUR MAJ LIMITEE
            Set wb3 = Workbooks.Open("\\Station-serveur\Modèles\Fichiers pour mise à jour\MAJ réduite.xlsm")
            Set ws3 = wb3.Worksheets("Price Template")
     
            'REMPLISSAGE CONDITIONNEL DES DEUX FICHIERS CIBLES
            '.
            '...de wb1 à wb2 et wb3 alternativment donc...
            '.
            '.
            '.
            'SAUVEGARDES
     
            'DU FICHIER DE CREATION
           ' Worksheets("Modèle").Copy
            With wb2
                 .SaveCopyAs "\\Station-serveur\Fichiers pour mise à jour\Fichier de création renseigné.xlsm"
                 DoEvents
                 ' Je veux refermer le modèle sans le contenu, vierge donc
                 .Close Savechanges:=False
            End With
     
            'DU FICHIER DE MISE A JOUR LIMITEE
            ws3.Copy
            With ActiveWorkbook
                .SaveAs Filename:="\\Station-serveur\Fichiers pour mise à jour\Fichier PQ renseigné.xlsx", FileFormat:=xlOpenXMLWorkbook
                ' Fermeture du fichier modèle, vierge également.
                .Close Savechanges:=False
            End With
     
     
    End Sub

  5. #5
    Membre du Club Avatar de Polygos
    Homme Profil pro
    Ma petite entreprise
    Inscrit en
    Avril 2016
    Messages
    190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ma petite entreprise
    Secteur : Distribution

    Informations forums :
    Inscription : Avril 2016
    Messages : 190
    Points : 52
    Points
    52
    Par défaut
    Merci de votre aide.
    Je me retrouve toujours avec la création d'un fichier étranger...qui s'incrémente...on est au classeur 10.
    Sur mon essai de deux lignes consécutives,
    - les deux fichiers "modèle" s'ouvrent
    - ils se remplissent
    Le plus complet s'est créé et refermé, il est corrrect
    Le réduit (PQ) est doublonné, créé sous son vrai nom et sous le nom de ce ficher supplémentaire claésseur 3, 4, etc.. après chaque essai, dont je ne sais pas d'où il vient et plante là:
    => sous son nom de modèle, sans être renommé donc, et n'est pas sauvegardé
    => sous ce nom de classeur "suivant", 3, 4, etc.
    La, le progarmme se bloque:
    - l'erreur de compilation s'affiche: Sub ou Function non définie: dans Private Sub worksheet_Activate:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Worksheet_Activate()
    TemplateWorksheetGotActivated
    End Sub
    Sub ou function non définie
    Au final, le complet est créé et sauvegardé, le modèle vidé. et à sa place
    Le réduit (PQ) est fermé, non vidé et sa copie ws3 n'est sauvegardée nulle part.

    Instructions appliquées:
    Pour le complet, ws2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    ws2.activate
    'diverses mises en forme, puis
        .SaveCopyAs "\\Station-serveur\maison delahaye\PARTENAIRES MD\INTERNET\MARKET PLACE\AMAZON\Fichier Exportés AMZ\Fichiers chargés\FR\FFFBN-FrC-" & name & "-" & Format(Now(), "mmdd-hhmm") & ".xlsm"
        DoEvents
        ' Je veux refermer le modèle sans le contenu, vierge donc
        .Close Savechanges:=False
    End With
    Pour le réduit, ws3
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    ws3.activate
    'diverses mises en forme, puis
    ws3.Copy
          With ActiveWorkbook
              .SaveAs Filename:="\\Station-serveur\maison delahaye\PARTENAIRES MD\INTERNET\MARKET PLACE\AMAZON\Fichier Exportés AMZ\Fichiers chargés\FR\PQ\FFPI-Fr-PQ-" & name & "-" & Format(Now(), "mmdd-hhmm") & ".xlsx", FileFormat:=xlOpenXMLWorkbook
              ' Fermeture du fichier modèle, vierge également.
              .Close Savechanges:=False
          End With

  6. #6
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Polygos Voir le message
    OK pour le code, mais pourquoi pas dans un message à la suite de cette discussion ? Sinon, si confidentiel OK.

  7. #7
    Membre du Club Avatar de Polygos
    Homme Profil pro
    Ma petite entreprise
    Inscrit en
    Avril 2016
    Messages
    190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ma petite entreprise
    Secteur : Distribution

    Informations forums :
    Inscription : Avril 2016
    Messages : 190
    Points : 52
    Points
    52
    Par défaut
    En effet, c'est le code qui me permet une mise à jour de mes offres pro (catalogue, prix, stock).
    Le contexte est le suivant:
    j'ai deux codes très semblables qui alimentent des fichiers de stock pour des plateformes de vente différentes.
    Le premier créé alimente un site internet, et il fonctionne. Le second que j'ai cherché à dupliquer, même structure, alimente une plateforme de vente en ligne.

    Dans les deux cas, le corps des copies de données de la base de données est bien délimité, mais différent forcément suivant les cibles, ce ne sont pas tout à fait les mêmes offres selon la cible.
    Le princip est simple; on balaie la BDD et pour chaque item, on regarde s'il y a une mise à jour de la cible à faire en fonction du stock, de la dernière date de mise à jour, des interdictions/autorisations de vendre sur tel ou tel site, et bien sûr de la complétude des données pour les différentes cibles (ça ne sert à rien d'envoyer un item sur une cible s'il manque une donnée essentielle).
    En sont ensuite créés deux fichiers:
    - un Nouveau pour les articles nouveaux
    - une mise à jour Px et Qté pour les autres
    D'où les deux enregistrements et sauvegardes en fin de programme, qui fonctionne bien pour le premier pgm mais pas pour le second dont on parle.
    Comme on dit ça doit etre une "connerie" quelque part dans ce deuxième code mais je ne la vois pas.
    Une fois résolu, j'en tirerai une conclusion utile à la communauté.
    Qu'en pensez vous ?
    Comment je procède ?

  8. #8
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Polygos Voir le message
    Le code que tu m'as envoyé n'est pas correct pour la sauvegarde Ws3 en fichier.
    En reprenant ton premier code, il te faut simplement faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    ws3.Copy
          With ActiveWorkbook
              .SaveAs Filename:="\\Station-serveur\maison delahaye\PARTENAIRES MD\INTERNET\MARKET PLACE\AMAZON\Fichier Exportés AMZ\Fichiers chargés\FR\PQ\FFPI-Fr-PQ-" & name & "-" & Format(Now(), "mmdd-hhmm") & ".xlsx", FileFormat:=xlOpenXMLWorkbook
              ' Fermeture du fichier modèle, vierge également.
              .Close Savechanges:=True
          End With
    Wb3.close Savechanges:=False
    Ws3.copy crée un nouveau fichier donc ActiveWorkBook. Il te faut donc le sauvegarder à la fin.

    Normalement, tu ne dois pas avoir de problème sur le Wb2.

  9. #9
    Membre du Club Avatar de Polygos
    Homme Profil pro
    Ma petite entreprise
    Inscrit en
    Avril 2016
    Messages
    190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ma petite entreprise
    Secteur : Distribution

    Informations forums :
    Inscription : Avril 2016
    Messages : 190
    Points : 52
    Points
    52
    Par défaut
    Bonjour Erick
    une grosse journée pleine d'imprévus délicats, excuse moi de mon temps de réaction.
    Finalement je reviens à la formulation précédente mais je n'ai pas trop compris ce qui clochait.
    Donc,
    j'ai bien deux fichiers créés (je me suis placé dans la configuration ou j'éditais un article nouveau (wb2) et un à mettre à jour P,Q en même temps (wb3).
    Mais ce foutu fichier classeur 2, 3, etc..continue à apparaitre et a buguer.
    Aucune idée de savoir de quelle instruction il vient.

    si il se créé sous la forme incrémentée de classeur 1, 2, 3 etc. à chaque essai, comment sait il ou il en est pour s'incrémenter ?
    qui le crée ?

    Quand on fait la copie wb3,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    wb3.copy
    with ActiveWorkbook
    .SaveAs Filename:="\\Station-serveur\maison delahaye\PARTENAIRES MD\INTERNET\MARKET PLACE\AMAZON\Fichier Exportés AMZ\Fichiers chargés\FR\PQ\FFPI-Fr-PQ-" & name & "-" & Format(Now(), "mmdd-hhmm") & ".xlsx", FileFormat:=xlOpenXMLWorkbook
    End with
    A quoi sert fileformat=xlopenXMLWorkbook qu'il n'y avait pas avant ?

    J'observe qu'il voudrait s'enregistrer dans le répertoire ou se trouve la BDD, qd je fais fichier enregistrer sous, ce qui semble logique vu que c'est de là que se lance la macro de la BDD.
    Je note que son contenu est identique au fichier wb3, le nom de l'onglet aussi est identique; il semble donc être une copie de celui que l'on enregistre sous le nom

    Par ailleurs wb2 se créé correctement, reste ouvert, c'est ce que je veux, et prend bien le nom attribué, et se range ou il faut. Donc wb2 c'est ok.
    et il n'en reste pas d'image, comme ça le fait pour wb3.

    Pourquoi ne pas prendre le même process alors ?
    Glisser un doevents pour gagner du temps ?

    J'en perds mon latin, ce qu'il en reste.

    Merci !

    PS: quelle différence entre saveas filename et savecopy as ?


    Le besoin étant le même, pourquoi ne pas prendre la même procédure ?

    Je note un autre indice
    si j'ouvre un classeur ordinaire, je n'ai pas le même contenu que celui qui s'est créé via mon "bug".
    Classeur 3, qui s'est créé et s'incrémente à chaque nouvel essai contoent une feuille qui s'appelle sh Template (price Template), donc une copie de la feuille price template de mon "modèle" wb3/ws3
    C'est cette feuille qui contient tous ces codes, dont je n'ai aucune iodée de l'origine et forcément, qui plante car l'un deux s'exécute sans pouvoir aller plus loin:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Worksheet_Activate()
        TemplateWorksheetGotActivated
    End Sub
    Ça me parait un indice intéressant, d'ou vient ce truc ??

  10. #10
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Polygos Voir le message

    Par ailleurs wb2 se créé correctement, reste ouvert, c'est ce que je veux, et prend bien le nom attribué, et se range ou il faut. Donc wb2 c'est ok.
    et il n'en reste pas d'image, comme ça le fait pour wb3.

    Pourquoi ne pas prendre le même process alors ?
    Glisser un doevents pour gagner du temps ?
    Pour Wb3, le processus ne peut être identique à celui de Wb2, car c'est la copie d'un onglet que tu transformes en classeur.
    Le DoEvents est pour attendre que la sauvegarde soit terminée.

    A quoi sert fileformat=xlopenXMLWorkbook qu'il n'y avait pas avant ?
    Ton fichier d'origine est un .xlsm et tu souhaites un .xlsx.

    Peux-tu me dire si les fichiers finaux sont corrects ?
    Qu'est ce qui ne marche pas sinon ?

  11. #11
    Membre du Club Avatar de Polygos
    Homme Profil pro
    Ma petite entreprise
    Inscrit en
    Avril 2016
    Messages
    190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ma petite entreprise
    Secteur : Distribution

    Informations forums :
    Inscription : Avril 2016
    Messages : 190
    Points : 52
    Points
    52
    Par défaut
    Citation Envoyé par Eric KERGRESSE Voir le message
    Pour Wb3, le processus ne peut être identique à celui de Wb2, car c'est la copie d'un onglet que tu transformes en classeur.
    Le DoEvents est pour attendre que la sauvegarde soit terminée.



    Ton fichier d'origine est un .xlsm et tu souhaites un .xlsx.

    Peux-tu me dire si les fichiers finaux sont corrects ?
    Qu'est ce qui ne marche pas sinon ?
    Oui, les fichiers finaux sont corrects, à part que je n'aurais pas du renommer le wb2 en xlsx, car je m'aperçois qu'Amazon prend les xlsm depui sle début, il y a peut être une raison.
    Le seul foutu problème, c'est que je me retrouve avec ce truc ouvert et qui plante sur cette instruction inexécutable de TemplateWorksheetGotActivated dont je ne comprends pas le sens.

    Je vais retester avec le format d'enregistrement en xlsm

    pourquoi ne pas appliquer le même process au deux finalement, puisque ds les eux cas on ouvre un rempli un fichier "modèle" que l'ion enregistre après ?
    Ca ça marche.

    Mais alors quelle différence entre les deux pour le besoin:
    ouvrir des "modèles"
    les copier une fois remplis
    saugarder ranger ces copies
    fermer les modèles ?
    J'ai loupé qqchose ou c'est bien le bon résultat ?
    Mais j'ai pas compris comment fonctionnait saveAs par rappot à savecopy As..

  12. #12
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Polygos Voir le message
    Dans ton code, est-ce que la neutralisation des événements règle ton problème ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
        Set wb1 = ThisWorkbook
        Set ws1 = wb1.Worksheets("Epicerie")
        Application.EnableEvents = False
    Et à la fin :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
         Application.EnableEvents = True
      End Sub
    On ne voit pas à quel moment tu ouvres et tu fermes Wb1.

  13. #13
    Membre du Club Avatar de Polygos
    Homme Profil pro
    Ma petite entreprise
    Inscrit en
    Avril 2016
    Messages
    190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ma petite entreprise
    Secteur : Distribution

    Informations forums :
    Inscription : Avril 2016
    Messages : 190
    Points : 52
    Points
    52
    Par défaut Ouvrir, copier, sauvegarder, fermer
    En définitive, ce que je retiens pour la gestion des fichiers, et ne pas se mélanger les pinceaux
    wb1 étant le fichier source, ws1 la feuille source et wb2, wb3 ceux qui se remplissent à partir de wb1, dans leurs feuilles feuille ws2, ws3:

    - ouverture,
    > du fichier source
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        Set wb1 = Workbooks.Open("Serveur\BDD\Base_de_données.xlsm")
        Set ws1 = wb1.Worksheets("classeur_actif")
    >du premier modèle pour créer un premier fichier cible
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        Set wb2 = Workbooks.Open("Serveur\Modèles\Modèle_Import_basic.xlsm")
        Set ws2 = wb2.Worksheets("Basic")
    >du second modèle pour créer un second fichier cible
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        Set wb3 = Workbooks.Open("Serveur\Modèles\Modèle_Import_Special.xlsm")
        Set ws3 = wb3.Worksheets("Spec")
    Les deux sont donc ouverts en même temps, + la source

    - remplissage,
    Boucles diverses et variées selon le besoin, sur les cellules de ws3,
    >ws2.cells(j,1)= ws1(cells(i, m) si ws1 est la source par exemple ici et que les données sont sur une cellule (i,m)
    >ws3.Cells(k, 1) = ws1.Cells(i, n) si ws1 est la source donc et que les données sont sur une cellule (i,n)

    Puis pour chacun des fichiers créés, wb2 et wb3
    -copie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        ws2.copy
        ws3.copy ' (pas nécessaire de préciser wb3.activate ici)
    et directement derrière
    - sauvegarde en renommant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       ActiveWorkbook.SaveAs...
    Lequel du coup est sauvegardé ?
    et on répète les deux opérations pour le second,
    Puis
    - fermeture de l'original (le modèle) sans sauver les changements, opération juste consécutive à son enregistrement.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       ActiveWorkbook.Close savechanges:=False
    En résumé pour ne pas se mélanger

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
        Set wb1 = Workbooks.Open("Serveur\BDD\Base_de_données.xlsm")
        Set ws1 = wb3.Worksheets("classeur_actif")
     
        Set wb2 = Workbooks.Open("Serveur\Modèles\Modèle_Import_basic.xlsm")
        Set ws2 = wb2.Worksheets("Basic")
     
        Set wb3 = Workbooks.Open("Serveur\Modèles\Modèle_Import_Special.xlsm")
        Set ws3 = wb3.Worksheets("Spec")
     
    For i 1 to n
      ws2.cells(j,1)= ws1(cells(i, m)  si ws1 est la source par exemple ici et que les données sont sur une cellule (i,m)  
      ws3.Cells(k, 1) = ws1.Cells(i, n) si ws1 est la source donc et que les données sont sur une cellule (i,n)
    next i
     
    wb2.activate
    ws2.copy
    activeworkbook.saveas...\...nouveaunom.xls, ' enregistre le fichier wb2 dont la feuille ws2 vient d'être copiée, ou plutot génère ce fichier par le saveas sur une copy de la feuille
    activeworkbook.close savechanges;=false ' (qui est l'activeworkbook à ce stade ? la copie en mémoire ou le fichier nommé et enregistré ?)
    et pareil pour wb3

    wb1 est resté ouvert

    Question:
    utilisation de name as et filecopy ?
    avantages ou pas et quel usage ici ?
    si je veux maintenant fermer wb1 sans le sauvegarder ou au contraire en le sauveardant tel que transformé (on suppose qu'au cours des boucles il y a eu un échange de données), quelles instructions pour lui après celles de wb2 et wb3 ?

    comment être certain que l'on est bien sur le fichier qui va subir une instruction sans utiliser tout le temps activate; y a t il des règles de priorités d'application des opérations sur des fichiers ouverts selon l'ordre dans lequel ils sont apparus et selon l'opération subie ?
    activate est il seulement redondant ou peut il générer des erreurs ?

    Merci de vos lumières

  14. #14
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Polygos Voir le message
    si je veux maintenant fermer wb1 sans le sauvegarder ou au contraire en le sauveardant tel que transformé (on suppose qu'au cours des boucles il y a eu un échange de données), quelles instructions pour lui après celles de wb2 et wb3 ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Wb1.close Savechanges:=False  ' ou True
    comment être certain que l'on est bien sur le fichier qui va subir une instruction sans utiliser tout le temps activate; y a t il des règles de priorités d'application des opérations sur des fichiers ouverts selon l'ordre dans lequel ils sont apparus et selon l'opération activate est il seulement redondant ou peut il générer des erreurs ?
    Activate n'est pas nécessaire.
    Pour la lisibilité du code, j'utilise la syntaxe suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    With Wb1
     
    ' Suite du code
     
     
    End With
     
    With Wb2
     
    ' Suite du code
     
     
    End With

  15. #15
    Membre du Club Avatar de Polygos
    Homme Profil pro
    Ma petite entreprise
    Inscrit en
    Avril 2016
    Messages
    190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ma petite entreprise
    Secteur : Distribution

    Informations forums :
    Inscription : Avril 2016
    Messages : 190
    Points : 52
    Points
    52
    Par défaut
    Merci Erik; c'est clair comme structure.
    Comme vous connaissez la question, regardez; je veux m'assurer que j'ai bien compris
    Je dois faire le remplissage de 4 fichiers à partir d'un, wb1,sur une boucle sur celui-ci, sans me mélanger les pinceaux

    wb1, ..wb4 étant définis, leurs feuilles actives aussi, ws1 à ws4
    la source des données est wb1/ws1

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    for i=PL to DL, compteur de lignes du fichier source
        ' j, k, l, compteurs des fichiers cibles, respectivement ws2,ws3,ws4
     
        ws2(j, 1)=ws1(i,12)
        ws3(k, 1)=ws1(i,13) ' ce sont des exemples
        ws4(l, 1)= ws1(i,25)...
     
        ws2(j, 2)=ws1(i,28)
        ws3(k, 2)=ws1(i,14) ' ce sont des exemples
        ws4(l, 2)= ws1(i,32)...
     
    next i
    ...
    OU

    Comme vous dites ,un par un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    With Wb2
        For i = PL to DL
            ' ws2(j, 1)=ws1(i,12)
            ' ws2(j, 2)=ws1(i,28)
            ...
        next i 
    End With
     
     
     
    With Wb3
        For i = PL to DL
            ...
        next i
    End with
     
    'ce qui me fait faire 4 fois la même boucle, c'est pas un peu long en temps de calcul çà ?
     
     
     
    ' Puis quand c'est fini, tout le mode est ouvert
     
    ' je ferme d'abord la source avec laquelle il y eu une interaction de mise à jour, c'est mon cas
     
    Wb1.close Savechanges:=True  
     
    'je sauvegarde les différents ws2, 3, 4 remplis:
     
    ws2.copy
    activeworkbook.saveas...\...nouveaunom2.xls, ' enregistre le fichier wb2 dont la feuille ws2, remplie par la bloucle sur i, vient d'être copiée, ou plutot génère ce fichier par le saveas sur une copy de la feuille
    activeworkbook.close savechanges;=false ' ce qui ferme sans auvegarder les changements.
    Mais là, le wb2 est fermé sans enregistrement, c'est le modèle qui se ferme, vierge, et la copie elle, est bien enregistrée sous nouveaunom.xls
    Et je répète ça pour les 2 autres ws3; ws4

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    ws3.copy
    activeworkbook.saveas...\...nouveaunom3.xls, 
    activeworkbook.close savechanges;=false 
     
    ws4.copy
    activeworkbook.saveas...\...nouveaunom4.xls, 
    activeworkbook.close savechanges;=false

    C'est correct ?
    Et comme je demandais, name as et file copy ne donnent rien ici ?
    Comme on a fait 4 fois la même boucle, on ne peut optimiser le temps de calcul, simplement ?
    qu'est ce qui est plus rapide, finalement ?:
    boucler une fois sur i pour toutes les copies des ws2, 2 et 4 ou traiter les ws2, 3, 4, indépendamment et boucler dedans sur i ?
    Pouir trancher, il faut savoir que i boucle sur 3000 lignes et va chercher dans une étendue de 200 colonnes environ et que les colonnes à remplir dans les ws2, 3, 4 sont au nombre de 3 seulement à remplir !

    Je vais pas à pas, comme ça je vais plus loin..parce que je ne retourne pas sur mes pas !
    Il faut être fainéant me disait mon prof de math pour faire des maths...
    et quand il voulait nous inciter à chercher la meilleure astuce, il disait aussi "les gens sont cons !" comme preuve de leur manque d'imagination..pour servir la sacro sainte fainéantise !

  16. #16
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Polygos Voir le message
    Ce qu'on ne connaît pas, c'est le temps que met l'ensemble de vos procédures. Pour aller plus vite, il faut éviter les Activate, les Select dans le code car ils plombent le temps de traitement.

    Une fois instanciées, les variables Worksheet se suffisent à elles-mêmes, donc par exemple With Ws1 est suffisant, etc...
    Personnellement, pour la clarté et la maintenance du code, je procède plutôt couple par couple Ws1 avec Ws2 et ainsi de suite.

  17. #17
    Membre du Club Avatar de Polygos
    Homme Profil pro
    Ma petite entreprise
    Inscrit en
    Avril 2016
    Messages
    190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ma petite entreprise
    Secteur : Distribution

    Informations forums :
    Inscription : Avril 2016
    Messages : 190
    Points : 52
    Points
    52
    Par défaut
    Citation Envoyé par Eric KERGRESSE Voir le message
    Ce qu'on ne connaît pas, c'est le temps que met l'ensemble de vos procédures. Pour aller plus vite, il faut éviter les Activate, les Select dans le code car ils plombent le temps de traitement.

    Une fois instanciées, les variables Worksheet se suffisent à elles-mêmes, donc par exemple With Ws1 est suffisant, etc...
    Personnellement, pour la clarté et la maintenance du code, je procède plutôt couple par couple Ws1 avec Ws2 et ainsi de suite.
    Vous voulez bien dire with.. et end with, par groupe donc avec une boucle sur i dedans chacun, je comprends ?

  18. #18
    Membre du Club Avatar de Polygos
    Homme Profil pro
    Ma petite entreprise
    Inscrit en
    Avril 2016
    Messages
    190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ma petite entreprise
    Secteur : Distribution

    Informations forums :
    Inscription : Avril 2016
    Messages : 190
    Points : 52
    Points
    52
    Par défaut
    Bon, jai écrit le code en entier.

    il va chercher dans wb1 des données pour éditer 4 fichiers wb2, wb3, wb4, wb5

    Mais à la fin, erreur, car un fichier classeur 2 est créé auquel il tente d'appliquer une fonction dont je ne sais pas d'ou l vient, ni lui, ni la fonction:

    Je note que FICHIER OFFRES est ouvert deux fois ?
    Nom : Screenshot_5.png
Affichages : 89
Taille : 43,8 Ko

    Le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
     
    Sub MAJ_Generale_PQ()
        Dim k, ka, ks, ki As Integer
        Dim R As String
        Dim PB As String
        Dim DL As Long '(dernière ligne de la base)
        Dim PL As Long '8
        Dim DLT As Long '(dernière ligne du fichier transfert)
        Dim name As String
        Dim Import As String
        Dim store As String
        Dim Dc As Integer 'Dernière colonne de la base
        Dim plage As Range
        Dim ver As String
        ver = "070620"
        R = 0.2
     
    ' Déclaration des fichiers
     
        Dim wb1, wb2, wb3, wb4 As Workbook '(Grande base, Modèle Import Complet)
        Dim ws1, ws2, ws3, ws4 As Worksheet
     
        'SOURCE
        Set wb1 = ThisWorkbook
        Set ws1 = wb1.Worksheets("Epicerie")
     
        'CIBLE 2
        Set wb2 = Workbooks.Open("\\Station-serveur\TRANSFERTS DE DONNEES\Modèles\Modèle_Import_PQS_FD-SV.xlsm")
        Set ws2 = wb2.Worksheets("PQ")
     
        'CIBLE 3
        Set wb3 = Workbooks.Open("\\Station-serveur\\Fichier Exportés AMZ\Modèles\Fichiers pour mise à jour\Flat.File.Price.Inventory.xlsm")
        Set ws3 = wb3.Worksheets("Price Template")
     
        'CIBLE 4
        Set wb4 = Workbooks.Open("\\Station-serveur\Modèles\Sevellia_Import_File-PQ.xlsm")
        Set ws4 = wb4.Worksheets("Products")
     
        'CIBLE 5
        Set wb5 = Workbooks.Open("\\Station-serveur\Modèles\FICHIER OFFRES.xlsm")
        Set ws5 = wb5.Worksheets("Feuil1")
     
     
    ' RESTRICTION EVENTUELLE DE L'ETENDUE DE L'IMPORT
     
         If MsgBox("Voulez-vous réduire le champ de l'import ?", vbYesNo, "Choix du périmètre") = vbYes Then
            PL = InputBox("Entrez la valeur de la première ligne", "Première ligne", 8)
            DL = InputBox("Entrez la valeur de la dernière ligne", "Dernière ligne", "DL")
            name = InputBox("Entrez un titre pour cet Export:", "Titre de l'Export", "Global")
        Else
            PL = 8
            DL = ws1.Range("F" & Rows.Count).End(xlUp).Row
            name = "Global"
        End If
        MsgBox "L 'étendue de la MAJ va de " & PL & " à " & DL
     
    'BOUCLE DE CREATION DES 4 FICHIERS DE MISE A JOUR GENERALE DES STOCKS
     
        'CIBLE 2
        k = 2
            For i = PL To DL
     
                            'SKU
                                ws2.Cells(k, 1) = ws1.Cells(i, 1)
                                ws2.Cells(k + 1, 1) = ws1.Cells(i, 1)
                                ws2.Cells(k + 2, 1) = ws1.Cells(i, 1)
                                ws2.Cells(k + 3, 1) = ws1.Cells(i, 1)
                                ws2.Cells(k + 4, 1) = ws1.Cells(i, 1)
                                ws2.Cells(k + 5, 1) = ws1.Cells(i, 1)
     
                            'LANGUAGE
                                ws2.Cells(k, 2) = "ru"
                                ws2.Cells(k + 1, 2) = "en"
                                ws2.Cells(k + 2, 2) = "fr"
                                ws2.Cells(k + 3, 2) = "ru"
                                ws2.Cells(k + 4, 2) = "en"
                                ws2.Cells(k + 5, 2) = "fr"
     
                            'PRIX
                                ws2.Cells(k, 3) = ws1.Cells(i, 120)
                                ws2.Cells(k + 1, 3) = ws1.Cells(i, 120)
                                ws2.Cells(k + 2, 3) = ws1.Cells(i, 120)
                                ws2.Cells(k + 3, 3) = ws1.Cells(i, 120)
                                ws2.Cells(k + 4, 3) = ws1.Cells(i, 120)
                                ws2.Cells(k + 5, 3) = ws1.Cells(i, 120)
     
                            'QTY
                                ws2.Cells(k, 4) = ws1.Cells(i, 122)
                                ws2.Cells(k + 1, 4) = ws1.Cells(i, 122)
                                ws2.Cells(k + 2, 4) = ws1.Cells(i, 122)
                                ws2.Cells(k + 3, 4) = ws1.Cells(i, 122)
                                ws2.Cells(k + 4, 4) = ws1.Cells(i, 122)
                                ws2.Cells(k + 5, 4) = ws1.Cells(i, 122)
                            'STORE
                                ws2.Cells(k, 5) = "France-delicatessen.fr"
                                ws2.Cells(k + 1, 5) = "France-delicatessen.fr"
                                ws2.Cells(k + 2, 5) = "France-delicatessen.fr"
                                ws2.Cells(k + 3, 5) = "sana-vita.fr"
                                ws2.Cells(k + 4, 5) = "sana-vita.fr"
                                ws2.Cells(k + 5, 5) = "sana-vita.fr"
     
                                k = k + 6
     
            Next i
     
        'CIBLE 3
        ka = 2
            For i = PL To DL
                                'Colonne A = 1 "sku"
                                    ws3.Cells(ka, 1) = ws1.Cells(i, 1)
                                'Colonne B = 2 "Price"
                                    If choix = "prix-qté" Then      ' Choix de la mise à jour, Px/Qté ou Qté seule
                                    ws3.Cells(ka, 2) = ws1.Cells(i, 168)
                                    Else                            ' MAJ de la Qté seule; la colonen prix reste vide
                                    End If
                                'Colonne E = 5 "quantity"
                                    ws3.Cells(ka, 5) = ws1.Cells(i, 122)
                                'Colonne F = 6 "Ledtime-to-ship"
                                    ws3.Cells(ka, 6) = ws1.Cells(i, 169) 'sera utile quand différencié
     
                                ka = ka + 1
            Next i
     
        'CIBLE 4
        ks = 2
            For i = PL To DL
                            'Colonne A = 1 "Vendor Sku"
                             ws4.Cells(ks, 1) = ws1.Cells(i, 1)
     
                            'Colonne B = 2 "Qty"
                             ws4.Cells(ks, 2) = ws1.Cells(i, 122)
     
                            'Colonne C=3 "Price"
                             ws4.Cells(ks, 3) = ws1.Cells(i, 168) * 0.95
                             ws4.Cells(ks, 3).NumberFormat = "0.00"
     
                            ks = ks + 1
        Next i
     
        'CIBLE 5
        'Msgbox pour l'opeco: Remise R, dates de début et de fin à préciser
        ki = 2
        R = 0.2
            For i = PL To DL
                            'Colonne A = 1 "sku"
                            ws5.Cells(ki, 1) = ws1.Cells(i, 1)
     
                            'colonne B = 2 "product-id
                            ws5.Cells(ki, 1) = ws1.Cells(i, 9)
     
                            'Colonne C = 3 "product-id-type
                            ws5.Cells(ki, 1) = "ean"
     
                            'Colonne F = 6 "price"
                            ws5.Cells(ki, 1) = ws1.Cells(i, 122) * 0.95
     
                            'Colonne H = 8 "quantity"
                            ws5.Cells(ki, 1) = ws1.Cells(i, 122)
     
                            'Colonne M = 13 "logistic-class
                            'Tranche de poids brut calculée à partir du poids brut (96), majoré de l'emballage, poids du carton brut utilisé (193)
                               PB = (ws1.Cells(i, 96) + ws1.Cells(i, 192)) * 1.05
                                If PB < 0.25 Then
                                ws5.Cells(ki, 13) = "MP_PC"
                                Else
                                    If PB < 0.5 Then
                                    ws5.Cells(ki, 13) = "MP_MC"
                                    Else
                                        If PB < 1 Then
                                        ws5.Cells(ki, 13) = "MP_GC"
                                        Else
                                            If PB < 2 Then
                                            ws5.Cells(ki, 13) = "MP_HG1"
                                            Else
                                                If PB < 4 Then
                                                ws5.Cells(ki, 13) = "MP_HG2"
                                                End If
                                            End If
                                       End If
                                   End If
                               End If
     
                            'Colonne N = 14 "discount-price"
                            ws5.Cells(ki, 14) = ws1.Cells(i, 122) * 0.95 * R
     
                            'Colonne O = 15 "disount-start-end
                             ws5.Cells(ki, 15) = "TbD"
     
                            'Colonne P = 16 "discount-end-date
                             ws5.Cells(ki, 16) = "TbD"
     
                            'Colonne R = 18 "update-delete
                             ki = ki + 1
            Next i
     
     
     
    'SAUVEGARDES DES FICHIERS DE MISE A JOUR DES STOCKS
     
    With ws2 'Fichier de mise à jour PQ
        ws2.Copy
        ActiveWorkbook.SaveAs "\\Station-serveur\C2\PQ\Fichier MAJ PQ_FD_SV " & name & "-" & Format(Now(), "mmdd-hhmm") & ".xlsx"
        ActiveWorkbook.Close savechanges:=False
    End With
     
    With ws3 'Fichier de mise à jour PQ
        ws3.Copy
        ActiveWorkbook.SaveAs "\\Station-serveur\C3\FFPI-prix-qté " & name & "-" & Format(Now(), "mmdd-hhmm") & ".xlsx"
        ActiveWorkbook.Close savechanges:=False
    End With
     
    With ws4 'Fichier de mise à jour PQ
        ws4.Copy
        ActiveWorkbook.SaveAs "\\Station-serveur\C4\MAJ PQ SEV (v" & ver & ")" & name & "-" & Format(Now(), "mmdd-hhmm") & ".xlsx"
        ActiveWorkbook.Close savechanges:=False
    End With
     
    With ws5 'Fichier de mise à jour PQ
        ws5.Copy
        ActiveWorkbook.SaveAs "\\Station-serveur\C5\MAJ PQ INT (v" & ver & ")" & name & "-" & Format(Now(), "mmdd-hhmm") & ".xlsx"
        ActiveWorkbook.Close savechanges:=False
    End With
     
    End Sub
    Comme l'autre fois je ne comprends d'ou vient ce foutu classeur 2 qui s'ouvre et forcément bloque par une instruction auto qu'il va chercher je ne sais ou
    Pourtant j'ai bien fermé tout, enregitsré correctement une sauvegarde pour chacun..
    au moment ou ça plante,
    wb2 est resté ouvert et renommé correctement
    wb3 aussi
    wb4 aussi
    wb5 aussi
    mais il y a en plus ce classeur 2, puis 4 au deuxième essai, etc. qui est identique au Wb3. Pourquoi ?
    n'y aurait il pas une incidence des extensions de classeur ?
    Les modèles" sont tous des .xlsm et je les sauve en xlsx


  19. #19
    Membre du Club Avatar de Polygos
    Homme Profil pro
    Ma petite entreprise
    Inscrit en
    Avril 2016
    Messages
    190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ma petite entreprise
    Secteur : Distribution

    Informations forums :
    Inscription : Avril 2016
    Messages : 190
    Points : 52
    Points
    52
    Par défaut
    ..
    jen'ai pas compris pourquoi mais ça fonctionne en modifiant deux choses:
    > j'ai modifié tous mes modèles en format xlsx
    > j'ai ajouté un doevents juste après la sauvegarde.

    Ca n'empêche que je n'ai pas compris d'où venait ce fichier parasite et pourquoi il est généré avec ces modules...

Discussions similaires

  1. [XL-2013] VBA ouverture et fermeture de fichiers
    Par gexels dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 08/11/2017, 02h55
  2. Détecter ouverture et fermeture de fichier
    Par Braillane dans le forum Général Java
    Réponses: 8
    Dernier message: 12/02/2010, 15h54
  3. Fermeture du fichier Access sur ouverture requete
    Par jj4822 dans le forum Access
    Réponses: 8
    Dernier message: 05/06/2009, 21h50
  4. Réponses: 5
    Dernier message: 26/10/2007, 23h45
  5. ouverture et fermeture d un fichier
    Par magnetic dans le forum Langage
    Réponses: 3
    Dernier message: 03/07/2006, 08h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo