Je commence juste à plonger dans VBA et j'ai frappé un peu de barrage routier.
J'ai une feuille avec plus de 50 colonnes, plus de 900 rangées de données. J'ai besoin de reformater environ 10 de ces colonnes et de les coller dans un nouveau classeur.
Comment sélectionnez-je par programme chaque cellule non vide dans une colonne de Book1, exécutez-la dans certaines fonctions et déposez les résultats dans Book2?
Le code VBA suivant devrait vous aider à démarrer. Il copiera toutes les données dans le classeur d'origine dans un nouveau classeur, mais il aura ajouté 1 à chaque valeur, et toutes les cellules vides auront été ignorées.
Option Explicit
Public Sub exportDataToNewBook()
Dim rowIndex As Integer
Dim colIndex As Integer
Dim dataRange As Range
Dim thisBook As Workbook
Dim newBook As Workbook
Dim newRow As Integer
Dim temp
'// set your data range here
Set dataRange = Sheet1.Range("A1:B100")
'// create a new workbook
Set newBook = Excel.Workbooks.Add
'// loop through the data in book1, one column at a time
For colIndex = 1 To dataRange.Columns.Count
newRow = 0
For rowIndex = 1 To dataRange.Rows.Count
With dataRange.Cells(rowIndex, colIndex)
'// ignore empty cells
If .value <> "" Then
newRow = newRow + 1
temp = doSomethingWith(.value)
newBook.ActiveSheet.Cells(newRow, colIndex).value = temp
End If
End With
Next rowIndex
Next colIndex
End Sub
Private Function doSomethingWith(aValue)
'// This is where you would compute a different value
'// for use in the new workbook
'// In this example, I simply add one to it.
aValue = aValue + 1
doSomethingWith = aValue
End Function
Si vous recherchez la dernière ligne d'une colonne, utilisez:
Sub SelectFirstColumn()
SelectEntireColumn (1)
End Sub
Sub SelectSecondColumn()
SelectEntireColumn (2)
End Sub
Sub SelectEntireColumn(columnNumber)
Dim LastRow
Sheets("sheet1").Select
LastRow = ActiveSheet.Columns(columnNumber).SpecialCells(xlLastCell).Row
ActiveSheet.Range(Cells(1, columnNumber), Cells(LastRow, columnNumber)).Select
End Sub
D'autres commandes dont vous devrez vous familiariser des commandes de copie et de coller:
Sub CopyOneToTwo()
SelectEntireColumn (1)
Selection.Copy
Sheets("sheet1").Select
ActiveSheet.Range("B1").PasteSpecial Paste:=xlPasteValues
End Sub
Enfin, vous pouvez faire référence à des feuilles de calcul dans d'autres classeurs en utilisant la syntaxe suivante:
Dim book2
Set book2 = Workbooks.Open("C:\book2.xls")
book2.Worksheets("sheet1")