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 jEn 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 SubMaintenant 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 SubSi 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 jcette 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 SubBonne journée