Private Sub CommandButton1_Click()
Dim FL1 As Worksheet
Dim FL2 As Worksheet
Dim Plage As Range
Dim NoCol As Integer
'afin d'e pouvoir travailler sur les objets feuil1 et feuil2 on en crée les instances
Set FL1 = Worksheets("Feuil1")
Set FL2 = Worksheets("Feuil2")
'pour obtenir la colonne Month du premier mois vide-> Appel de la fonction
NoCol = NoColonne(FL1) 'et on récupère NoCol
'pour travailler sur l'objet Plage (à copier) on en crée l'instance
Set Plage = FL1.Range(Cells(4, NoCol - 3).Address & ":" & Cells(11, NoCol - 1).Address)
'NoCol (vide) - 3 car le mois renseigné se trouve 3 colonnes avant
'et NoCol - 1 car la plage couvre 3 cellules NoCol-1, -2 et -3
Plage.Copy
'Collage des seules valeurs sans les formules
FL2.Cells(6, 2).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone
'suppression des instances pour libérer l'espace mémoire
Set FL1 = Nothing
Set FL2 = Nothing
Set Plage = Nothing
End Sub
Function NoColonne(FL1)
Dim c As Range, ok As Boolean, Adres
'Plage de recherche ligne 2, de la colonne A à la dernière cellule renseignée
With FL1.Range("A2:" & FL1.Cells(1, FL1.Range("IV2").End(xlToLeft).Column).Address)
'Si la recherche aboutit, c sera l'objet de la cellule où "Month" aura été trouvé
Set c = .Find("Month", LookIn:=xlValues, Lookat:=xlPart, SearchDirection:=xlNext)
If Not c Is Nothing Then 'si c n'est pas vide, Month a été trouvé
Adres = c.Column
'comme on cherche le dernier "Month", on poursuit donc la recherche jusqu'au dernier
Do
'on vérifie que la colonne contenant Month est bien vide sous la ligne qui le contient
ok = FL1.Cells(65536, c.Column).End(xlUp).Row = 2 And InStr(FL1.Cells(2, c.Column).Value, "Month") <> 0
If ok Then 'si la colonne est vide, on est sur le dernier Month
'on mémorise donc le N° de colonne de l'objet c (la cellule)
NoColonne = c.Column 'Nom de la fonction = N° de colonne
'et on quitte la fonction
Exit Function
End If
Set c = .FindNext(c)
'La boucle se poursuit tant que c n'est pas vide...
'... et que la recherche n'a pas repris depuis la première colonne trouvée (colonne Adres)
Loop While Not c Is Nothing And c.Column > Adres
End If
End With
'Si on sort ici, Month n'a pas été trouvé...
End Function