Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Microsoft 365 Code pour copier des formules dans une feuille suivant les lignes utilisées dans une colonne d'une autre feuille

luke3300

XLDnaute Impliqué
Bonjour le forum,
J'ai besoin d'aide car je cale sur ce code qui à pour but de copier les formules introduites dans les cellules de A2 à M2 de la feuil4 sur le même nombre de ligne qu'utilisées en Feuil5, colonne B.

Donc si les données dans la colonne B de la Feuil5 vont jusqu'à la ligne 375184, j'aimerais que les formules reprises en cellule A2 à M2 de la feuil4 soit étirées jusqu'à la ligne 375184 de la feuille. La ligne 2 évidement ne change jamais puisque ce sont les formules à étirer.

Je ne vois pas vraiment où est l'erreur ... le débogage me souligne la ligne: "Sheets("Feuil4").Range("A2:M2").AutoFill Destination:=Range("A2:M2" & dernligne), Type:=xlFillDefault"
Quelqu'un pourrait-il m'orienter vers mon/mes erreur(s)?

Merci pour votre aide.

VB:
Sub CopFormNet()
'Etend les formules de la ligne 2 de la feuil 4 sur la même longueur que les datas de la feuille 5 colonne B

Dim derligne As Long
dernligne = Sheets("Feuil5").Range("B" & Rows.Count).End(xlUp).Row
Sheets("Feuil4").Range("A2:M2").AutoFill Destination:=Range("A2:M2" & dernligne), Type:=xlFillDefault

End Sub
dans la colonne B. Malheureusement,
 
Dernière édition:
Solution
Re

Déjà il y a une erreur sur le nom de la variable que nous n'avons pas vu Sylvain et moi

Ce qui n'arriverais pas si on met en début de code : Option Explicit
En cas d'erreur sur ta variable tu as un message

Tu aurais vu que ta variable est mal orthographiée
Prends aussi l'habitude de mettre une majuscule dans le nom de ta variable c'est une astuce qui te permet de voir aussi que ta variable est mal orthographiée même si tu n'as pas mis Option explicit


Et avec la bonne orthographe


Tu vois la différence ! La majuscule s'est mis automatiquement

Maintenant revenons à ton problème:

Nous allons voir d’où peut venir l'erreur
1)Essai 1 :
C'est juste TON code avec le nom de ta variable...

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Luke,
Juste une petite erreur de copier coller. Range("A2:M2" & dernligne) ?
VB:
Sub CopFormNet()
'Etend les formules de la ligne 2 de la feuil 4 sur la même longueur que les datas de la feuille 5 colonne B

Dim derligne As Long
dernligne = Sheets("Feuil5").Range("B" & Rows.Count).End(xlUp).Row
Sheets("Feuil4").Range("A2:M2").AutoFill Destination:=Range("A2:M" & dernligne), Type:=xlFillDefault

End Sub
 

luke3300

XLDnaute Impliqué
Bonjour Sylvanu,

Merci pour ton aide, ça fonctionne super. Juste un peu lent il me semble mais pour mon test, j'avais +/-370.000 lignes ... ceci justifie peut-être le temps mis pour l'opération.
 

Phil69970

XLDnaute Barbatruc
Bonjour Luke , Sylvain

@luke3300 :
Juste un peu lent
Je te propose ceci pour accélérer légèrement

VB:
Sub CopFormNet()
'Etend les formules de la ligne 2 de la feuil 4 sur la même longueur que les datas de la feuille 5 colonne B

Application.ScreenUpdating = False

Dim derligne As Long
dernligne = Sheets("Feuil5").Range("B" & Rows.Count).End(xlUp).Row
Sheets("Feuil4").Range("A2:M2").AutoFill Destination:=Range("A2:M" & dernligne), Type:=xlFillDefault

End Sub

@Phil69970
 

Phil69970

XLDnaute Barbatruc
Re

Et même ceci qui devrait être encore plus rapide

VB:
Sub CopFormNet()
'Etend les formules de la ligne 2 de la feuil 4 sur la même longueur que les datas de la feuille 5 colonne B
Dim derligne As Long

Dim CalculMode As Long
With Application
    .ScreenUpdating = False
    CalculMode = .Calculation
    .Calculation = xlCalculationManual
End With

dernligne = Sheets("Feuil5").Range("B" & Rows.Count).End(xlUp).Row
Sheets("Feuil4").Range("A2:M2").AutoFill Destination:=Range("A2:M" & dernligne), Type:=xlFillDefault

With Application
    .Calculation = CalculMode
    .ScreenUpdating = True
End With
End Sub

@Phil69970
 

luke3300

XLDnaute Impliqué
Bonjour sylvanu, Phil69970, le forum,

