Macro Etendre des formules qui s'arrête avant la fin de la dernière ligne

Bonjour

Je viens auprès de vous pour savoir si quelque trouverais mon erreur d'écriture dans ma macro car la je vois pas le problème.

J'ai des données de la colonne B jusqu'à colonne G issu de formule, je sélectionne bien ces colonnes et demande d'étendre les formules jusqu'à la dernière ligne écrite en A.

Mais pour une raison qui me dépasse il s'arrête pour toutes les colonnes en ligne 21.

En vous remerciant de votre aide par avance

Pour info je ne sais pas écrire pour plusieurs ligne en même temps et j'ai tenté cette écrire [ DernLigne = .Range("A" & .Rows.Count).End(xlUp).Row
.Range("G2").AutoFill .Range("G2:G" & DernLigne) ] mais sans aucun succès.

Voici ma macro:

Sub RSF()
Dim fich_txt As String
Dim fich_source As String
fich_source = ActiveWorkbook.Name
'demande a l'utilisateur de choisir un fichier
fich_txt = Application.GetOpenFilename("Tous les fichiers (*.*),*.*")
'ouverture du fichier txt
Workbooks.OpenText Filename:=fich_txt, Origin:=xlWindows, StartRow:=1, DataType:=xlDelimited, Local:=True, Semicolon:=True
'copie des lignes
ActiveWorkbook.Sheets(1).Range("A1:A" & ActiveWorkbook.Sheets(1).Cells(Rows.Count, 1).End(xlUp).Row).Copy 'Workbooks(fich_source).Feuil1.Range("A1")
'collage spéciale des valeurs
Workbooks(fich_source).Sheets(1).[A1].PasteSpecial xlValues
'fermeture du fichier
Application.DisplayAlerts = False
ActiveWorkbook.Close False
Application.DisplayAlerts = True

Range("B1").Select
ActiveCell.FormulaR1C1 = "Type"
Range("B2").FormulaLocal = "=GAUCHE(A2;1)"
Range("C1").Select
ActiveCell.FormulaR1C1 = "N° Séjour"
Range("C2").Select
ActiveCell.FormulaR1C1 = "=IF(COUNTIF(RC2,""A""),MID(RC1,40,9),MID(RC1,38,9))" ''=SI(NB.SI($B2;"A");STXT($A2;40;9);STXT($A2;38;9))
Range("D1").Select
ActiveCell.FormulaR1C1 = "Code Forfait"
Range("D2").FormulaLocal = "=SI(NB.SI($B2;""B"");STXT($A2;78;5);SI(NB.SI($B2;""C"");STXT($A2;78;5);""""))"
Range("E1").Select
ActiveCell.FormulaR1C1 = "Date"
Range("E2").FormulaLocal = "=SI(NB.SI($B2;""A"");DATE(STXT(A2;89;4);STXT(A2;87;2);STXT(A2;85;2));SI(NB.SI($B2;""B"");DATE(STXT(A2;74;4);STXT(A2;72;2);STXT(A2;70;2));SI(NB.SI($B2;""C"");DATE(STXT(A2;74;4);STXT(A2;72;2);STXT(A2;70;2));SI(NB.SI($B2;""M"");DATE(STXT(A2;71;4);STXT(A2;69;2);STXT(A2;67;2));""""))))"
Range("F1").Select
ActiveCell.FormulaR1C1 = "CCAM"
Range("F2").FormulaLocal = "=SI(NB.SI($B2;""M"");STXT($A2;75;13);"""")"
Range("G1").Select
ActiveCell.FormulaR1C1 = "Prix Unitaire"
Range("G2").FormulaLocal = "=SI(NB.SI($B2;""B"");STXT($A2;100;7);SI(NB.SI($B2;""C"");STXT($A2;94;7);""""))"

Range("B2:G2").Select
Range("B2:G2").AutoFill Destination:=Range("B2:G2" & Range("A65536").End(xlUp).Row)

