FormulaR1C1

Salut, petite question technique:

J'ai ce code

                    For Each cell In Range(Cells(i, 2), Cells(i, 2 + 31))
                        ligne = ligne + 1
                        cell.FormulaR1C1 = "=if('" & Sheets(j).name & "'!R[" & 7 + ligne & "]C" & 1 + L1C1 & "="""","""",""C"")"
                    Next

J'aimerao que dans la formule, pour la colone C"& 1 + L1C1 & " il me mette 1 + L1C1 avec L1C1 qui prendra la valeur d'une colone généré par le choix d'un utilisateur. Ainsi lorsque celui si changera le chiffre (calendrier) ma formule s'adapte pour aller cherche le truc dans la bonne colonne.

La question c'est peut on mettre une variable dynamique d'une formule au sein d'une variable de formule

Ce que je veux au final

=SI(Guil_!L(7)C(1 + la valeur de la cellule voulu qui changera en fonction du choix de l'utilisateur)="";"";"C")

Le but est d'éviter de relancer une macro pour réadapter les variables afin de faire le recalcul

En espérant que quelqu'un comprendra ce que je veux

Bonjour,

si j'ai bien compris le problème, je vous propose la solution avec un "inputBOx" :

Dim rep As Variant
  rep = InputBox("rentré la colonne à vérifier")
  If Not IsNumeric(rep) Then
    rep = Range(rep & 1).Column
  End If

En faite j'ai un calendrier qui affiche un mois. L'utilisateur à le choix des mois allant de janvier a décembre.

Janvier =1

Décembre =12

dans d'autres feuilles (1/employé) je stock leurs jours de congé par colonne (1colonne par mois). Mon but est que si l'utilisateur souhaite afficher un autre mois (le calendrier change directement par recalcul sans relancer de code) mes formules s'adaptent dans les cellules sans pour autant nécessiter une relance du code vba. Hors mes formules sont pour l'instant sous la forme:

cell.FormulaR1C1 = "=if('" & Sheets(j).name & "'!R[" & 7 + ligne & "]C" & 1 + mavariable & "="""","""",""C"")"

Or mavariable étant généré par du code vba, celle ci ne s'adapte que quand je relance la macro. Je souhaite changer cette variable par la valeur contenu dans la cellule qui correspond au mois choisi par l'utilisateur. Ainsi comme quand on écrit dans une cellule:

=L1C1 + L2C2

j'aimerais que dans ma formule généré par vba, je change ma variable par la cellule correspondante (dans mon cas A1). Je sais comment faire une formulaR1C1 simple en mettant les cellules voulus mais je n'arrivent pas à intégrer ces cellules à une variable de colone pour que quand l'utilisateur change de mois, le recalcul se fasse directement sans relancer le vba

dans ce cas utiliser les "événement VBA" pour vous aider. un code qui se déclenche automatique après certain action définie par vous =)

C'est ce que j'avais fait au début, mais niveau optimisation c'est pas top, je préférerais que la cellule soit directement lié à d'autres que plutôt de relancer tout le code. Car la relance du code est assez longue et ça m’embête.^^

Sinon j'ai fais

Private Sub Worksheet_Calculate()

Application.EnableEvents = False
Call ThisWorkbook.calendrier

Application.EnableEvents = True
End Sub

mais plutot qu'associer a toute une page je ne peux pas l'associer qu'a une cellule?

En sachant que Worsheet_Change ne marche pas car je la tranforme pas, il se passe juste un recalcul dans la cellule

sa contourne un peu le problème mais rajoute quelque manipulation en plus avec : Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Je ne peux pas utiliser de change sur ce que je fais puisque j'utilise une liste déroulante, ça ne la repère pas

si c'est une liste déroulante crée à partir de la "validation de donnée" sa marche avec change mais je vous proposer plutôt le selctionChange

Quelqu'un saurait comment remplacer C "& k &" par un truc style C "& INDIRECT("&A32&") & " ?

Bonjour.

"blabla C" & Cells(32,1).Value & "blabla"

Bonne journée

La valeur sera fixé et ne changera pas quand la cellule changera de valeur. Je veux que ce soit l'adresse de la cellule qui apparait dans la formule et non une variable fixé

Elhevan a écrit :

Bonjour.

"blabla C" & Cells(32,1).Value & "blabla"

Bonne journée

c'est bien l'adresse qui est reprit est non la valeur fixe ^^

si vous changez la valeur dans la cellule cells(32,1), la valeur dans cette formule changera aussi

Alors il faut mettre le Indirect entre "" lui même et penser à dire à Excel que tu utilises les noms locaux des fonctions (fr) et pas les globaux (en) avec .FormulaR1C1Local

(Si je vois bien où tu en es de ta fonction, j'ai un peu perdu de vue ce que tu as dans ton code au final).

Ok, merci. Par contre il me met erreur définie par l'application ou par l'objet, bizarre c'est pourtant bien un entier que je rentre

For Each cell In Range(Cells(i, 2), Cells(i, 2 + 30))
                        If Cells(1, 1).Value > 0 Then
                           cell.FormulaR1C1 = "=if('" & Sheets(j).name & "'!R" & 7 + ligne + nbr_calendrier * 39 & "C " & Cells(1,3).Value & " ="""","""",""C"")"
                          'cell.FormulaR1C1 = "=if('" & Sheets(j).name & "'!IINDIRECT(""A""&(" & R1C3 & "))="""","""",""C"")"
                         '' cell.FormulaR1C1 = "=if('" & Sheets(j).name & "'!IINDIRECT(ADDRESS(" & ligne & "; A3 ))="""","""",""C"")"
                            cell.Interior.ColorIndex = 24
                            If cell.Value = "C" Then
                                cell.Interior.ColorIndex = 3
                            End If
                        End If
                        ligne = ligne + 1
                    Next

Essaye de remplacer les " qui doivent rentrer dans ta formule par Chr(34) et de ne garder donc que ceux qui servent au VBA en "

Edit : Par exemple si tu dois avoir

="A32" dans ta case

au lieu de mettre Case.Formula = "="A32""

Faire Case.formula = "=" & chr(34) & "A32" & chr(34)

Voila donc la formule que j'ai trouvé que je veux mettre sous forme vba quelqu'un aurait une idée?

=SI(INDIRECT("rz_er!"&CAR(64+13+C1)&COLONNE(B13)+6)="";"";"C")

cell.FormulaR1C1 = "=if(INDIRECT('" & Sheets(j).name & "'! R" & Chr(64 + 13 + C1) & " C " & Columns(cell) + 6 & "="""";"""";""C"")"

Merci

Je suis preneur d'une réponse meme si je suis passé par une solution alternative de lache.

J'ai copié la formule dans une plage de donnée référence et j'effectue un copier collé de ce range quand j'ajoute une nouvelle ligne pour un employé pour ceux que ca pourrait interesser

Bonjour,

JeCPas a écrit :

=SI(INDIRECT("rz_er!"&CAR(64+13+C1)&COLONNE(B13)+6)="";"";"C")

cell.FormulaR1C1 = "=if(INDIRECT('" & Sheets(j).name & "'! R" & Chr(64 + 13 + C1) & " C " & Columns(cell) + 6 & "=""";"""";""C"")"

pourquoi un if ici ? vous excel est en anglais ?

Le vba est toujours en anglais non?

Rechercher des sujets similaires à "formular1c1"