XL 2016 Reset de Variable

Dymouille

XLDnaute Nouveau
Bonjour à tous !

y'a t'il un moyen de reset les variables entre deux appels de procédure ?
ici, ca me retourne toujours que le résultat de la deuxième procédure "ExportTarifMPPromo", comme si ca écrasait le premier appel et je comprends vraiment pas pourquoi..
j'ai essayé avec un "END" a la fin, mais ca stop tout le code, sans continuer les appels qui suivent !

VB:
ExportTarifMPPromo ThisWorkbook.Path & "/NF/Culinaire/2021/promo/TARIF PROMO ETHNIQUE 2021 LME 2021", "Culinaire", "promo"

ExportTarifChocPromo ThisWorkbook.Path & "/NF/Chocolat/2021/promo/TARIF PROMO CHOCOLATS 2021 LME 2021", "Chocolat", "Promo"

ExportTarifMPPromo ThisWorkbook.Path & "/NF/Nutrition/2021/promo/TARIF PROMO NUT 2021 LME 2021", "Nutrition", "promo"

Je vous joins ci-dessous le code :
VB:
'=================================================

Public Sub ExportTarifMPPromo(CheminTarif As String, NomCat As String, StrPro As String)

  Const NF1$ = "Fichier X" 'nom du fichier 1, sans l'extension
  Application.ScreenUpdating = 0 'gel de l'écran => c'est plus rapide
  b = 0: OpenFile CheminTarif: If b Then Exit Sub   'ouvrir d'abord le 2ème fichier
  With ActiveWorkbook ' la ou on prend les données
  Worksheets("TARIF MP").Activate
  Dim ws As Worksheet, prx As Range, TaxeEco As Range, Appro As Range, EanUC As Range, comm As Range, Design As Range, ValUD As Range, EanPAL As Range, EanUD As Range, cel As Range, TrTn As Range
  Dim cod1$, nlm&, dlg&, lg1&, lg2&
  Set ws = Workbooks(NF1 & ".xlsm").Worksheets("Feuil2") 'la ou on envoi les données
  nlm = Rows.Count: lg2 = ws.Cells(nlm, 2).End(3).Row + 1 'a partir de la derniere ligne +1
  dlg = Cells(nlm, 2).End(3).Row
  For lg1 = 2 To dlg
    With Cells(lg1, 2)  'a partir de la colonne 2 car il n'y a rien dans la 1
      Set prx = .Offset(, 13)
      Set Design = .Offset(, 6)
      Set EanUC = .Offset(, 5)
      Set comm = .Offset(, 3)
      Set TrTn = .Offset(, 9)
      Set TaxeEco = .Offset(, 15)
      Set Appro = .Offset(, 12)
      Set ValUD = .Offset(, 23)
      Set EanUD = .Offset(, 38)
      Set EanPAL = .Offset(, 39)
      If Not IsEmpty(prx) Then 'faire la suite si un prix existe,
        If IsNumeric(prx) Then 'et seulement s'il est numérique !
'          If .Offset(, 6) = ctg Then 'la catégorie doit être ok !
            cod1 = Cells(lg1, 4).Value 'le Code Fert correspondant dans le fichier ou l'on cherche
            Set cel = ws.Columns(1).Find(cod1, , -4163, 1, 1)
            If Not cel Is Nothing Then
              If cel.Offset(, 16) = "" Then _
                cel.Offset(, 2) = NomCat        'Nom catégorie
                cel.Offset(, 5) = EanUC
                cel.Offset(, 16) = prx          'Prix
                cel.Offset(, 17) = TaxeEco      'taxe Eco
                cel.Offset(, 18) = ValUD        'Val UD
                cel.Offset(, 19) = Appro        'unité d'appro
                cel.Offset(, 20) = EanUD        'EanUD
                cel.Offset(, 21) = EanPAL       'EanPal
                cel.Offset(, 22) = StrPro       'Standard ou promo
                cel.Offset(, 23) = TrTn         'taux reduit ou normal
                
                
            Else
            'tout est décalé de une colonne, car 0 est la premiere valeur
              Set cel = ws.Cells(lg2, 1)
              cel = cod1                       'Code SKU
              cel.Offset(, 2) = NomCat         'Catégorie
              cel.Offset(, 3) = Design         'Désignation
              cel.Offset(, 5) = EanUC          'EAN UC
              cel.Offset(, 10) = comm          'Commentaire
              cel.Offset(, 16) = prx           'Prix
              cel.Offset(, 17) = TaxeEco       'taxe Eco
              cel.Offset(, 18) = ValUD         'VAL UD
              cel.Offset(, 19) = Appro         'unité d'appro
              cel.Offset(, 20) = EanUD         'EanUD
              cel.Offset(, 21) = EanPAL        'EanPal
              cel.Offset(, 22) = StrPro        'Standard ou promo
              cel.Offset(, 23) = TrTn          'reduit ou normal
              lg2 = lg2 + 1
            End If
          End If
        End If
'      End If
    End With
  Next lg1
End With
 
 
  ActiveWorkbook.Close

End Sub

Merci d'avoir lu !
 
Bonjour Dymouille, tbft, le forum

tu importes combien de données (lignes) avec le fichier 1, combien de données (lignes) avec le fichier 2 et combien de données (lignes) as tu au départ dans ta feuille 2 de ws ?
et quel le type des fichiers importés ? ce n'est pas précisé.
et si tu peux aussi poster le code de ta macro OpenFile, ça peut aider

Bien cordialement, @+
 
Dernière édition:

Dymouille

XLDnaute Nouveau
Hello !

Le fichier "X" qui contient la Feuille 2 de ws est vide au départ,
pour le premier fichier je suis censé importer 13 lignes,
VB:
ExportTarifMPPromo ThisWorkbook.Path & "/NF/Culinaire/2021/promo/TARIF PROMO ETHNIQUE 2021 LME 2021", "Culinaire", "promo"
pour le deuxieme fichier, 29 lignes,
VB:
ExportTarifChocPromo ThisWorkbook.Path & "/NF/Chocolat/2021/promo/TARIF PROMO CHOCOLATS 2021 LME 2021", "Chocolat", "Promo"
et pour le dernier, 50 lignes
VB:
ExportTarifMPPromo ThisWorkbook.Path & "/NF/Nutrition/2021/promo/TARIF PROMO NUT 2021 LME 2021", "Nutrition", "promo"

Et a la fin je me retrouve seulement avec 79 lignes ( fichier 2 + fichier 3)
comme si la deuxieme utilisation de "ExportTarifMPPromo" écrasait la premiere

j'importe simplement des chaines de caractères ou des nombres !

Ci-dessous le code du OpenFile :
VB:
Public Sub OpenFile (chn$)
    chn = chn & ".xlsx"
    Workbooks.Open chn, ReadOnly:=True
End Sub
 

Dymouille

XLDnaute Nouveau
Hello !

si, j'active la feuille "TARIF MP" un peu plus haut dans le code !
j'ai trouvé la solution, par contre je comprends vraiment pas pourquoi ca fait ca..
parceque je prend bien depuis la colonne 2

VB:
 nlm = Rows.Count: lg2 = ws.Cells(nlm, 1).End(3).Row + 1 'a partir de la derniere ligne +1

j'ai mis un 1 a la place du 2 dans
VB:
ws.Cells(nlm, 2).End(3).Row+1"
 
Haut Bas