1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
| Sub CopierDonnees()
Dim Entree As Workbook, Sortie As Workbook
Dim nomfeuille As String
Dim monclasseur As String
Dim ii As Integer
Dim i As Integer
'On ouvre un fichier de données a transformer+copier
NomFichierEntree = Application.GetOpenFilename("Fichier Csv (*.csv), *.csv")
' On verifie que l'on a selectionné un nom de classeur
If NomFichierEntree <> False Then
' On ouvre le classeur
Set Entree = Workbooks.Open(NomFichierEntree)
nomfeuille = ActiveSheet.Name
' On met en forme le fichier csv avec comme séparateur le ;
Columns("A:A").Select
Selection.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
Semicolon:=True, Comma:=False, Space:=False, Other:=False, FieldInfo _
:=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), _
Array(7, 1), Array(8, 1), Array(9, 1), Array(10, 1)), TrailingMinusNumbers:=True
i = 16
ii = 16
Do While Not (IsEmpty(ActiveSheet.Cells(ii, 4)))
' Inscrit la formule qui selectionne uniquement une valeur toute les 50 lignes dans la cellule ayant pour référence
' la ligne active et la colonne 4 (colonne E)
ActiveSheet.Cells(i, 13).Formula = "=OFFSET(R16C3,(ROW()-16)*50,0)"
' Passe à la ligne suivante
i = i + 1
ii = ii + 50
Loop
i = 16
ii = 16
Do While Not (IsEmpty(ActiveSheet.Cells(ii, 5)))
' Inscrit la formule qui selectionne uniquement une valeur toute les 50 lignes dans la cellule ayant pour référence
' la ligne active et la colonne 5 (colonne E)
ActiveSheet.Cells(i, 14).Formula = "=OFFSET(R16C3,(ROW()-16)*50,0)"
' Passe à la ligne suivante
i = i + 1
ii = ii + 50
Loop
' On soustrait 1 a i pour ne pas prendre en compte la derniere ligne des valeurs car elle peut être égal a zéro
i = i - 1
iii = 3
' On selectionne nos deux colonnes avec les valeurs générées par les formules
Range("M16:N" & i).Select
Selection.Copy
' On ouvre le classeur de destination
NomFichierSortie = Application.GetOpenFilename("Fichier Excel (*.xls;*.xlsx), *.xsl;*.xslx")
If NomFichierSortie <> False Then
Set Sortie = Workbooks.Open(NomFichierSortie)
'On vérifie que la cellule de destination est vide, si ce n'est pas le cas, on décale les données 4 colonnes plus loin
Do While Not (IsEmpty(ActiveSheet.Cells(10, iii)))
iii = iii + 4
Loop
ICI COMMENCE LE PROBLEME
' If ActiveCell.Offset(10, iii).Value <> 0 Then iii = iii + 4
' On copie les valeurs sans les formules dans la feuille active du document
ActiveCell.Offset(iii, 10).Range("A1").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
ActiveWorkbook.Save
' On ferme le fichier de destination - a confirmer
' Sortie.Close
End If
' On ferme le fichier d'origine
Entree.Close False
End If
End Sub |
Partager