Aide sur l'utilisation de fonctions / coordonnées de cellules en VBA

Bonjour à toutes et tous,
je débute totalement en VBA pour excel et je bricole assez bien... mais là je sèche sur un souci :

                        derniereligne = Range("A" & Rows.Count).End(xlUp).Row
                        For j = 2 To derniereligne
                            If Range("B" & j).Value <> "" Then
                            Range("A" & j).Value = ActiveSheet.Name
                            coord = D&:&CStr(j)
                            ActiveSheet.Cells(j, 4).FormulaLocal = "=ARRONDI.AU.MULTIPLE(coord;5)"
                            End If                          
                        Next j

En gros, après avoir rempli toutes les cellules de la colonne A (correspondant à une ligne de données non vide) avec le nom de l'onglet,
je voudrais remplir une colonne (la D) avec un arrondi au multiple de la case de la même ligne sur la colonne C.
En plus clair, que la cellule D:j ait pour valeur l'arrondi de la C:j.
J'ai cru qu'il me fallait passer par une chaine de caractères et j'ai donc créé la variable coord pour faire ça, mais ça ne marche pas...

Bref,
je suis un peu paumé,
si ça n'est pas clair,
dites moi

Merci d'avance,

Adrien

re,

pour un débutant, c'est plus facile d'utiliser l'enregistreur des macros et de modifier le résultat qu'on y voit. Pour cela, vous ajoutez une formule dans la colonne A, par exemple, j'ai mis une bonne formule dans la cellule A4. Je démarre l'enregistreur, je sélectionne la cellule A4, je fais "F2" et je fais "Enter" et j'arrête l'enregistreur. Le résultat dans l'enregistreur sera quelque chose comme ceci ...

sub Macro1()
' Macro1 Macro
'

'
    Range("A4").Select
    ActiveCell.FormulaR1C1 = "=IF(RC[1]<>"""",MROUND(RC[3],5),""-"")"
    Range("A5").Select
End Sub

Maintenant je suppose que vous voulez la formule dans la colonne A et vous copiez/collez la partie après "ActiveCell.FormulaR1C1 =" après "Cells(j, "A").FormulaR1C1 =, donc ici c'est "=IF(RC[1]<>"""",MROUND(RC[3],5),""-"")"

vers

Sub MaMacro()
     Dim DerniereLigne: DerniereLigne = Range("A" & Rows.Count).End(xlUp).Row

     For j = 2 To DerniereLigne
          If Range("B" & j).Value <> "" Then
                 Cells(j, "A").FormulaR1C1 = "=IF(RC[1]<>"""",MROUND(RC[3],5),""-"")"
          End If
     Next j
End Sub

Si cela ne fonctionne pas, téléchargez votre fichier avec des données anonymisées.

C'est étrange que vous voulez ajouter une formule pour certaines lignes et ne pas pour toutes.

Super. Merci Bart,
je pense que mon exposé n'était pas très clair mais en retravaillant un peu j'ai eu ce que je voulais :

                        derniereligne = Range("A" & Rows.Count).End(xlUp).Row
                        For j = 2 To derniereligne
                            If Range("B" & j).Value <> "" Then
                            Range("A" & j).Value = ActiveSheet.Name

                            Cells(j, "D").FormulaR1C1 = "=(MROUND(RC[-1],50))/10"

                            End If

                        Next j

cette partie de ma macro
- remplit la colonne A des lignes où la colonne B n'est pas vide avec le nom de mon onglet
- remplit la colonne D de ces mêmes lignes avec un arrondi (un peu amélioré) de la colonne précédente (la C)

Ça fonctionne.
Alors Grand Merci !

Je n'utilise pas beaucoup l'enregistreur parce que j'ai fait pas mal de C++ il y a longtemps et j'ai plaisir à me travailler le crâne sur le code (jusqu'à ce que j'appelle au secours). Mais c'est vrai que je devrais y avoir recours plus souvent, ça aide sérieusement à démêler les choses.

Bonne journée,

Adrien

Bonjour le fil

@Adrien_63, si vous êtes débutant en VBA, ce que ne vous à pas dit BsAlv,
c'est que vous devez définir vos variables et indiquer sur quelle feuille vous travaillez

Perso, j'utilise toujours "FormulaLocal" plus facile à lire quand on travaille sur un Excel FR

Sub Test()
  Dim Ws As Worksheet    ' Variable objet
  Dim DerniereLigne As Long
  Dim J As Long
  ' Définir la feuille sur laquelle on travaille
  Set Ws = ThisWorkbook.Sheets("Feuil1")
  '
  DerniereLigne = Ws.Range("A" & Rows.Count).End(xlUp).Row
  For J = 2 To DerniereLigne
      If Ws.Range("B" & J).Value <> "" Then
        Ws.Range("A" & J).Value = ActiveSheet.Name
        Ws.Range("D" & J).FormulaLocal = "=ARRONDI.AU.MULTIPLE(C" & J & ";5)"
      End If
  Next J
End Sub

Bonne journée

Rechercher des sujets similaires à "aide utilisation fonctions coordonnees vba"