Aide debutant formule VBA
Bonjour a tous!
quelqu'un un pourrai m'aider j aimerai extraire la somme d'une colonne du fichier et cela pour les 68 fichier du dossier l idée c est d avoir dans un fichier excel la somme de cette colonne pour les 68 fichier et ne pas ouvrir les 68 fichier et faire la somme en glissant sa souris puis la retranscrire ce serai un gain de temps.
merci a vous
Bonjour Dixe,
Je ne suis pas expert sur ce forum, par contre, je peux déjà essayer de comprendre ton besoin
* Tu as donc 68 fichiers Excel (en .xls) => Sont-ils classés sous un même dossier ?
* Tu souhaites dans un fichier Excel "cible", lire automatiquement une valeur de somme de ces 68 fichiers Excel "source" sans ouvrir un par un ces dit fichiers
* La somme totale serait donc calculée dans le fichier "cible"
C'est ca ?
Essayes ca :
Faudra prévoir un bouton de Macro sur ton fichier "cible" et y affecter la macro 'Copier_SOMMES"
A adapter selon ton besoin
'*******************************************************
'A VERIFIER AVANT UTILISATION ou MODIFICATION DE LA MACRO
'*******************************************************
'Ouvrir le Visual Basic Editor (VBE) avec "Alt + F11" => Puis dans Outils / Référence
' Vérifier et Cocher les cases ci-dessous :
'Microsoft Outlook 16.0 Object Library
'Microsoft Excel 16.0 Object Library
'Microsoft Office 16.0 Object Library
'Microsoft Word 16.0 Object Library
'Microsoft PowerPoint 16.0 Object Library
'********************************************************
Option Explicit
Private Sub EXTRACT_SOMME(psOnglet As String, piLigDeb As Integer, piLigFin As Integer)
End Sub
Dim oSh As Worksheet
Dim iLig As Integer
Set oSh = Worksheets(psOnglet)
Application.ScreenUpdating = False
For iLig = piLigDeb To piLigFin
If oSh.Range("A" & iLig).Value = "" Then
Sub Copier_SOMMES()
Dim BoEcran As Boolean, BoBarre As Boolean, BoEvent As Boolean, BoSaut As Boolean 'ici ca évitera de voir tes 68 ou 80 fichiers s'ouvrir
Dim iCalcul As Integer
'on conserve d'abord les informations existantes
BoEcran = Application.ScreenUpdating
BoBarre = Application.DisplayStatusBar
iCalcul = Application.Calculation
BoEvent = Application.EnableEvents
BoSaut = ActiveSheet.DisplayPageBreaks
'On force les configurations
Application.ScreenUpdating = False
Application.DisplayStatusBar = False
Application.Calculation = xlManual
Application.EnableEvents = False
ActiveSheet.DisplayPageBreaks = False
Range("A2:A80").Select 'selection du tableau "zone de données cible" pour recevoir les sommes des 68 fichiers (80 cases sont prévues)
Selection.ClearContents 'effacement des données des 68 fichiers initiales (remise à zéro du fichier cible)
ligne = 2 'en "A1" tu pourrais avoir la somme de tout ce qu'il y aura en dessous et à partir de "A2" les extractions vont s'inscrire
Set ws = ThisWorkbook.ActiveSheet
Chemin = "\\chemin complet ou sont stocké les 68 fichiers source\" 'ne pas oublié le \ en fin du chemin
Fichier = Dir(Chemin & "*.xls") 'Premier fichier en .xls
Do While Fichier <> ""
Set wb = Workbooks.Open(Filename:=Chemin & Fichier)
Set wss = wb.Sheets("Onglet fichier source") 'selection de l'onglet à copier, si le nom de l'onglet est le meme sur les 68 fichiers
dl = wss.Cells(Rows.Count, 1).End(xlUp).Row 'selection jusqu'a cellule non vide
wss.Range("$A$3" & dl).Copy ws.Cells(ligne, 1) 'copier la cellules ou la somme se trouve sur tes fichiers, si toujours au meme endroit, ici par exemple elle est en "A3"
wb.Close False 'fermer le fichier
Application.CutCopyMode = False
ligne = ws.Cells(Rows.Count, 1).End(xlUp).Row + 1 'dernière cellule non vide +1
Fichier = Dir ' Fichier suivant
Loop
'Le code est défini ici avant d'arriver à la fin ou les configurations sont restaurées
Application.ScreenUpdating = BoEcran
Application.DisplayStatusBar = BoBarre
Application.Calculation = iCalcul
Application.EnableEvents = BoEvent
ActiveSheet.DisplayPageBreaks = BoSaut
End Sub
*********************************************
Je n'ai pas vérifié mais ca ne devrait pas être si mal
Hello
Un grand merci a vous pour votre réactivité vous êtes top !
Ca a marché ?
Si oui, tu peux passer ce sujet en "clos"