C'est vraiment bizarre, j'obtiens ceci avec ton code Phil69970
(Juste pour préciser, les "feuil5" et "feuil4" sont ici nommées comme réellement)



Je ne comprends pas pourquoi ... une idée? Ceci dit, merci pour ton aide
 

Phil69970

XLDnaute Barbatruc
Re

Déjà il y a une erreur sur le nom de la variable que nous n'avons pas vu Sylvain et moi

Ce qui n'arriverais pas si on met en début de code : Option Explicit
En cas d'erreur sur ta variable tu as un message

Tu aurais vu que ta variable est mal orthographiée
Prends aussi l'habitude de mettre une majuscule dans le nom de ta variable c'est une astuce qui te permet de voir aussi que ta variable est mal orthographiée même si tu n'as pas mis Option explicit


Et avec la bonne orthographe


Tu vois la différence ! La majuscule s'est mis automatiquement

Maintenant revenons à ton problème:

Nous allons voir d’où peut venir l'erreur
1)Essai 1 :
C'est juste TON code avec le nom de ta variable rectifié
VB:
Option Explicit

Sub CopFormNet()
'Etend les formules de la ligne 2 de la feuil 4 sur la même longueur que les datas de la feuille 5 colonne B
Dim Derligne As Long

'Dim CalculMode As Long
'With Application
'    .ScreenUpdating = False
'    CalculMode = .Calculation
'    .Calculation = xlCalculationManual
'End With

Derligne = Sheets("Feuil5").Range("B" & Rows.Count).End(xlUp).Row
Sheets("Feuil4").Range("A2:M2").AutoFill Destination:=Range("A2:M" & Derligne), Type:=xlFillDefault

'With Application
'    .Calculation = CalculMode
'    .ScreenUpdating = True
'End With
End Sub

Alors cela fonctionne ou pas ?

2)Essai 2
On bloque juste le rafraichissement de l'écran

VB:
Option Explicit

Sub CopFormNet()
'Etend les formules de la ligne 2 de la feuil 4 sur la même longueur que les datas de la feuille 5 colonne B
Dim Derligne As Long

'Dim CalculMode As Long
With Application
    .ScreenUpdating = False
'    CalculMode = .Calculation
'    .Calculation = xlCalculationManual
End With

Derligne = Sheets("Feuil5").Range("B" & Rows.Count).End(xlUp).Row
Sheets("Feuil4").Range("A2:M2").AutoFill Destination:=Range("A2:M" & Derligne), Type:=xlFillDefault

With Application
'    .Calculation = CalculMode
    .ScreenUpdating = True
End With
End Sub

Alors cela fonctionne ou pas ?

3)Essai 3

La totale

VB:
Option Explicit

Sub CopFormNet()
'Etend les formules de la ligne 2 de la feuil 4 sur la même longueur que les datas de la feuille 5 colonne B
Dim Derligne As Long

Dim CalculMode As Long
With Application
    .ScreenUpdating = False
    CalculMode = .Calculation
    .Calculation = xlCalculationManual
End With

Derligne = Sheets("Feuil5").Range("B" & Rows.Count).End(xlUp).Row
Sheets("Feuil4").Range("A2:M2").AutoFill Destination:=Range("A2:M" & Derligne), Type:=xlFillDefault

With Application
    .Calculation = CalculMode
    .ScreenUpdating = True
End With
End Sub

Alors cela fonctionne ou pas ?

@Phil69970
 
Dernière édition:

luke3300

XLDnaute Impliqué
Bonsoir Phil69970,

Alors oui ça fonctionne.
J'ai corrigé le nom de la variable mais ça n'y changeait rien et les autres solutions non plus mais ... et il y a un "mais" j'appelais la macro au départ d'un bouton sur la feuille 5 et là, le débogueur se déclenche et surligne en jaune la ligne qui concerne les formules à recopier car c'est dans la feuille 4 que ce travail doit se faire.
Par contre, lorsque j'active la macro au départ d'un bouton dans la feuille 4, ça fonctionne à merveille.

Y-a-t 'il par contre un moyen que ça fonctionne en la lançant de la feuille 5?

Et super pour la vitesse wouaw ça file maintenant.

Merci beaucoup!
 

Phil69970

XLDnaute Barbatruc
Re

Y-a-t 'il par contre un moyen que ça fonctionne en la lançant de la feuille 5?
Oui bien sur mais poste le fichier STP

Un essai à l'aveugle
Derligne = Sheets("Feuil5").Range("B" & Rows.Count).End(xlUp).Row
Sheets("Feuil4").Range("A2:M2").AutoFill Destination:=Sheets("Feuil5").Range("A2:M" & Derligne), Type:=xlFillDefault

@Phil69970
 
Dernière édition:

Discussions similaires

Réponses
8
Affichages
404
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…