VBA : Intégration de variable dans une selection de plage par rapport à un autre onglet

  • Auteur de la discussion Oparion
  • Date de début

Oparion

Nouveau membre
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

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
 

Jerome MULDER

Habitué
Bonjour,

Si cela peut t'aider:

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.

MAX = Columns("C:C").Find("*", Range("C1"), , , xlByRows, xlPrevious).Row
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 134
Messages
6 718 077
Membres
1 586 394
Dernier membre
Manoushk
Partager cette page
Haut