Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Question Macro/VBA. (ordre géneral)

Maspalio

XLDnaute Occasionnel
Bonjour amis Exceliens..

J'ai 2-3 questions sans réponses après moultes recherches google..

Je vous explique un peu mon souci. J'ai 2 Classeurs (Semaine1 et Semaine2 ) je veux faire des comparaisons au niveau du contenu, ainsi que faire des copier/coller de cellules selon l'équivalence d'un classeur vers l'autre.

Mon 1er souci est, que chaque semaine je reçois un nouveau classeur (Semaine3), donc daté.. et donc la comparaison sera à faire entre Semaine2 et Semaine3 (c'est pour voir l'état d'avancement de la production.. ) et ainsi de suite, ensuite Semaine3 vers Semaine4.
Donc Comment gérer cela, sachant qu'au final ca ne sera pas moi l'utilisateur..
Peut on créer une macro globale , hors d'un classeur ?
Ou alors passer par un classeur Témoin, avec une macro à exécuter ?

2ieme : Comment faire pour exécuter cette macro avec des noms de fichiers variables ? Excel sera-t-il gérer cela ?
Possible ? Avec les 2 fichiers ouverts ?

Merci
 

job75

XLDnaute Barbatruc
Re : Question Macro/VBA. (ordre géneral)

Bonjour Maspalio,

C'est un problème très classique que vous présentez-là.

Supposons que dans tous vos fichiers vous ayez en Feuil1 :

- en A1 le numéro de la semaine, 3 par exemple pour le classeur "Semaine3"

- en A2 la production de cette semaine-là

- en A3 la comparaison avec la production de la semaine précédente.

Dans le Thisworkbook de tous les fichiers (supposés dans le même dossier), il faut cette macro :

Code:
Private Sub Workbook_Open()
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Application.EnableEvents = False 'évite les ouvertures en cascade
On Error GoTo 1
With Sheets("Feuil1")
Workbooks.Open ThisWorkbook.Path & "\" & "Semaine" & (.Range("A1") - 1) & ".xls" 'ouvre le fichier de la semaine précédente (même dossier)
.Range("A3") = .Range("A2") / ActiveWorkbook.Sheets("Feuil1").Range("A2") 'compare les cellules A2
End With
ActiveWorkbook.Close
1 Application.EnableEvents = True
End Sub

A+
 

job75

XLDnaute Barbatruc
Re : Question Macro/VBA. (ordre géneral)

Re,

Vous pouvez aussi dans chaque dossier avoir un bouton qui refait à la demande la comparaison.

Donc dans Thisworkbook :

Code:
Private Sub Workbook_Open()
Compare
End Sub

Et affecter à chaque bouton cette macro (dans un Module) :

Code:
Sub Compare()
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Application.EnableEvents = False 'évite les ouvertures en cascade
On Error GoTo 1
With Sheets("Feuil1")
Workbooks.Open ThisWorkbook.Path & "\" & "Semaine" & (.Range("A1") - 1) & ".xls" 'ouvre le fichier de la semaine précédente (même dossier)
.Range("A3") = .Range("A2") / ActiveWorkbook.Sheets("Feuil1").Range("A2") 'compare les cellules A2
End With
ActiveWorkbook.Close
1 Application.EnableEvents = True
End Sub

Cette macro peut aussi être lancée par une macro Worksheet_Change dans le code de la feuille...

A+
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : Question Macro/VBA. (ordre géneral)

Re,

Une autre solution, nettement plus simple

Au lieu d'ouvrir le classeur de la semaine précédente, on entre une formule avec liaison en A3.

Dans tous les ThisWorkbook donc :

Code:
Private Sub Workbook_Open()
With Sheets("Feuil1")
Application.DisplayAlerts = False 'au cas où le fichier de la semaine précédente n'existe pas
.Range("A3").Formula = "=A2/'" & ThisWorkbook.Path & "\[Semaine" & Sheets("Feuil1").Range("A1") - 1 & ".xls]Feuil1'!A2" 'formule de comparaison des cellules A2
If .Range("A3").Text = "#REF!" Then .Range("A3") = "n/a"
End With
End Sub

A+
 
Dernière édition:

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…