Modifier Macro zone d'action
Bonjour tout le monde
j'aimerais un petit coup de pouce pour ma macro.
Ma macro a pour but d'ouvrir une fenetre, qui me permet de choisir un fichier CSV, qui ensuite alimente un tableau dans mon classeur.
La macro repère la lettre qui équivaut à une ligne, et le numéro de colonne. Puis elle copie les 3 données du fichiers CSV : Nom Désignation et Couleur. Les autres cellules vident sont remplies par WAIT du moins pour le nom et la désignation.
Dans mon fichier de test, mon tableau commencait en A1. Tout fonctionnait bien.
Mais mon tableau réel commence a A9 (voir fichier joint)
comment adapter ma macro pour qu'elle débute en A9 ?
mon tableau complet va de A9 à N32 (soit 12 colonnes)
il faudrait que ma macro s'arrete en N32.
ma macro consiste à insérer un fichier CSV qui alimente un tableau
et elle affiche WAIT dans les cellules vides (les 2 premiers de chaque) cela fonctionne parfaitement.
Je bloque juste sur l'ajustement à un tableau placé autrement.
Sub ImprotCSV()
Dim table() As String
Dim lig As Integer
Dim cl As Range
Dim off1 As Integer
Dim off2 As Integer
With Application.FileDialog(msoFileDialogFilePicker)
.InitialFileName = "C:\"
.Show
If .SelectedItems.Count > 0 Then Workbooks.Open (.SelectedItems(1))
End With
With ActiveWorkbook.Worksheets(1)
lig = .Columns(1).Find("*", , , , xlByColumns, xlPrevious).Row
ReDim table(1 To 5, 1 To lig)
For i = 0 To lig - 1
Set cl = .Range("A1").Offset(i, 0)
off1 = InStr(cl.Value, ";")
table(1, i + 1) = Left(cl.Value, off1 - 1)
For j = 2 To 4
off2 = InStr(off1 + 1, cl.Value, ";")
table(j, i + 1) = Mid(cl.Value, off1 + 1, off2 - off1 - 1)
off1 = off2
Next j
table(5, i + 1) = Right(cl.Value, Len(cl.Value) - off1)
Next i
End With
ActiveWorkbook.Close
With Worksheets("Data")
For i = 1 To lig
Set cl = .Cells(.Columns(1).Find(table(1, i), LookIn:=xlFormulas, lookat:=xlWhole).Row - 1, .Rows(1).Find(table(2, i), LookIn:=xlFormulas, lookat:=xlWhole).Column)
For j = 0 To 2
cl.Offset(j, 0) = table(3 + j, i)
Next j
Next i
Set cl = .Cells(.Columns(1).Find("A", LookIn:=xlFormulas, lookat:=xlWhole).Row - 1, .Rows(1).Find(1, LookIn:=xlFormulas, lookat:=xlWhole).Column)
For i = 0 To .Rows(1).Find("*", , , , xlByColumns, xlPrevious).Columns - 1
For j = 0 To .Columns(1).Find("*", , , , xlByColumns, xlPrevious).Row - 1
If j + 1 <> 3 * Int((j + 1) / 3) Then
If cl.Offset(j, i) = "" Then
cl.Offset(j, i) = "WAIT"
End If
End If
Next j
Next i
End With
End Sub
Merci d'avance à qui voudra bien m'aider
Bonjour frangy,
cela marche parfaitement. Merci beaucoup