Mon signe "=" fait bugger l'écriture dans une cellule
Bonjour,
je suis tout nouveau en VBA et me voila face à un gros mur. jusqu'ici je récupérais du code à droite et à gauche et j'assemblais mais la je me suis mis à tout rédiger pas à pas pour ce code.
Mon but est lors de la création d'une nouvelle feuille que vienne s'écrire une formule dans une 30aine de lignes d'un tableau.
j'ai réussi à récupérer le bonne colonne, faire écrire dans chaque case la bonne formule mais sans le "=" du début. En concaténant avec des "&" impossible d'écrire ma formule avec des parts variables et des constantes, je dois être assez mauvais. J'ai réussi à détourner une partie de problème en remplaçant mes variables par des symboles dans ma formule et en les réintégrant avec la fonction replace. Mais la ou tout bug c'est lorsque je j'écris tout avec le "=" du début ou que je tente de le remettre avec la fonction replace. tout bug
la formule que je souhaiterais écrire est : =SOMME.SI('NOM DE LA DERNIERE FEUILLE'!$D$2:$D$100;ANUMERODELIGNE;'NOM DE LA DERNIERE FEUILLE'!$C$2:$C$100)
où NOM DE LA DERNIERE FEUILLE et NUMERODELIGNE sont des variables, ca marche bien sans le "=" mais pas avec.
Voici mon code :
Sub identifier_colonne_et_entrer_formule()
Dim col As Integer
Dim lign As Integer
Dim nbligndépenses As Integer
Dim nblignrecettes As Integer
Dim compteur As Integer
Dim derfeuille As String
Dim formule As String
nbligndépenses = Range("Tableau3[Dépenses]").Rows.Count
nblignrecettes = Range("Tableau4[Recettes]").Rows.Count
lign = ActiveCell.Row
derfeuille = Worksheets(Worksheets.Count).Name
Dim x As String
Dim found As Boolean
x = Sheets(Sheets.Count).Range("k5").Value
found = False
Sheets("Recettes Dépenses Catégories").Select
Range("C57").Select
' identifier colonne
Do Until IsEmpty(ActiveCell)
If ActiveCell.Value = x Then
found = True
col = ActiveCell.Column
Exit Do
End If
ActiveCell.Offset(0, 1).Select
Loop
'écrire les formules de dépenses
Cells(3, col).Select
compteur = 0
Do Until compteur = nbligndépenses
lign = ActiveCell.Row
'sous la forme :
ActiveCell.Value = "SOMME.SI('Janvier 2023'!$D$2:$D$100;A%;'Janvier 2023'!$C$2:$C$100)"
ActiveCell = Replace(ActiveCell, "Janvier 2023", derfeuille)
ActiveCell = Replace(ActiveCell, "%", lign)
ActiveCell.Offset(1, 0).Select
compteur = compteur + 1
Loop
End SubMerci beaucoup de m'avoir lu.
Bonjour maksou et
Une petite présentation ICI serait la bienvenue
Si vous ne l'avez pas encore fait, je vous invite à lire :
- La charte du forum
- Quelques fonctionnalités du forum à connaître
qui vous aideront dans vos demandes et réponses sur ce forum.
Regardez aussi les petites icônes mises à votre disposition dans la barre de menu qui :
- vous permettent de poster un code (</>)
- ou de clôturer un fil lorsque vous avez terminé (V)
Concernant votre demande, les formules s'écrivent avec la méthode "Formula" ou mieux "FormulaLocal"
Voici le code, non optimisé comme nous n'avons pas le fichier
Sub identifier_colonne_et_entrer_formule()
Dim Col As Long, Lign As Long
Dim nbligndépenses As Integer
Dim nblignrecettes As Integer
Dim Compteur As Long
Dim derfeuille As String
Dim sForm As String
nbligndépenses = Range("Tableau3[Dépenses]").Rows.Count
nblignrecettes = Range("Tableau4[Recettes]").Rows.Count
Lign = ActiveCell.Row
derfeuille = Worksheets(Worksheets.Count).Name
Dim x As String
Dim found As Boolean
x = Sheets(Sheets.Count).Range("k5").Value
found = False
With Sheets("Recettes Dépenses Catégories")
.Range("C57").Select
' identifier colonne
Do Until IsEmpty(ActiveCell)
If ActiveCell.Value = x Then
found = True
Col = ActiveCell.Column
Exit Do
End If
ActiveCell.Offset(0, 1).Select
Loop
' écrire les formules de dépenses
Lign = 3: Compteur = 0
Do Until Compteur = nbligndépenses
' Préparer la formule
sForm = "=SOMME.SI('Janvier 2023'!$D$2:$D$100;A%;'Janvier 2023'!$C$2:$C$100)"
sForm = Replace(sForm, "Janvier 2023", derfeuille)
sForm = Replace(sForm, "%", Lign)
' Inscrire la formule
.Cells(Lign, Col).FormulaLocal = sForm
Compteur = Compteur + 1
Loop
End With
End SubMerci pour votre participation
Cordialement
WOow super merci,
je vais me plonger sur cette methode "formula"/"formulalocal", merci beaucoup !
apres avoir rajouté les 2/3 petits trucs manquants ca marche super bien !
J'irai faire un tour dans les présentations