EXPERT VBA REQUIS : Insertion de formule sur une plage en VBA Le sujet est résolu

Y compris Power BI, Power Query et toute autre question en lien avec Excel
Avatar du membre
bitaljoe
Membre habitué
Membre habitué
Messages : 60
Appréciations reçues : 9
Inscrit le : 16 octobre 2017
Version d'Excel : 2010 - 2019 FR
Version de Sheets : FR

Message par bitaljoe » 15 octobre 2019, 12:05

Tu peux utilisé : Private Sub Worksheet_Change(ByVal Target As Excel.Range) dans le code vba de la feuille, aussi lorsque l'on change les valeurs, le code

Sub Hum()

For i = 1 To 10
Range("H" & i).FormulaR1C1 = Range("A" & i)
Next i

End Sub


Se relance.
“Tout est changement, non pour ne plus être, mais pour devenir ce qui n'est pas encore.” :omg:
Avatar du membre
bitaljoe
Membre habitué
Membre habitué
Messages : 60
Appréciations reçues : 9
Inscrit le : 16 octobre 2017
Version d'Excel : 2010 - 2019 FR
Version de Sheets : FR

Message par bitaljoe » 15 octobre 2019, 12:14

Voilà le final, qui marche super bien !


Private Sub Worksheet_Change(ByVal Target As Excel.Range)

On Error Resume Next
If Not Intersect(Target, Columns("A")) Is Nothing Then
Select Case Target
Case Is <> "*"
Cells(Target.Row, 8) = Cells(Target.Row, 1)
'----------
ThisWorkbook.Save
'----------
Case ""
Cells(Target.Row, 8) = ""

End Select
End If

End Sub
“Tout est changement, non pour ne plus être, mais pour devenir ce qui n'est pas encore.” :omg:
Avatar du membre
X Cellus
Membre dévoué
Membre dévoué
Messages : 709
Appréciations reçues : 76
Inscrit le : 13 octobre 2019
Version d'Excel : 2007 FR

Message par X Cellus » 15 octobre 2019, 15:54

Bonjour QuentinATSA,


Ci joint copie de ton fichier pour ton besoin. A adapter selon ton tableau.

L'insertion de formule est parfois difficile. Les règles sont particulières. Voir la macro Private

Bons tests et bonne continuation.
Exemple_BarreTest.xlsm
(16.71 Kio) Téléchargé 2 fois
Avatar du membre
curulis57
Passionné d'Excel
Passionné d'Excel
Messages : 3'746
Appréciations reçues : 226
Inscrit le : 4 janvier 2016
Version d'Excel : 2016 FR / 2019 FR

Message par curulis57 » 15 octobre 2019, 16:21

Salut tout le monde,

...probablement pas tout capté mais si les valeurs en [A] sont changées manuellement ou via VBA, voici comment actualiser les formules en ['B] :
Private Sub Worksheet_Change(ByVal Target As Range)
'
If Not Intersect(Target, Range("A1:A10")) Is Nothing Then Range("B" & Target.Row).FormulaLocal = "=A" & Target.Row
'
End Sub
:btres:

8-)
A+
1 membre du forum aime ce message.
Avatar du membre
bitaljoe
Membre habitué
Membre habitué
Messages : 60
Appréciations reçues : 9
Inscrit le : 16 octobre 2017
Version d'Excel : 2010 - 2019 FR
Version de Sheets : FR

Message par bitaljoe » 15 octobre 2019, 17:01

X Cellus a écrit :
15 octobre 2019, 15:54
Bonjour QuentinATSA,


Ci joint copie de ton fichier pour ton besoin. A adapter selon ton tableau.

L'insertion de formule est parfois difficile. Les règles sont particulières. Voir la macro Private

Bons tests et bonne continuation.
Exemple_BarreTest.xlsm
Bonsoir,

Grace à toi, j'ai pu améliorer et voici un code qui remplie ma 8ème colonne quand "A"&i est rempli et efface la valeur de la cellule lorsque "A"&i devient vide.
Private Sub Worksheet_Change(ByVal Target As Range)

On Error Resume Next
If Not Intersect(Target, Columns("A")) Is Nothing Then
Select Case Target
Case Is <> ""
Cells(Target.Row, 8).FormulaR1C1 = "=R[]C[-7]"

Case Is = ""
Cells(Target.Row, 8).ClearContents

End Select
End If

End Sub
:btres:
“Tout est changement, non pour ne plus être, mais pour devenir ce qui n'est pas encore.” :omg:
Avatar du membre
Jean-Paul
Membre habitué
Membre habitué
Messages : 71
Appréciations reçues : 30
Inscrit le : 17 mai 2018
Version d'Excel : Office 365 FR

Message par Jean-Paul » 15 octobre 2019, 19:05

Salut le fil
un petit bout de code sans prétention qui faudra adapter, et améliorer, ou qui servira à avoir une idée de génie.... :)
Option Explicit
Dim tabTemp

Private Sub Worksheet_Activate()
tabTemp = Worksheets("Feuil2").Range("A1:A10").Value
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim rRow   As Long: rRow = Target.Row

    If Not Intersect(Target, Range("Source")) Is Nothing Then

        Select Case Target.Value

            Case Is > tabTemp(rRow - 1, 1)
                Range("Cible").Range("A" & rRow).Value = Range("Cible").Range("A" & rRow).Value + (Target.Value - tabTemp(rRow, 1))
                tabTemp(rRow - 1, 1) = Target.Value

            Case Is < tabTemp(rRow - 1, 1)
                Range("Cible").Range("A" & rRow).Value = Range("Cible").Range("A" & rRow).Value - (tabTemp(rRow, 1) - Target.Value)
                tabTemp(rRow - 1, 1) = Target.Value

            Case Else
        End Select

    End If

End Sub
Copie de Exemple_Barre.xlsm
(23.13 Kio) Téléchargé 1 fois
Le savoir n'a de valeur que s'il est partagé.

:btres:
Q
QuentinATSA
Membre habitué
Membre habitué
Messages : 70
Inscrit le : 26 septembre 2019
Version d'Excel : 2013

Message par QuentinATSA » 21 octobre 2019, 10:28

Merci à tous pour votre aide généreuse.

J'ai réussi avec toutes vos données à créer ce que je souhaitais.
La formule :ActiveCell.FormulaR1C1 = "=RC[-1]" m'a bien aidé.

Sujet clos
Avatar du membre
X Cellus
Membre dévoué
Membre dévoué
Messages : 709
Appréciations reçues : 76
Inscrit le : 13 octobre 2019
Version d'Excel : 2007 FR

Message par X Cellus » 21 octobre 2019, 11:38

Bonjour QuentinATSA

Note bien que la formule exacte avec la propriété Formula.R1C1= ""=R[]C[-1]" est utilisée pour se référer à la colonne précédente. Donc à une valeur contenue une colonne avant.

Elle peut aussi être utilisée pour des lignes avant ou après en l'indiquant entre les crochets qui suit le R (pour Rows. Et pour des colonnes avant comme ici ou après. Selon entier négatif ou positif dans le crochet après le C (pour Column)

Bonne continuation.
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message