Copie de données et mise en page
Bonjour,
Je dois dans le cadre de mon travail, mettre à jour des données dans une base via un fichier au format .txt.
Mais je reçois les données dans un fichier excell avec une mise en page prévu pour impression.
Du coup dans le fichier que je reçois les données (volume, hauteur) se suivent par colonnes : A-B,C-D,E-F,G-H page1 , la suite sera sur la page 2 après la mise en page et de nouveau A-B....
Selon les bacs les données trés nombreuses. Par fichier, j'ai normalement 2 feuilles de calcul à traiter, une pour le baremage et une pour le fond de bac
j'arrive à copier les feuilles depuis le fichier source vers mon fichier mais en créant des nouvelles feuilles je n'arrive pas à écrire dedans
mais surtout je ne fais que de la copie brute, je ne sais pas comment supprimer la mise en page et copier les données sur seulement deux colonnes hauteur et volume sans titre ni présentation
Pour le moment j'ai une première feuille avec ca :
NOM du fichier Barème Bacxxx.xls
adresse fichier C:xxx\
table Barème
table 2 TableFond
8 debut données page 1
72 debut données page 2
136 debut données page 3
200 debut données page 4
264 debut données page 5
328 debut données page 6
392 debut données page 7
456 debut données page 8
520 debut données page 9
lignes 52 lignes de données par pages (colonnes) : ex si colonne A en 1 le suite sera colonne C en 53, colonne E en 105 et colonne G en 157
colonnes 4 nombres de paires de colonnes de donnée
voici ma macro actuelle :
Sub Baremage()
Dim wkA As Workbook, wkB As Workbook
Dim chemin As String, fichier As String, barémage As String, TableFond As String
'classeur A qui contient la macro
Set wkA = ThisWorkbook
'chemin ou se trouve le fichier B
chemin = Cells(3, 2)
'chemin table baremage
barémage = Cells(4, 2)
'chemin Table de fond
TableFond = Cells(5, 2)
'nom du fichier B
fichier = Cells(1, 2)
'ouvre le fichier B
Workbooks.Open chemin & fichier
'met en variable le classeur B
Set wkB = ActiveWorkbook
'copie les feuilles du classeur B dans le classeur A
wkB.Sheets(barémage).Copy before:=wkA.Sheets(barémage)
wkB.Sheets(TableFond).Copy before:=wkA.Sheets(TableFond)
MsgBox ("La feuille est maintenant copiée") 'message pour dire que la feuille est copiée.
wkB.Close False 'ferme et n'enregistre pas le classeur B
End Sub
Je n'ai jamais créé de macro et je n'utilise jamais vba, donc j'ai du mal imaginer le déroulement de ma macro.
au final je voudrais importer les données de la feuille Bareme de la source vers la feuille Bareme de mon fichier en le remettant sur seulement deux colonnes
j'arrive à peu pres à ecrire ma sequence langage automatisme (graphcet) mais je n'arrive pas a convertir cela en VBA
Vous trouverez ci-joint un exemple (pas le meilleur car sur la source deux tables en une alors que normalement le c'est sur deux feuilles) et le fichier txt final
Jusqu'à présent je faisais tout à la main mais vue le nombre de bacs et le nombre de tables à mettre à jour l'automatisation me ferait gagner bcp de temps
Merci à tous par avance
Salut Justodge,
si j'ai bien compris...
La macro suivante ne reprend QUE les valeurs reprises sous rubriques HAUTEURS VOLUMES, à savoir 8 colonnes (complètes ou non) de 50 lignes qui se répètent X fois sur le document que tu récupères.
Pour repérer ces zones, je postule que 3 lignes avant, on trouvera TOUJOURS une cellule fusionnée contenant le mot BAREME.
Si tel ne devait pas être le cas, il conviendra de chercher un autre repère fixe et permanent, de document en document!
Private Sub cmdGO_Click()
'
Dim tTabO, tTabF()
iRow = Range("B" & Rows.Count).End(xlUp).Row
'
For x = 1 To iRow
If Range("B" & x).Value = "BAREME" Then
tTabO = Range("B" & x + 3 & ":I" & x + 53)
For y = 1 To 7 Step 2
For Z = 1 To UBound(tTabO, 1)
If tTabO(Z, y) <> "" Then
iIdx = iIdx + 1
ReDim Preserve tTabF(2, iIdx)
tTabF(0, iIdx - 1) = tTabO(Z, y)
tTabF(1, iIdx - 1) = tTabO(Z, y + 1)
End If
Next
Next
End If
Next
With Worksheets("Extract")
.UsedRange.ClearContents
.Range("A1:B" & iIdx) = WorksheetFunction.Transpose(tTabF)
.Activate
End With
'
End SubBon travail!
A+