problème dans macro identique sur 2 fichiers

farid

XLDnaute Occasionnel
Bonjour à vous la communauté,

En PJ, deux dossiers test1 et test 2 , lorsque j’ouvre le dossier test 2 fichier 2020 et que je clique sur l’icone , cela doit me crée un fichier a partir du modelé fichier « Poste 1 » l’enregistre dans le dossier « Archive-2020 » nommé selon le numéro en A1 du fichier « 2020 » et ce numéro est écrit dans la colonne « A » à partir de A5 , jusqu’ici , pas d soucie , cela fonctionne.

Par contre dans le dossier « test 1 » avec les mêmes manipulations, tout fonctionne sauf la retranscription dans la colonne « A » du fichier « 2020, pourtant avec les mêmes Macros , je ne comprend pas , si vous pouvez m’aider a comprendre ce problème afin de corriger sur mes fichiers originaux.



Par avance, merci
 

Pièces jointes

  • Test.zip
    947.7 KB · Affichages: 11

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,

Sans doute parce que vous utilisez rep =ActiveWorkbook.Path au lieu de rep = ThisWorkbook.Path.
ActiveWorkbook comme son nom l'indique est le classeur actif, qui parfois n'est pas toujours celui auquel on s'attend dans le déroulement d'une macro.

ThisWorkbook fait référence au classeur qui contient la macro en cours d'exécution, il n'y a donc pas d'ambigüité à son sujet, c'est toujours celui auquel on s'attend.

La collection des classeur (Workbooks) possède une méthode intéressante (Add) pour ouvrir un nouveau classeur suivant un modèle. Cela permet de ne pas risquer de modifier le modèle original.

Quand vous travaillez sur des classeurs et feuilles, il est profitable de les référencer dans des variables aux noms descriptifs. Comme cela vous savez et les futurs utilisateur de votre macro aussi, de quoi il retourne exactement. Le débogage s'en trouve également facilité.

Si vous déclarer des variables, déclarez les toutes. Mettez 'Option Explicit' en première ligne de votre module. Le débogage, s'en trouvera encore facilité, à la création comme à l'exécution de vos macros. Pour que cela se fasse de façon automatique, cocher 'Déclaration des variables obligatoire' dans 'Outils/Options/onglet Editeur' de l'éditeur de macro.

Dans la macro suivante j'ai employé ces méthodes et propriétés intéressantes.

VB:
Sub Ouv_Intervention()
    Dim wkModel As Workbook
    Dim wsMaintenance As Worksheet
    Dim nomFichier As String ' une variable servant au modèle et sa sauvegarde
    Dim Numero As Integer ' entier

    Set wsMaintenance = ThisWorkbook.Sheets("Plan de maintenance")
   
    Application.ScreenUpdating = False
    '
    ' Nouveau numéro
    Numero = wsMaintenance.Range("A1").Value + 1
   
    nomFichier = ThisWorkbook.Path & "\" & "Poste 1.xlsm"
    wsMaintenance.Range("A1") = Numero
    '
    ' Création d'un nouveau classeur suivant le modèle
    Set wkModel = Workbooks.Add(nomFichier)
    '
    ' futur nom du nouveau classeur
    nomFichier = Numero & ".xlsm"
    '
    ' Travailler sur le classeur nouvellement créé
    With wkModel
        .Sheets(1).Range("A3") = Numero
        .SaveAs ThisWorkbook.Path & "\Archive-2020" & "\" & nomFichier, xlOpenXMLWorkbookMacroEnabled
        .Close
    End With
    '
    ' Travailler sur la feuille de maintenance
    With wsMaintenance
        derligne = .Range("A65536").End(xlUp).Row + 1
        .Range("A" & derligne) = Numero
    End With
End Sub

Cordialement
 

farid

XLDnaute Occasionnel
Bonjour Roblochon,
merci pour ces précisions que j'ai lu avec attention. J'ai repris votre proposition que j'ai collé dans les deux fichiers 2020 des dossiers test 1 et test 2 , dans le fichier 2020 du dossier test2 , cela fonctionne très bien , mais dans le fichier 2020 du dossier test1 , c'est le même problème , le numéro ne s'affiche pas dans la colonne A .J'ai fait une comparaison minutieuse des deux fichier et malheureusement je n'arrive pas a détecter la différence. Je ne comprend pas , je cherche encore et merci pour la macro .
bien cordialement
 

Pièces jointes

  • Test.Zip
    785.2 KB · Affichages: 3

Hasco

XLDnaute Barbatruc
Repose en paix
Re,

Dans le fichier 2020.xlsm (de 13 heure 02) de test1 il y a votre macro d'origine :
VB:
Sub Ouv_Intervention()
Dim dernumero As Double
Application.ScreenUpdating = False
dernumero = Range("A1").Value
rep = ActiveWorkbook.Path
fic = rep & "\" & "Poste 1.xlsm"
Workbooks.Open fic
Range("A3") = dernumero + 1
Workbooks("2020.xlsm").Worksheets("Plan de maintenance").Range("A1") = dernumero + 1

nom = Range("A3").Value & ".xlsm"
Windows("Poste 1.xlsm").Activate
rep1 = ActiveWorkbook.Path & "\Archive-2020" & "\" & nom
ActiveWorkbook.SaveAs rep1
ActiveWorkbook.Close
derligne = Sheets("Plan de maintenance").Range("A65536").End(xlUp).Row + 1
Range("A" & derligne) = dernumero + 1
End Sub

Dans 2020.xlsm de test2 il y a
Code:
Sub Ouv_Intervention()
    Dim wkModel As Workbook
    Dim wsMaintenance As Worksheet
    Dim nomFichier As String ' une variable servant au modèle et sa sauvegarde
    Dim Numero As Integer ' entier

    Set wsMaintenance = ThisWorkbook.Sheets("Plan de maintenance")
 
    Application.ScreenUpdating = False
    '
    ' Nouveau numéro
    Numero = wsMaintenance.Range("A1").Value + 1
 
    nomFichier = ThisWorkbook.Path & "\" & "Poste 1.xlsm"
    wsMaintenance.Range("A1") = Numero
    '
    ' Création d'un nouveau classeur suivant le modèle
    Set wkModel = Workbooks.Add(nomFichier)
    '
    ' futur nom du nouveau classeur
    nomFichier = Numero & ".xlsm"
    '
    ' Travailler sur le classeur nouvellement créé
    With wkModel
        .Sheets(1).Range("A3") = Numero
        .SaveAs ThisWorkbook.Path & "\Archive-2020" & "\" & nomFichier, xlOpenXMLWorkbookMacroEnabled
        .Close
    End With
    '
    ' Travailler sur la feuille de maintenance
    With wsMaintenance
        derligne = .Range("A65536").End(xlUp).Row + 1
        .Range("A" & derligne) = Numero
    End With
End Sub

Sans doute n'avez-vous pas enregistré vos modifications.

Bonne après-midi
 

Hasco

XLDnaute Barbatruc
Repose en paix
Re,

Vous avez un tableau sous votre tableau (ligne 1500) donc lorsque vous faites :
VB:
 With wsMaintenance
      derligne = .Range("A65536").End(xlUp).Row + 1
      .Range("A" & derligne) = Numero
End With

derligne aura le numéro de ligne disponible SOUS votre tableau. D'ailleurs on y voit la marque de vos essais précédent.

Solution possible parmi d'autres : déplacez votre tableau :D

P.S. vous n'êtes plus obligé de joindre ici tous vos fichier dans un zip. Joignez uniquement celui qui pose problème. A moins qu'il y ait modification de l'arborescence.

Bonne soirée
 

Discussions similaires