Copier une formule avec Autofill 1ère celllule non vide jusqu'au niveau de la dernière cellule pleine d'une autre colonne

Bonjour à tous,

Je suis débutant en vba et n’ai pas trouvé la réponse sur le forum. J’espère que vous pourrez m’aider :slight_smile:
J’ai un fichier d’importation de données dans lequel j’effectue quelques retraitement directement dans le code VBA après importation des données.

Sauriez-vous comment remplir avec Autofill une colonne avec une formule de la première cellule vide jusqu’au niveau de la dernière cellule non vide d’une autre colonne ?

C’est à dire ici, copier de la première cellule vide en AB jusqu’à la ligne de la dernière cellule non vide de la colonne B (après importation de nouvelles données)

Le fichier est un fichier de suivi et le but est de pourvoir consolider plusieurs importations de données. Une autre macro appelle ensuite celle-ci puis copie en valeur toute la base pour alléger le fichier.

Voici le code qui ne fonctionne pas (seule la partie souligné la partie ne fonctionne pas) :

Sub ImportExtraction()
On Error GoTo err
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual

Dim lig1&, lig2&, derlig1&, derlig2&, finlig1&
Dim NomFichier As String
Dim data_range, formule_range As Range
Dim WS1 As Worksheet, WS2 As Worksheet
Dim Wkb As Workbook
Dim drLig, drLigbis As Long
Dim i As Integer

'Ouvre le fichier à consolider
NomFichier = Application.GetOpenFilename(« Excel Files, .xls »)
If NomFichier = «  » Then
MsgBox « Aucune donnée importée »
Application.ScreenUpdating = True
Exit Sub
End If

Set Wkb = Workbooks.Open(NomFichier)

'Importe les données dans l’onglet Data
Set WS1 = ThisWorkbook.Worksheets(« Data »)
Set WS2 = Wkb.Worksheets(« Feuil1 »)
Set WS2 = Workbooks.Open(NomFichier).Worksheets(« Data »)
derlig2 = WS2.Cells(WS2.Rows.Count, 1).End(xlUp).Row
Set data_range = WS2.Range(Cells(2, 1).Address(), Cells(derlig2, 20).Address())
derlig1 = WS1.Cells(WS1.Rows.Count, 1).End(xlUp).Row
data_range.Copy Destination:=WS1.Cells(derlig1 + 1, 1)
finlig1 = WS1.Cells(WS1.Rows.Count, 1).End(xlUp).Row
Set formule_range = WS1.Range(« V1:AH1 »)
formule_range.Copy Destination:=WS1.Cells(derlig1 + 1, 22)

'copie les formules jusqu’à la dernière ligne de données

drLig = WS1.Range(« B » & Rows.Count).End(xlUp).Row
drLigbis = WS1.Range(« AB » & Rows.Count).End(xlUp).Row
WS1.Range(« V3 »).AutoFill Destination:=WS1.Range(« V3:V » & drLig)
WS1.Range(« W3 »).AutoFill Destination:=WS1.Range(« W3:W » & drLig)
WS1.Range(« X3 »).AutoFill Destination:=WS1.Range(« X3:X » & drLig)
WS1.Range(« Y3 »).AutoFill Destination:=WS1.Range(« Y3:Y » & drLig)
WS1.Range(« Z3 »).AutoFill Destination:=WS1.Range(« Z3:Z » & drLig)
WS1.Range(« AA3 »).AutoFill Destination:=WS1.Range(« AA3:AA » & drLig)
WS1.Range(« AB3 »).AutoFill Destination:=WS1.Range(« drLigbis+1:AB » & drLig)
WS1.Range(« AC3 »).AutoFill Destination:=WS1.Range(« AC3:AC » & drLig)
WS1.Range(« AD3 »).AutoFill Destination:=WS1.Range(« AD3:AD » & drLig)

'ferme le fichier importé et affiche un message
Wkb.Close False
MsgBox (« Import effectué, deuxième étape en cours… »)
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
Exit Sub

err:
MsgBox (« Erreur, l’importation n’a pas été effectuée. »)
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True

End Sub

Merci pour votre aide :slight_smile:

Cordialementexemple macro.xlsm (375,7 Ko)

Bonjour

Ton fichier est vide de donnée donc pas facile sans exemple concret de comprendre la problématique

« C’est à dire ici, copier de la première cellule vide en AB jusqu’à la ligne de la dernière cellule non vide de la colonne B (après importation de nouvelles données) »

Je suppose que tu veux recopier les données de la colonne B 1° cellule jusqu’à la dernière cellule de cette colonne sur la colonne AB
à supposer que la 1° cellule de la colonne B soit B2 tu peux écrire :

Range(« B2 », « B » & Range(« B65536 »).End(xlup).Row).Copy Range(« AB2 »)

Cette ligne recopie de la cellule B2 à la dernière cellule de la colonne B en colonne AB à partir de « AB2 »

Maintenant je préfère cette solution pour ne prendre que les valeurs et rien d’autre :

Range(« AB2 », « AB » & Range(« B65536 »).End(xlup).Row).value = Range(« B2 », « B » & Range(« B65536 »).End(xlup).Row).Value

Je ne sais si cela répond à ton attente
A toi de me dire

Attention si tu récupères ces lignes de codes de ressaisir au clavier les guillemets accoler à la donnée

Ce sujet a été automatiquement fermé après 30 jours. Aucune réponse n’est permise dorénavant.