Excel => VBA => Intégrer variable dans une formule de plage pour insérer une formule

demonsares

XLDnaute Junior
Bonjour le Forum

Je me permet de poster ce message après avoir fait moult recherche sur différents sites et n’ayant trouvé aucune solution à mon problème.
J’espère que mon mail ne vous importunera pas et que, si possible, vous prendrez le temps de m’aider.

Mon problème est le suivant :

J’ai un classeur Excel, dedans une macro appelé : Création de Tableaux. Celle-ci demande à l’utilisateur un nombre de paliers (Nbr_palier).
Cette macro, va afficher 3 onglets masqués qui sont : Données brutes, Tableaux résultats et Graphique.
Elle va copier et coller ces 3 onglets autant de fois qu’a demandé l’utilisateur, les ranger dans le bon ordre : Données brutes 1 / Tableaux résultats 1 /
Graphique 1 / Données brutes 2 / Tableaux résultats 2 / Graphique 2. (Si Nbr_palier = 2).
Puis va masquer les onglets Données brutes, Tableaux résultats et Graphique.

Jusque-là j’y suis arrivé, la suite me bloque…
J’ai différentes formules dans mon onglet : Tableaux résultats. Mais, du coup lors du copier/coller, les formules de mes onglets Tableaux résultats 1, Tableaux résultats 2 restent liées à l’onglet Données brutes.
Ce que je souhaite mais que je n’arrive pas, c’est changer le nom des formules de mes onglets Tableaux résultats 1, Tableaux résultats 2, pour les lier aux onglets Données Brutes 1 et Données brutes 2.

Voici ma macro actuelle :

Code:
Sub Macro1()
 
Dim x As Integer
 Nbr_palier = 2
 
For i = 1 To Nbr_palier
 Sheets("Tableaux résultats " & i & "").Select
 Range("H2").FormulaR1C1 = "='Données brutes " & i & "'!R[2]C[-7]"
 
For x = 2 To 9 Step 1
 Range(Cells(7, x)).Formula = "=(MAX('Données brutes " & i & "'!Range(C[" & x & "]R4 :C[" & x & "]R993)))"

 'Range(Cells(7, x)).Formula = "=(MAX('Données brutes " & i & "'!Range(" & Colonne & "4:" & Colonne & "1000)))"
 
'Range(Cells(7, x)).Formula = "=(MAX('Données brutes " & i & "'!Range(" & Colonne & "4:" & Colonne & "1000)))"

 Next x
 
Next i
 
End Sub
 
[code]
 
Je viens sélectionner la feuille Tableaux Résultats i, avec i allant de 1 au nombre de palier voulu par l’utilisateur.
 Puis pour la cellule H2, je viens changer sa formule est la lier à l’onglet Données brutes i.
 Donc pour cela tout marche !
 Mais mon problème est juste en dessous.
 Dans la cellule B7 de l’onglet Tableaux résultats 1, nous mettons la formule permettant d’obtenir le MAX de la colonne B de l’onglet Données brutes 1.
 En effet, je pourrais compléter les cellules une à une.
 Mais ! Il y a 9 voies (car 9 sondes), alors j’ai cherché une formule permettant de décaler par colonne. Et faire que C7 obtient le MAX de la colonne C dans l’onglet Données brutes 1 puis D7 obtient le MAX de la colonne D dans l’onglet Données brutes 1, jusqu’à la colonne J.
 

Comme vous pouvez le voir j’ai fait plusieurs tests, et encore je ne les ai pas tous notés, plus d’une quizaine de tests… Et aucune réussite…
 Voila, j’espère que vous pourrez m’aider !!!
 
Je vous remercie d’avance, pour la lecture ou non de ce message.
 
Cordialement.
 

PS : Voici le code permettant de créer les différents onglets. J'imagine bien entendu que vous allez le trouver... Moche, et très long, mais j'ai eu très peu de notions en VBA. Je fais donc ce que j'appelle du bricolage, je cherche ce que j'ai besoin et l'adapte à mon besoin.
 
[code]
 

Sub Création_tableau_MACRO_final()
 
'Dimenssionne les variables utilisées pour la Macro
 
Dim Nbr_palier As String
 Dim Nbr_palier2 As String
 Dim Palier As String
 Dim Tolérance As String
 Dim y As Integer
 Dim x As Integer
 
'Permet de demander à l'utilisateur de rentrer une valeur
 Nbr_palier = InputBox("Combien de palier voulez-vous ?")
 'Fais le nombre rentré par l'utilisateur -1 car on a déjà un tableau
 Nbr_palier2 = Nbr_palier - 1
 
a = 12
 p = 5
 t = 5
 c = 2
 e = 1
 
'Boucle FOR allant de 1 au nombre de paliers rentrés par l'utilsiateur
 For y = 1 To Nbr_palier2
 
