Ajouter une variable à la suite dans une boucle
Bonjour,
Voici ci joint le fichier excel de mon projet.
Contexte :
Je souhaite réaliser à l'aide d'une macro une moyenne de valeurs, avec pour contrainte que la formule soit affichable par l'utilisateur. Pour cela je compte utiliser la fonction Formula après avoir ajouté les adresses des cellules pour lesquelles je veux cette moyenne.
Problème :
Je n'arrive pas à ajouter les adresses des cellules les unes à la suite des autres dans une boucles. Il doit surement exister une astuce, mais je ne la connais pas.
Voici le code utilisé ainsi que le fichier vba :
Sub ConvertirLettrColonne()
Dim Chaine As String
Dim Lettre_col As String
'Repérage de la dernière cellule non vide
Dercol = Cells(25, Cells.Columns.Count).End(xlToLeft).Column
'Boucle de la cellule 10 jusqu'à la dernière colonne
With ThisWorkbook.Worksheets("USL")
For i = 10 To Dercol
'récupération de la lettre de la colonne
Chaine = Split(Cells(23, i).Address, "$")(1)
'rajout du numéro de la ligne et du séparateur
Chaine = Chaine & "25" & ";"
'ZONE, c'est ici que je souhaiterai que chaque résultat de chaine s'ajoute à la suite du précédent
Liste = Chaine
'Boucle avec un pas de 5 cellule entre chaque
i = i + 4
Next
End WithMerci d'avance pour votre aide,
Batoine
- Messages
- 1'794
- Excel
- 2010
- Inscrit
- 25/08/2014
- Emploi
- Consultant VB6 / SQL / VBA / Excel / Access
Bonsoir,
As-tu essayé en remplaçant :
Liste = Chainepar :
liste = liste & ChaineA tester
Bonne soirée
Bouben
Bonjour Bouben,
Merci beaucoup ! Ta solution fonctionne. Je n'avais pas réalisé que cela fonctionnai comme un compteur mais qu'avec des caractères de types string, il fallait utiliser le &.
J'ai maintenant un autre problème, je le poste ici car c'est toujours dans la finalité de réussir à réaliser cette moyenne.
Lorsque j'essaie d'utiliser la fonction formula, j'obtiens un message d'erreur 1004 : Erreur définie par l'application ou par l'objet.
Il me semble que ma variable "Liste_ok" n'est pas réconnue.
Sais-tu comment je peux la résoudre ?
Voici le code et mon projet :
Sub tirer_formule()
'
' tirer_formule Macro
'
'
Selection.autofill Destination:=Range("D25:H50"), Type:=xlFillDefault
Range("D25:H50").Select
End Sub
Sub ConvertirLettrColonne()
Dim Chaine As String
Dim Lettre_col As String
'Repérage de la dernière cellule non vide
Dercol = Cells(25, Cells.Columns.Count).End(xlToLeft).Column
'Boucle de la cellule 10 jusqu'à la dernière colonne
With ThisWorkbook.Worksheets("USL")
For i = 10 To Dercol
'récupération de la lettre de la colonne
Chaine = Split(Cells(23, i).Address, "$")(1)
'rajout du numéro de la ligne et du séparateur
Chaine = Chaine & "25" & ";"
'ZONE, c'est ici que je souhaiterai que chaque résultat de chaine s'ajoute à la suite du précédent
liste = liste & Chaine
'Boucle avec un pas de 5 cellule entre chaque
i = i + 4
Next
End With
'supprimer le dernier ";"
liste_ok = Left(liste, Len(liste) - 1)
'Erreur sur la ligne de code suivante (Erreur 1004 : Erreur définie par l'application ou par l'objet)
'Selon moi il ne comprend pas la variable liste_ok pourtant définie comme une string
Cells(25, 4).Formula = "=MOYENNE(" & liste_ok & ")"
End SubMerci d'avance !
Batoine
- Messages
- 1'794
- Excel
- 2010
- Inscrit
- 25/08/2014
- Emploi
- Consultant VB6 / SQL / VBA / Excel / Access
Re-
Une piste à tester :
Remplacer :
Cells(25, 4).Formula = "=MOYENNE(" & liste_ok & ")"Par
Cells(25, 4).FormulaLocal = "=MOYENNE(" & liste_ok & ")"Bonne soirée
Bouben
Bonjour,
Une proposition à étudier et à adapter, si besoin.
Cdlt.
Option Explicit
Public Sub CreateFormulas()
Dim ws As Worksheet
Dim Dercol As Long, I As Long, J As Long
Dim Chaine As String, Liste As String
Dim modeCalc As XlCalculation
With Application
modeCalc = .Calculation
.Calculation = xlCalculationManual
.ScreenUpdating = False
End With
Set ws = ActiveWorkbook.Worksheets("USL")
With ws
Dercol = .Cells(24, Cells.Columns.Count).End(xlToLeft).Column
For I = 0 To 4
For J = 10 To Dercol
Chaine = Split(Cells(24, I + J).Address, "$")(1)
Chaine = Chaine & "25" & ","
Liste = Liste & Chaine
J = J + 4
Next J
Liste = Left(Liste, Len(Liste) - 1)
.Cells(25, I + 4).Formula = "=AVERAGE(" & Liste & ")"
Liste = ""
Next I
.Range("D25:H25").AutoFill Destination:=.Range("D25:H50"), Type:=xlFillDefault
'ou
'.Range("D25:H50").FillDown
End With
Application.Calculation = modeCalc
Set ws = Nothing
End SubBonjour Bouben, Jean-Eric,
Je vous remercie pour votre aide à tous les deux. J'ai utilisé l'élément de réponse de bouben qui corrsepondait exactement à mon attente.
Je suis vraiment impressionné par la pertinence de tes réponses !
Mille merci
Batoine