Etirer une formule automatiquement

Bonjour à tous,

Je vous expose mon cas que lequel j'aimerai avoir vos conseils avisés car je

1-Tout d'abord, dans mon fichier Excel, j'ai une Macro INCREMENT qui rempli la colonne C par un pas que je peux modifier (cellule A5) jusqu'à une valeur max que je peux modifier également (cellule A2). Celle-ci m'a été très gentiment proposée par GMB (je l'ai un peu adapté) et se situe dans la feuille et non un module (est-ce embêtant?) :

Sub increment()

Dim i As Integer, j As Integer, k As Integer

i = Sheets("Calcul").Range("A2").Value

j = Sheets("Calcul").Range("A5").Value

With Sheets("Calcul")

.Columns("C:C").ClearContents

For k = 1 To i / j

.Range("C" & k).Value = k * j

Next

End With

End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Call increment

End Sub

Je voudrais modifier cette macro comme suit:

  • la colonne débute par la cellule A5 (le pas modifiable) -> je souhaiterais que la colonne début à "0" .
  • la macro se réxecute à chaque fois que je clique sur n'importe quelle cellule -> je souhaiterais que la macro ne s’exécute qu'après modification de la cellule A2 et/ou A5.

2- en colonne D, j'ai une formule que je souhaiterais étirer jusqu'à la dernière ligne non vide de la colonne C.

Cette formule en C1 est la suivante =I$4*($C1/3600)^2/(2*9,81*I$3^2)+I$7*(($C1/3600)^2/(2*9,81*I$3^2))*(I$5/I$6)).

Elle dépend donc des valeurs de la colonne B et d'autre valeur. Et idem pour la colonne D et E (la colonne E devant faire la somme des colonnes C et D).

3- Et idem pour la colonne D et E (la colonne E devant faire la somme des colonnes C et D).

Je vous joint un fichier Excel test pour voir si vous pouvez faire quelque chose pour moi. Désolé, mon message est un peu long, mais je ne pratique que très peu VBA et j'en écris certainement trop.

Bien à vous.

11test.xlsm (18.41 Ko)

Bonjour Kamerlander, Bonjour le Fofo,

je souhaiterais que la macro ne s’exécute qu'après modification de la cellule A2 et/ou A5.

Ok fait Il fallait modifier ton Private Sub par cela :

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Target, Range("A2")) Is Nothing Then
Call increment
End If
If Not Application.Intersect(Target, Range("A5")) Is Nothing Then
Call increment
End If
End Sub

en colonne D, j'ai une formule que je souhaiterais étirer jusqu'à la dernière ligne non vide de la colonne C.

[...]

Et idem pour la colonne D et E (la colonne E devant faire la somme des colonnes C et D).

Alors si tu débute en VBA sache que tu verra énormément la variable ci-dessous, et il faudrait que tu l'assimile pour tes prochaines procédures

Dim DernLigne As Integer
DernLigne = Cells(Rows.Count, 3).End(xlUp).Row 'Le 3 est égal à ton n° de colonne

Tu compte le nombre de ligne non vide dans une colonne avec cette variable et sa te permet donc dans ton cas de faire défiler une formule comme ci-dessous :

Range("D1:F1").Select
Selection.AutoFill Destination:=Range("D1:F" & DernLigne)

La seule chose que j'ai pas compris c'est ta colonne C

J'ai lancé ta procédure "Increment" et cette colonne c'est vider. En analysant tes lignes de code, je me suis rendu compte que tu fessais une multiplication par zéro ce qui explique que tu n'a aucune valeur en C :

.Range("C" & k).Value = k * j

La variable k n'a pas de valeur, donc tu multiplie j par zéro et dit à ta macro d'insérer le résultat en C

Je te laisse corriger cela et tu reviens vers moi si tu a besoin d'aide

Ci-joint le fichier modifié

Bonjour

un essai à tester. Te convient-il ?

Bye !

17test-v1.xlsm (20.29 Ko)

Re,

Juice, merci beaucoup pour tes explications. Je suis un grand débutant et c'est avec ça que je vais pouvoir faire 2 ou 3 trucs sympa plus tard! Pour le pb sur la colonne C, Gmb a modifié le code en: .Range("C" & k+1).Value = k * j. Et ça marche!

Gmb donc, parfait cela marche du tonnerre.

Encore merci pour vos lumières, votre savoir faire et votre rapidité.

Bonne journée

Rechercher des sujets similaires à "etirer formule automatiquement"