'Permet transformation la colonne en date courte
Columns("E:E").Select
Application.CutCopyMode = False
Selection.NumberFormat = "m/d/yyyy"
'Permet de centrer les colonnes d'abord en Haureur puis en Horizontale
Columns("B:G").Select
With Selection
.HorizontalAlignment = xlGeneral
.VerticalAlignment = xlCenter
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With

End Sub

Bonjour,

Avez vous des lignes masquées et/ou filtrées ? Avez-vous vérifié que la cellule G21 n'est pas vide ?

Alors il n'ya aucun filtrage ou ligne de masqué.

Quand à la ligne 21 n'est pas vide

Je vous joins une capture d'écran ou j'ai du caché certaines données pour des raisons professionnelles

capture rsf

Utilisez ceci Anonymisation de données pour Excel (excel-pratique.com) et envoyez votre fichier avec la feuille qui plante et le code VBA correspondant. J'aurai besoin de le lancer moi-meme pour comprendre l'origine du problème. Le code "a l'air" correcte, donc c'est probablement la structure des données qui ne va pas.

Je vais voire ce que je peux faire car en faite le début de ma macro transforme un fichier txt en excel sur la colonne A puis j'intégre les formules dans les autres colonnes. Donc il faut surtout que je modifie les donnée de base dans txt et je reviens vers vous

Il m'est beaucoup trop compliqué d'anonymiser mon fichier car celui ci contiens un volume de ligne très importante (393 800 lignes).

Mais je fini par me demandé si la macro n'arrête pas justement du au nombre de ligne.

Merci de ton aide quand même

Bonjour,

Vous n'avez pas besoin de partager tout votre fichier ! Si la macro plante à la ligne 21, anonymisez les 30 premières lignes et supprimez le reste (et les autres feuilles si non utilisées).

Après effectivement, si vous avez 300k lignes… Vous devriez vraiment considérer d'autres outils comme PowerQuery. Cependant, à première vue votre macro ne doit pas etre limitée par le nombre de lignes. Elle peut etre très lente, mais il n'y a rien a-priori, qui la ferait s'arreter plus tot que prévu à cause de la taille. Surtout à la ligne 21.

Et bien pour power query c'est effectivement une bonne idée mais sur mon pc de boulo le service informatique bloque tout donc difficile de l'avoir.

Quant à mon fichier j'ai fait le test avec beaucoup moins de ligne, genre 10 000 et donc la, la macro fonctionne jusqu'au bout.

C'est pour ca que je pense sincèrement maintenant que mes milliers de lignes doivent interférer.

Bonsoir, je viens de penser à quelque chose. Avez-vous essayé d'ajouter

Application.Calculation=xlCalculationManual

Au début de votre sub, et

Application.Calculation=xlCalculationAutomatic

A la fin ?

Étant donné que vous insérez énormément de formules, c'est indispensable. C'est peut-être cela qui vous fait planter, je n'y avais pas pensé.

De même, ajoutez

Application.ScreenUpdating=False au début du Sub si ce n'est pas déjà fait.

Si vous travaillez sur 300k lignes, toutes les optimisations sont importantes.

Bonjour à tous,

tu peux écrire ta formule sur toute la plage au lieu de l'étendre ensuite.
Ex :

Dim derlig As Long
derlig = Range("A" & Cells.Rows.Count).End(xlUp).Row
Range("B2").Resize(derlig - 1).FormulaLocal = "=GAUCHE(A2;1)"

eric

PS : évite les .Select inutiles dans 99% des cas et qui ralentissent beaucoup, et de travailler avec ActiveCell.
Si un utilisateur réussi à sélectionner une autre cellule ça ne te fera que de la merdia

' non !!
Range("B1").Select
ActiveCell.FormulaR1C1 = "Type"

' mais :
Range("B1").FormulaR1C1 = "Type" ' directement
' et en l'occurrence ça serait plutôt .Value ici...

Mille merci à tous les 2 pour votre précieuse aide, ca fonctionne nickel.

Rechercher des sujets similaires à "macro etendre formules qui arrete fin derniere ligne"