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

Membres actuellement en ligne

Statistiques des forums

Discussions
312 493
Messages
2 088 956
Membres
103 990
dernier inscrit
lamiadebz