Vba

Signaler
Messages postés
7
Date d'inscription
samedi 10 novembre 2007
Statut
Membre
Dernière intervention
25 août 2009
-
Messages postés
2065
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
14 mars 2016
-
Bonjour,

Je souhaite consolider 7 tableaux (tous dans des dossiers séparés) en 1 tableau (fichier ETATS) dans un autre fichier excel. Tous les tableaux ont une matrice identique, mais au fure et à mesure qu'il y a des modifications je veux que le fichier ETATS soit informé. Je pensais mettre en place un bouton VBA (MAJ=Mise à jour) dans chacun des 7 dossiers et quand les pers cliquent sur ce bouton celà va directement dans mon fichier ETATS s'enrgistrer avec les nouvelles modif. Attention!!! Il faudrait qu'à chaque fois l'ancien fichier ETATS s'écrase pour le nouveau, ce qui m'importe c'est seulement le dernier. Est-ce possible de m'aider? Merci d'avance,

steph8032

3 réponses

Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
73
Salut
Je ne suis pas un as de Excel, mais je dirais que tu prends le problème à l'envers : C'est la feuille récapitulative ETATS qui doit aller chercher les infos dans les 7 autres feuilles.
Suffirait d'aller rechercher des données dans un fichier externe avec une simple syntaxe :
   = '[autre fichier.xls]Feuil1'!$B$8

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Messages postés
7
Date d'inscription
samedi 10 novembre 2007
Statut
Membre
Dernière intervention
25 août 2009

Bonjour,

Suite à ton message, j'ai commencé par ETATS, et voilà ce que j'ai effectué. 

Mes problèmes:
1-Si une ligne s'ajoute dans l'un des 7 fichiers ma macro ne le prend pas en compte.
2-J'aimerais que les données se suppriment au fur et à mesure que j'appuie sur mon bouton MAJ pour laisser place aux nouvelles données des 7 tableaux.
Merci beaucoup pour ton aide.

