EXPERT VBA REQUIS : Insertion de formule sur une plage en VBA

Bonjour,

Aujourd'hui je viens poser une question aux connaisseurs. J'ai une colonne de B1 à B10 avec une mise de forme conditionnelle de type barre de données. Les barres apparaissent en fonction de la valeur en pourcentage qui est inscrite sous ses cases. Je souhaiterai un code VBA qui disent juste que B1=A1, B2=A2,etc...

Comme cela je peux visualiser la valeur en colonne A1:A10 et je peux voir les barres de progression du pourcentage en B1:B10.

ATTENTION : je ne veux pas que "B1.Value=A1.Value" mais je veux inscrire dans B i: "=A i". Je veux pouvoir modifier A et voir mes barres bouger

Bonjour,

Tu aurais un fichier exemple pour que ce soit plus clair et que ça colle à ce que tu souhaites ?

Merci

Je vais réaliser un fichier excel pour te montrer rapidement mon désir.

5 minutes

Peut-être dans cet esprit d'après ce que j'ai compris ?

10test.zip (7.18 Ko)

Je met ci joint un exemple de ce que je souhaite. Merci

Oui Paulox.... mais maintenant avec la VBA.

Je n'appelle pas cela de la VBA. Faire des barres de données je pense qu'il y a assez de tuto sur internet pour comprendre comment cela fonctionne. Je parle d'un code de programmation informatique de language Visual BAsic pour que les valeurs de ma colonne B soit égal au valeur de ma colonne A même et pas seulement à un instant donné.

Cordialement,

QuentinATSA

Bonjour,

Voilà un exemple avec la selection de la Cellule A&"i" qui s'insère en H10 à l'aide de Input Box.

Avec au préalable les colonnes H et I, préparé pour ressortir les données et la barre de progression en pourcentage.

Sub Hum() Dim myRange As Range Set myRange = Application.InputBox(prompt:="Sample", Type:=8) Worksheets("Feuil1").Range("h10").Value = myRange End Sub

C'est très gentil de ta part de vouloir m'aider @bitaljoe. (Quand on dit VBA j'apprécie qu'on me réponde en VBA)

Cependant comme ton code ne correspond pas exactement à mes attentes je vais réexpliquer comment cela fonctionne de A à Z. En fait je me suis mal exprimé ! Donc :

J'ai créé un planning interactif sur lequel mes opérateur peuvent suivre la progression du projet.

Quand ils appuient sur un bouton un bloc avec de nombreuses colonnes se créé.

Dans la dernière colonne j'ai ajouté les barres de données. Dans l'avant-dernière colonne les opérateurs doivent inscrire leur progression actuelle dans leur projet. (la barre est juste un indicateur visuel rapide)

Donc lors de la création du bloc je souhaiterai que dans les 10 cases où se trouve mes barres de données le code VBA m'inscrive (ici A et B pour l'exemple) :

Dans B1 : "=A1"

Dans B2 : "=B2"

Dans B3 : "=B3"

etc...

Mais je ne veux surtout PAS que le code m'inscrive :

A1.value = B1.Value

A2.Value = B2.Value

Alors pourquoi ???

Car lorsque l'opérateur prend en main l'excel le bloc est créé instantanément et c'est les valeurs qui sont apportées par cette personne en A"i" qui change la barre dans B"i". D'où ma volonté d'inscrire une "FORMULE" et non pas une "VALEUR".

Je fais une xemple foireux de ce que je souhaiterai. Et en réalité je ne sais pas si c'est possible en VBA !

For i=1 To 10

Range("B" & i).Value = "=A & i"

Next i

Sauf que je ne peux pas dire =A & I dans une case Excel..... Et c'est la que je suis complètement bloqué.

Donc est ce possible d'inscrire une formule changeante dans Excel via la VBA ???

Bonjour,

J'ai moi aussi du mal à faire apparaître la référence de la cellule. Je me souvient l'avoir fait mais au travers des formules d'addition et soustraction.

Je te propose ceci, vue que les valeurs de Ai ne vont pas changer entre l’exécution et le remplissage.

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

Cdt.

Merci on se rapproche du schmilblick un peu plus à chaque fois.

Cependant on en revient toujours au problème d'actualisation. Ici le programme fonctionne à un instant donné (quand on lance la macro) or je voudrais qu'on lance la macro, et ensuite on modifie les valeurs de la première colonne pour que les barres bougent.

Dur dur....

EDIT : Ta formule n'est pas exactement bonne mais je crois qu'avec ce que tu m'as donné je peux réussir : FORMULAR1C1 !!!

MERCI

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.

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

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.

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

A+

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.

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

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

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

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.

Rechercher des sujets similaires à "expert vba requis insertion formule plage"