Aide VBA / Plage variable
Bonjour à tous,
j´ai besoin de votre expertise pour un petit probleme VBA :
Sub Macro1()
Dim cellule As Range
Dim maref As String
Dim col As Integer
Dim lig As Integer
Dim x As Integer
maref = "D1 Z-Dir ±0,1mm 1-100Hz Fvz-850N Fvx1500N"
Set cellule = Worksheets("Sheet1").Cells.Find(maref, LookIn:=xlValues, SearchOrder:=xlByRows, MatchCase:=False)
col = cellule.Column
lig = cellule.Row
x = lig + 6
Range("E118:E" & Range("E118").End(xlDown).Row).Select
End Sub
Ce code fonctionne bien et selectionne la plage de données qui m´interesse, seulement j aimerai remplacer le E118 de mon avant derniere ligne par la variable X ( ce qui donnerai Ex ou colx comme desigantion de cellule)
Pouvez vous m aider
ps : j ai mis x = lig +6 parceque la premiere ligne que je souhaite selectionner est 6 ligne est dessous de la cellule variable que je cherche dans ma ligne Set cellule
merci par avance
Jules
Bonjour Jules, bonjour le forum,
Si maref n'est pas trouvée tu vas droit au plantage !... Si tu n'es pas absoluement sur que la référence existe, rajoute ces quelques lignes :
Set cellule = Worksheets("Sheet1").Cells.Find(maref, LookIn:=xlValues, SearchOrder:=xlByRows, MatchCase:=False)
If cellule is nothing then
MsgBox "Référence non trouvée !"
exit Sub
end if
col = cellule.Column
lig = cellule.Row
x = lig + 6
Sinon pour répondre a ta question :
Range(Cells(x, "E"), Cells(x, "E").End(xlDown)).Select
Super cette partie fonctionne merci beaucoup à toi,
ce qui m´amène à ma question suivante :
j ai essayé de l´incrémenter dans une boucle que j ai fais et qui fonctionnne avec des données fixes mais qui ici ne semble pas marcher.
Sub D1Test()
End Sub
Du coup ma question se porte sur les deux lignes en gras, le premiere est la nouvelle ecriture de la question precedente que j ai testée et qui fonctionne toute seule (selectionne bien la partie que je voulais) mais pas dans cette boucle et la seconde c est la forme qui fonctionne mais que pour les données fixes.
Ps : le but de toute cette boucle est d aller chercher dans un dossier un certain nombre d excel dans lesquels j extrait uniquement les datas que je veux, cette macro fonctionne très bien mais n est pas du tout generic.
Ps2: merci de m´avoir répondu si rapidement
Bonjour,
Salut ThauThème
Deux remarques :
1. Pour la lisibilté de ton code ... les balises ' Code ' sont ... très très utiles ...
Sub D1Test()
Application.ScreenUpdating = False
Dim StrFile As String
Dim Folder As String
Dim i As Integer
Dim cellule As Range
Dim maref As String
Dim col As Integer
Dim lig As Integer
Dim x As Integer
Folder = "C:\Temp\"
With Application.FileDialog(msoFileDialogFolderPicker)
.InitialFileName = Folder
.Title = "order selection"
.ButtonName = "choice..."
.InitialView = msoFileDialogViewList
If .Show = -1 Then
Folder = .SelectedItems(1)
If Right(Folder, 1) <> "\" Then Folder = Folder & "\"
Else
MsgBox "no files selected!"
Exit Sub
End If
End With
i = 4
StrFile = Dir(Folder & "*.xlsx")
Do While Len(StrFile) > 0
Workbooks.Open (Folder & StrFile)
maref = "D1 Z-Dir ±0,3mm 1-30Hz Fvz-850N"
Set cellule = Workbooks(StrFile).Worksheets(1).Cells.Find(maref, LookIn:=xlValues, SearchOrder:=xlByRows, MatchCase:=False)
If cellule Is Nothing Then
MsgBox "Ref not found !"
Exit Sub
End If
col = cellule.Column
lig = cellule.Row
x = lig + 6
Workbooks(StrFile).Worksheets(1).Range("D" & x & ":E" & Range("D" & x).End(xlDown).Row).Copy Destination:=ThisWorkbook.Worksheets(7).Range(i & "9")
Workbooks(StrFile).Worksheets(1).Columns("W").Rows("10:45").Copy Destination:=ThisWorkbook.Worksheets(7).Columns(i + 1).Rows("9")
i = i + 2
Workbooks(StrFile).Close
StrFile = Dir
Loop
Application.ScreenUpdating = True
End Sub
2. Tu parles d'incrémentation ... de quelle variable s'agit-il ...?
Enfaite j´ai fini par trouver j ai juste changé le format de la partie de droite :
Workbooks(StrFile).Worksheets(1).Range("D" & x & ":D" & Range("D" & x).End(xlDown).Row).Copy Destination:=ThisWorkbook.Worksheets(1).Cells(9, i)
Workbooks(StrFile).Worksheets(1).Range("W" & x & ":W" & Range("W" & x).End(xlDown).Row).Copy Destination:=ThisWorkbook.Worksheets(1).Cells(9, i + 1)
Merci pour ton aide
Bonne journée
Jules
Salut,
Merci pour l´idée des balises, c est vrai que ce sera beaucoup plus clair.
Sinon pour l´incrémentation je me suis mal exprimer, je voulais juste dire ajouter cette partie dans ma boucle.
Merci à vous en tout cas, réponse super rapide ça fait plaisir
Re, Salut James,
Ouais.... Parce que Range(i & "9"), c'était franchement louche...