Compilation de données de plusieurs classeur excel vers un seul

Résolu/Fermé
med_mugen Messages postés 80 Date d'inscription lundi 15 juin 2015 Statut Membre Dernière intervention 8 juin 2016 - 25 janv. 2016 à 17:42
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 - 27 janv. 2016 à 08:17
Bonsoir toute communauté,

Je reviens vers vous afin que quelqu'un puisse me fournir une petite correction à ma macro pour que celle-ci puisse fonctionner.

Il s'agit d'une macro plutôt simple dans l'esprit ; dans un fichier déterminé (chemin déterminé par la macro) il existe plusieurs classeur excel au format de nom identique et dont la constitution (contenu) est également identique. Dans un autre fichier existe un classeur excel qui consolidera tous les autres.

Le but étant d'aller chercher les données d'un tableau d'une feuille contenue dans chaque classeur excel (nom de feuille est identique, format du tableau identique) et de compiler ces données à la suite dans un tableau du classeur consolidation (tableau toujours au même format).

voilà mon code
 

[/contents/446-fichier-sub Sub] Compilation()
 
Dim Fichier As String
Dim Chemin As String
Dim ClasseurSource As Workbook
Dim valeur1 As String
Dim MonTableau As Variant
 
Application.DisplayAlerts = False 'Evite les messages d'Excel
Application.EnableEvents = False 'Evite l'exécution éventuelle de macros liées aux fichiers ouverts

valeur1 = Sheets("Base").Range("D2").Value
Chemin = "J:\Rom France\France\WPP\" & valeur1 'Chemin du répertoire contenant les fichiers
Fichier = Dir(Chemin & "*.xls*")
 
Do While Fichier <> ""
    Set ClasseurSource = Workbooks.Open(Chemin & Fichier)
    MonTableau = ClasseurSource.Worksheets("Masterfile-valeurs").Range("Tableau5")
    
    ThisWorkbook.Worksheets("Base").Range ("Conso")
    derlig = Cells.Find("*", , , , xlByRows, xlPrevious).Row

 Range("derlig+1") = MonTableau
 
 ClasseurSource.Close
 Fichier = Dir
Loop
 
Application.EnableEvents = True
Application.DisplayAlerts = True
 
End Sub



J'ai pour ce faire essayé d'utiliser des fonctions déjà présente dans mes classeurs et tenté d'obtenir le bon algorithme. Malheureusement, je pense que ma formule coince à partir de thisworkbook.worksheets("base")

Si une âme charitable pouvait m'éclairer ma lanterne pour continuer d'avancer, je lui en serai reconnaissant ^^.

Par avance merci pour votre contribution et votre disponibilité à tous et à toutes
A voir également:

1 réponse

michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
Modifié par michel_m le 26/01/2016 à 08:44
bonjour

essaies
With ThisWorkbook.Worksheets("Base").Range ("Conso")
derlig = Cells.Find(what:="*",searchdirection:= xlPrevious).Row

.Range(derlig+1) = MonTableau 'MANQUE LA COLONNE
End with

petit +
displayalerts à éviter

petite macro de dépannage évitant des sueurs froides
sub SOS_events()
'permet de rétablir les macros en cas de sortie accidentelle d'un code, enableevents étant désactivé
Application.EnableEvents = True
end sub

 Michel
0
med_mugen Messages postés 80 Date d'inscription lundi 15 juin 2015 Statut Membre Dernière intervention 8 juin 2016
26 janv. 2016 à 11:13
Bonjour Michel,

Tout d'abord merci d'avoir répondu à ma requête. Mais c 'est bizarre que je n'ai pas reçu d'alerte sur ma boite mail m'annonçant que quelqu'un avait répondu ?
0
med_mugen Messages postés 80 Date d'inscription lundi 15 juin 2015 Statut Membre Dernière intervention 8 juin 2016
Modifié par med_mugen le 26/01/2016 à 11:41
.Range(derlig+1) = MonTableau  'MANQUE LA COLONNE
End with
.

il s'agit de la première colonne du tableau, du coup dois simplement écrire
.Range(derlig+1, 1) ?

</j'ai essayé .range(derlig+1, numcolonn("A1")


Aussi derniere question,

sub SOS_events()
'permet de rétablir les macros en cas de sortie accidentelle d'un code, enableevents étant désactivé
Application.EnableEvents = True
end sub


je dois placer cette macro avant sub compilation n'est ce pas ?
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303 > med_mugen Messages postés 80 Date d'inscription lundi 15 juin 2015 Statut Membre Dernière intervention 8 juin 2016
26 janv. 2016 à 11:40
.cells(derlig+1,1).
ou
.range("A" & derlig+1)
0
med_mugen Messages postés 80 Date d'inscription lundi 15 juin 2015 Statut Membre Dernière intervention 8 juin 2016
26 janv. 2016 à 12:19
j vais essayer de vous envoyer un exemple dans quelques minutes car je n'arrive pas à comprendre pourquoi la macro ne s'enclenche pas, il n'y a même pas de msg d'erreur..
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303 > med_mugen Messages postés 80 Date d'inscription lundi 15 juin 2015 Statut Membre Dernière intervention 8 juin 2016
26 janv. 2016 à 12:38
utilise la macro SOS_events que je t'ai donné (et j'y ai insérer un commentaire qui explique son utilité) :-(

c'est une routine qu'il prudent de copier dans un module chaque fois que tu écris un code avec
application.enableevents=false
0