'Sélectionne l'onglet " corrections sondes"
 Sheets("corrections sondes").Select
 'Prend la plage de la cellule (2,1) = A2 à (9,11) = K9 et copie le tout dans la cellule (a,1) soit A12
 Range(Cells(2, 1), Cells(9, 11)).Copy Destination:=(Cells(a, 1))
 'Nettoie la cellule C12
 Cells(a, 3).Clear
 a = a + 10
 Next y
 



'Boucle FOR allant de 1 au nombre de paliers rentrés par l'utilsiateur
 For b = 1 To Nbr_palier
 'Demande la valeur du palier 1, tolérance1 puis palier2, tolérance2 etc...
 Palier = InputBox("Rentrez la valeur du palier " & e & " : ")
 Tolérance = InputBox("Rentrez la tolérance du palier " & e & " (±) : ")
 'Sélectionne l'onglet "Schéma"
 Sheets("Schéma").Select
 'Affecte les variables "palier" et "tolérance" à des cellules qui sont incrémentées de 1 pour chaque palier choisit
 Cells(p, 1) = Palier
 Cells(t, 3) = Tolérance
 'Sélectionne l'onglet " corrections sondes"
 Sheets("corrections sondes").Select
 'Place la valeur du palier dans les tableaux corrections sondes
 Cells(c, 3) = Palier

 'Incrémente chaque valeur pour la boucle suivante
 p = p + 1
 t = t + 1
 c = c + 10
 e = e + 1

 Next b

 ' ================================================
 
Worksheets("Données brutes").Visible = True
 Worksheets("Tableaux résultats").Visible = True
 Worksheets("Graphique").Visible = True
 

For Z = 1 To Nbr_palier
 Sheets("Données brutes").Select
 With ActiveWorkbook.ActiveSheet
 .Copy After:=Worksheets("Données brutes")
 End With

 ActiveSheet.Name = "Données brutes " & Z
 
s = Sheets.Count - 1
 For i = 1 To s
 Sheets("Données brutes " & Z).Select
 Sheets("Données brutes " & Z).Move After:=Sheets(i)
 Next i
 
' ======================================================

 Sheets("Tableaux résultats").Select
 With ActiveWorkbook.ActiveSheet
 .Copy After:=Worksheets("Tableaux résultats")
 End With

 ActiveSheet.Name = "Tableaux résultats " & Z
 
s = Sheets.Count - 1
 For i = 1 To s
 Sheets("Tableaux résultats " & Z).Select
 Sheets("Tableaux résultats " & Z).Move After:=Sheets(i)
 Next i
 
' =======================================================
 
Sheets("Graphique").Select
 With ActiveWorkbook.ActiveSheet
 .Copy After:=Worksheets("Graphique")
 End With

 ActiveSheet.Name = "Graphique " & Z
 
s = Sheets.Count - 1
 For i = 1 To s
 Sheets("Graphique " & Z).Select
 Sheets("Graphique " & Z).Move After:=Sheets(i)
 Next i
 
Next Z
 
Worksheets("Données brutes").Visible = False
 Worksheets("Tableaux résultats").Visible = False
 Worksheets("Graphique").Visible = False
 
End Sub
 

gosselien

XLDnaute Barbatruc
Re : Excel => VBA => Intégrer variable dans une formule de plage pour insérer une for

Bonjour,

je ne saurai pas t'aider mais il est vivement conseillé de déposer ici (par "mode avancé") un fichier anonymisé...
comment veux tu que les spécialistes grands VBA lisent (pas moi donc) et comprennent l'ensemble de ton code sans le fichier :)
P.
 

Dranreb

XLDnaute Barbatruc
Re : Excel => VBA => Intégrer variable dans une formule de plage pour insérer une for

Bonsoir.

À priori, en aveugle, je dirais ça :
VB:
Sub Macro1()
Dim FCbl As Worksheet, P As Long
Const Nbr_palier = 2
For P = 1 To Nbr_palier
   Set FCbl = Worksheets("Tableaux résultats " & P)
   FCbl.[H2].FormulaR1C1 = "='Données brutes " & P & "'!R4C1"
   FCbl.[B7:J7].FormulaR1C1 = "=MAX('Données brutes " & P & "'!R4C:R1000C)"
   Next P
End Sub
 
Dernière édition:

demonsares

XLDnaute Junior
Re : Excel => VBA => Intégrer variable dans une formule de plage pour insérer une for

Oui c'est vrai j'aurais du joindre le fichier... Je m'en excuse... Merci Dranreb mais j'ai réussit à me débloquer.
Mon retour :
J'ai donc modifié la formule pour une case et avec un enregistrement de macro je l'ai étiré jusqu'à un nombre de case fixe. J'ai prit ce code, et je l'ai modifié pour mettre la dernière cellule de l'étirement en variable.
Voilà :)
Sinon Dranreb comment met tu le code en couleur et sous cette forme ? C'est la première fois que je poste sur ce genre de forum. D'habitude je ne fais que regarder...
 

Discussions similaires

Réponses
1
Affichages
119

Statistiques des forums

Discussions
311 720
Messages
2 081 909
Membres
101 836
dernier inscrit
karmon