Code VBA je plante
nireau
Messages postés
3
Statut
Membre
-
M-12 Messages postés 1349 Statut Membre -
M-12 Messages postés 1349 Statut Membre -
Bonjour.
je sèche sur un projet VBA(nuit et jours, tout mon congé y est passé).
J'aurais souhaité me targuer d'être passé du côté des pro Excel mais je démarre vraiment pas avec VBA.
J'ai un fichier qui doit faire la récap d'autres fichiers ayant une structure à l'identique exacte, seuls le nombre d'onglets peut varier d'un fichier à l'autre.
L'idée ici est de ne récupérer que les informations qui intéressent dans l'onglet "compil" du fichier récap.
le fichier récap n'a que 2 onglets "str.cts" et "compil".
"str.cts" me permet de générer manuellement certains éléments utilisés comme variable dans ma macro.
Voici ce que j'ai essayé de bidouiller après des heures de lecture et de visionnage de tutos:
L'idée est que si mon classeur source "str.cts" a n feuilles , que la macro me génère n lignes supplémentaires d'enregistrement sur la feuille compil, à partir de la dernière ligne non vide.
Le must serait qu'aaprès avoir renseigné les champs comme il faut, la marco ferme le classeur source, et verouille les derniers nregistrements contre toute modification hasardeuse.
je sèche sur un projet VBA(nuit et jours, tout mon congé y est passé).
J'aurais souhaité me targuer d'être passé du côté des pro Excel mais je démarre vraiment pas avec VBA.
J'ai un fichier qui doit faire la récap d'autres fichiers ayant une structure à l'identique exacte, seuls le nombre d'onglets peut varier d'un fichier à l'autre.
L'idée ici est de ne récupérer que les informations qui intéressent dans l'onglet "compil" du fichier récap.
le fichier récap n'a que 2 onglets "str.cts" et "compil".
"str.cts" me permet de générer manuellement certains éléments utilisés comme variable dans ma macro.
Voici ce que j'ai essayé de bidouiller après des heures de lecture et de visionnage de tutos:
Sub Synthese()
'Ouvrir fichiers concernés, déclarations des variables
Dim i As Integer
Dim j As Integer
Dim k As Long
Dim n As Integer
Dim Chemin As String
Dim Statut As String
Dim Nfchier As String
Dim Srce As Worksheet
Dim ShtCible As Worksheet
Dim Datasrce As Workbook
Dim Cible As Workbook
Set Srce = Worksheets("Str.Cts")
For i = 1 To 47
Chemin = Srce.Cells(i + 3, 3).Value
Statut = Srce.Cells(i + 3, 4).Value
Nfchier = Srce.Cells(i + 3, 2).Value
'Test pour savoir quel fichier ouvrir
If Chemin <> "" And Statut = "" Then<code basic>
Application.Workbooks.Open Chemin
End If
Next
'Le classeur actif devient celui qui vient d'être ouvert
'il faut compter le nombre feuilles et pour chacune alimenter la ligne
'correspondante dans la feuille compil du classeur récap
Set Cible = ThisWorkbook
Set ShtCible = Cible.Worksheets("Compil")
Dim ShtDatasrce As Worksheet
n = Datasrce.Sheets.Count
k = ShtCible.Cells(Rows.Count, "C").End(xlUp).Row + 1
For j = 1 To n
With ShtCible
Set ShtDatasrce = Datasrce.Worksheets(j)
ShtCible.Cells(k, "C") = ShtDatasrce.Name
ShtCible.Cells(k, "D") = ShtDatasrce.Cells(2, "A")
ShtCible.Cells(k, "F") = ShtDatasrce.Cells(4, "C")
ShtCible.Cells(k, "J") = ShtDatasrce.Cells(2, "C")
ShtCible.Cells(k, "K") = ShtDatasrce.Cells(2, "E")
ShtCible.Cells(k, "L") = ShtDatasrce.Cells(2, "G")
ShtCible.Cells(k, "N") = ShtDatasrce.Cells(2, "I")
ShtCible.Cells(k, "O") = ShtDatasrce.Cells(5, "I")
ShtCible.Cells(k, "P") = ShtDatasrce.Cells(6, "I")
ShtCible.Cells(k, "Q") = ShtDatasrce.Cells(7, "I")
ShtCible.Cells(k, "R") = ShtDatasrce.Cells(8, "I")
End With
Next
End Sub
L'idée est que si mon classeur source "str.cts" a n feuilles , que la macro me génère n lignes supplémentaires d'enregistrement sur la feuille compil, à partir de la dernière ligne non vide.
Le must serait qu'aaprès avoir renseigné les champs comme il faut, la marco ferme le classeur source, et verouille les derniers nregistrements contre toute modification hasardeuse.
A voir également:
- Code VBA je plante
- Code ascii - Guide
- Code puk bloqué - Guide
- Comment déverrouiller un téléphone quand on a oublié le code - Guide
- Code activation windows 10 - Guide
- Code blocks - Télécharger - Langages
5 réponses
Bonjour,
Sans être sur, à tester
Sans être sur, à tester
Sub Synthese()
'Ouvrir fichiers concernés, déclarations des variables
Dim i As Integer
Dim j As Integer
Dim k As Long
Dim n As Integer
Dim Chemin As String
Dim Statut As String
Dim Nfchier As String
Dim Srce As Worksheet
Dim ShtCible As Worksheet
Dim Datasrce As Workbook
Dim Cible As Workbook
Dim ShtDatasrce As Worksheet
Set Srce = Worksheets("Str.Cts")
For i = 1 To 47
Chemin = Srce.Cells(i + 3, 3).Value
Statut = Srce.Cells(i + 3, 4).Value
Nfchier = Srce.Cells(i + 3, 2).Value
'Test pour savoir quel fichier ouvrir
If Chemin <> "" And Statut = "" Then '<code basic>
Application.Workbooks.Open Chemin
'Le classeur actif devient celui qui vient d'être ouvert
'il faut compter le nombre feuilles et pour chacune alimenter la ligne
'correspondante dans la feuille compil du classeur récap
Set Cible = ThisWorkbook
Set ShtCible = Cible.Worksheets("Compil")
n = Datasrce.Sheets.Count
k = ShtCible.Cells(Rows.Count, "C").End(xlUp).Row + 1
For j = 1 To n
With ShtCible
Set ShtDatasrce = Datasrce.Worksheets(j)
ShtCible.Cells(k, "C") = ShtDatasrce.Name
ShtCible.Cells(k, "D") = ShtDatasrce.Cells(2, "A")
ShtCible.Cells(k, "F") = ShtDatasrce.Cells(4, "C")
ShtCible.Cells(k, "J") = ShtDatasrce.Cells(2, "C")
ShtCible.Cells(k, "K") = ShtDatasrce.Cells(2, "E")
ShtCible.Cells(k, "L") = ShtDatasrce.Cells(2, "G")
ShtCible.Cells(k, "N") = ShtDatasrce.Cells(2, "I")
ShtCible.Cells(k, "O") = ShtDatasrce.Cells(5, "I")
ShtCible.Cells(k, "P") = ShtDatasrce.Cells(6, "I")
ShtCible.Cells(k, "Q") = ShtDatasrce.Cells(7, "I")
ShtCible.Cells(k, "R") = ShtDatasrce.Cells(8, "I")
End With
k = k + 1
Set ShtDatasrce = Nothing
Next j
ThisWorkbook.Close
End If
Next i
End Sub
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Re,
Ah ben là, oui des lacunes
dans ce bout de code
Set Cible --> tu initialise le classeur avec la variable cible
n= --> tu initialise la variable n
idem pour k
for j=1 --> tu initialise j à 1 jusqu'à la variable n
comme ta variable Datasrce n'est pas initialise, le programme BUG
Ah ben là, oui des lacunes
dans ce bout de code
Set Cible = ThisWorkbook
Set ShtCible = Cible.Worksheets("Compil")
n = Datasrce.Sheets.Count
k = ShtCible.Cells(Rows.Count, "C").End(xlUp).Row + 1
For j = 1 To n
Set Cible --> tu initialise le classeur avec la variable cible
n= --> tu initialise la variable n
idem pour k
for j=1 --> tu initialise j à 1 jusqu'à la variable n
comme ta variable Datasrce n'est pas initialise, le programme BUG