Sub MAJ()
'
' MAJ Macro
'
MSG = "CONFIRMATION DE LA NOUVELLE MISE A JOUR"
Title = "Voulez-vous continuez?"
Style = vbYesNo + vbCritical + vbDefaultButton2
reponde = MsgBox(Title, vbYesNo, MSG)
'
If reponse = 6 Then
'ouvrir le 1er tableau


    ChDir "C:\Documents and Settings\Bureau\QUALITE"
    '1er Tableau
    '
    Workbooks.Open Filename:= _
        "C:\Documents and Settings\Bureau\QUALITE\Suivi dys1.xls"
    Range("A2:AK21").Select
    Selection.Copy
    Application.WindowState = xlMinimized
    Windows("ETATS.xls").Activate
    Sheets("Tab1").Select
    Range("A1").Select
    ActiveSheet.Paste
    Range("A2").Select
    Windows("Suivi dys1.xls").Activate
    ActiveWindow.Close
    '
    '2ième Tableau
    Workbooks.Open Filename:= _
        "C:\Documents and Settings\Bureau\QUALITE\Suivi dys2.xls"
    Range("A2:AK13").Select
    Selection.Copy
    Application.WindowState = xlMinimized
    Windows("ETATS.xls").Activate
    Sheets("Tab2").Select
    Range("A1").Select
    ActiveSheet.Paste
    Range("A2").Select
    Windows("Suivi dys2.xls").Activate
    ActiveWindow.Close
    '
    '3ième Tableau
    Workbooks.Open Filename:= _
        "C:\Documents and Settings\Bureau\QUALITE\Suivi dys3.xls"
    Range("A2:AK24").Select
    Selection.Copy
    Application.WindowState = xlMinimized
    Windows("ETATS.xls").Activate
    Sheets("Tab3").Select
    Range("A1").Select
    ActiveSheet.Paste
    Range("A2").Select
    Windows("Suivi dys3.xls").Activate
    ActiveWindow.Close
    '
    '4ième Tableau
    Workbooks.Open Filename:= _
        "C:\Documents and Settings\Bureau\QUALITE\Suivi dys4.xls"
    Range("A2:AK25").Select
    Selection.Copy
    Application.WindowState = xlMinimized
    Windows("ETATS.xls").Activate
    Sheets("Tab4").Select
    Range("A1").Select
    ActiveSheet.Paste
    Range("A2").Select
    Windows("Suivi dys4.xls").Activate
    ActiveWindow.Close
    '
    '5ième Tableau
    Workbooks.Open Filename:= _
        "C:\Documents and Settings\Bureau\QUALITE\Suivi dys5.xls"
    Range("A2:AK18").Select
    Selection.Copy
    Application.WindowState = xlMinimized
    Windows("ETATS.xls").Activate
    Sheets("Tab5").Select
    Range("A1").Select
    ActiveSheet.Paste
    Range("A2").Select
    Windows("Suivi dys5.xls").Activate
    ActiveWindow.Close
    '
    '6ième Tableau
    Workbooks.Open Filename:= _
        "C:\Documents and Settings\Bureau\QUALITE\Suivi dys6.xls"
    ActiveWindow.SmallScroll Down:=-6
    Range("F2:AK39").Select
    Selection.Copy
    Application.WindowState = xlMinimized
    Windows("ETATS.xls").Activate
    Application.WindowState = xlMinimized
    Sheets("Tab6").Select
    Range("A1").Select
    ActiveSheet.Paste
    Range("A2").Select
    Windows("Suivi dys6.xls").Activate
    ActiveWindow.Close
    '
    '7ième Tableau
    Workbooks.Open Filename:= _
        "C:\Documents and Settings\Bureau\QUALITE\Suivi dys7.xls"
    Range("A2:AK15").Select
    Selection.Copy
    Application.WindowState = xlMinimized
    Windows("ETATS.xls").Activate
    Sheets("Tab7").Select
    Range("A1").Select
    ActiveSheet.Paste
    Range("A2").Select
    Windows("Suivi dys7.xls").Activate
    ActiveWindow.Close
    Sheets("ETATS").Select
    Range("G5").Select
   
      
MsgBox "Traitement Abandonné"


  End If
End Sub
Messages postés
2065
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
14 mars 2016
8
Jack a parfaitement raison. Pourquoi faire une macro quand Excel fait déjà très bien ce que tu veux ?
... à moins aimer s'enmerder...

Pour consolider les tableaux "Suivi dys1.xls", "Suivi dys2.xls", etc... dans le fichier unique "ETATS" avec les onglets "Tab1", "Tab2" , etc ... qui doivent être respectivement la copie actualisée des "suivi dys1.xls", etc... suit les étapes suivantes :

1. Ouvre tout les tableaux : Etats, suivi dys1, suivi dys2, etc...
2. Dans Etats onglet Tab1 cellule A1, tape la formule : "=" et passe dans le fichier "Suivi dys1" avec le menu Fenêtre>Suivi Dys1.xls
3. Sélectionne la première case (A1)
4. Puis ENTER... Donc tu obtients dans le fichier ETATS, la formule copiant la case A1 de "Suivi Dys1"... En principe tu vois : "=[Suivi dys1.xls]Feuil1!$A$1"
5. A cette formule, retire les références absolues (sans $), soit : "=[Suivi dys1.xls]Feuil1!A1
6. Copie cette cellule, et recopie la dans la plage que tu désire (ici A2:AK39).


7. Tu obtients alors la recopie dans "Tab1" de "Etats.xls" de "feuil1" de "Suivi dys1.xls"


8. Tu fais la même chose, pour les autres fichiers...


9. enregistre "Etats".


THE END.


Maintenant, ferme tous les fichiers... Si tu ouvre de nouveau ETATS, le fichier ira chercher dans les autres fichiers (non ouverts en passant) les données...


Si les données sont des cases vides, tu verra zéro "0" s'afficher... Si cela te gêne tu peux utiliser compéter les formules de recopie avec la fonction "SI"

Us.