Ouvrir un fichier, extraire des données, les coller, faire tourner des formules

Fermé
amelise Messages postés 52 Date d'inscription jeudi 6 mai 2010 Statut Membre Dernière intervention 11 novembre 2022 - Modifié le 6 nov. 2020 à 14:57
yg_be Messages postés 23416 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 3 janvier 2025 - 6 nov. 2020 à 15:59
Bonjour,


Je débute sur VBA. Je cherche à faire un code:
- qui m'ouvre un fichier (dont le nom changera tous les mois) dans un dossier nommé "Excel"
- me sélectionne les données à partir de la cellule A2 jusqu'à la colonne U et qui me prenne toutes les lignes (le nombre de lignes changera tous les mois)
- me les colle dans un autre fichier (disons le fichier B), à partir de la dernière cellule vide dans la colonne G (ex: j'ai des données jusqu'à G1545, et les nouvelles données doivent se coller en dessus en G1546 jusqu'en AA)
- puis referme le classeur dont le nom changera tous les mois
- ensuite j'aurai besoin de tirer les formules dans les colonnes de A à F et de AB à AE.

C'est fini.

Je me suis entraînée à écrire ce code qui n'est pas adapté à tout cela car je voulais commencer par tout décomposer pour comprendre (il ne marche même pas) mais puisque je poste sur ce forum, autant écrire tout ce que je souhaite faire.

Merci pour votre aide!
Cordialement



Sub Test()
'
' Test Macro

'Déclaration des variables

Dim nom_fichier As String
Dim Wbkdata As Workbook

Application.DisplayAlerts = False
Application.ScreenUpdating = False

ChDir "C:\Users\Monsi\Desktop\excel"

nom_fichier = Application.GetOpenFilename("fichiers Excel(*.),*.")

'Initialisation de la variable WbkData
Set Wbkdata = Workbooks.Open(nom_fichier)
ThisWorkbook.Activate
Range("G38745").Select

'Récupération des données dans l'autre feuille

Wbkdata.Activate
Sheets("Feuil1").Select
Range("A2:U1717").Select
Selection.Copy

Windows("TEST.xlsm").Activate
Range("G38745").Select

'fermeture du classeur d'où les données ont été extraites
Wbkdata.Close

Application.DisplayAlerts = True
Application.ScreenUpdating = True



End Sub
A voir également:

1 réponse

yg_be Messages postés 23416 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 3 janvier 2025 Ambassadeur 1 557
6 nov. 2020 à 14:51
bonjour,
peux-tu utiliser les balises de code (VBA est du basic) quand tu partages du code: https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code

Tu n'écris pas ce que tu attends de nous.

As-tu examiné les réponses à des questions très similaires posées ici?
0
yg_be Messages postés 23416 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 3 janvier 2025 1 557
6 nov. 2020 à 15:10
je ferais plutôt ainsi:
Option Explicit

Sub Test()
'
' Test Macro

'Déclaration des variables

Dim nom_fichier As String, Wbkdata As Workbook, source As Range, destination As Range

Application.DisplayAlerts = False
Application.ScreenUpdating = False

ChDir "C:\Users\Monsi\Desktop\excel"
nom_fichier = Application.GetOpenFilename("fichiers Excel(*.),*.")

'Initialisation de la variable WbkData
Set Wbkdata = Workbooks.Open(nom_fichier)

'Récupération des données dans l'autre feuille

Set source = Wbkdata.Sheets("Feuil1").Range("A2:U1717")
Set destination = ThisWorkbook.Sheets("??").Range("G38745")
Set destination = destination.Resize(source.Rows.Count, source.Columns.Count)

source.Copy destination

'fermeture du classeur d'où les données ont été extraites
Wbkdata.Close

Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
0
yg_be Messages postés 23416 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 3 janvier 2025 1 557 > yg_be Messages postés 23416 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 3 janvier 2025
6 nov. 2020 à 15:59
ou ainsi, si tu veux copier en dessous de la dernière valeur présente en colonne G:
Option Explicit

Sub Test()
'
' Test Macro

'Déclaration des variables

Dim nom_fichier As String, Wbkdata As Workbook, source As Range, destination As Range
Dim fdest As Worksheet, ligvid As Long

Application.DisplayAlerts = False
Application.ScreenUpdating = False

ChDir "C:\Users\Monsi\Desktop\excel"
nom_fichier = Application.GetOpenFilename("fichiers Excel(*.),*.")

'Initialisation de la variable WbkData
Set Wbkdata = Workbooks.Open(nom_fichier)

'Récupération des données dans l'autre feuille

Set source = Wbkdata.Sheets("Feuil1").Range("A2:U1717")
Set fdest = ThisWorkbook.Sheets("??")
ligvid = fdest.UsedRange.Row + fdest.UsedRange.Rows.Count
Set destination = fdest.Cells(ligvid, "g").End(xlUp).Offset(1)
Set destination = destination.Resize(source.Rows.Count, source.Columns.Count)

source.Copy destination

'fermeture du classeur d'où les données ont été extraites
Wbkdata.Close

Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
1