Ajout de feuilles avec liens via un formulaire
Bonjour a tous,
Je suis nouveau sur le forum et pourtant il m'a bien servi pendant un long moment, mais la, je ne trouve pas, ou alors la solution est tellement simple, que cela ne m’étonne pas. A savoir que je suis novice en VBA. Voila le problème, j'ai une macro qui me permet de créer un formulaire. Puis je lance une autre macro qui va générer autant de feuilles que de lignes dans mon formulaire avec des cellules en lien avec le formulaire. Cela dit, si je dois changer une valeur dans le formulaire, cela ne vas pas changer ma cellule dans la nouvelle feuille. Je vois que mon problème viens de la definition de mes variables, mais je ne connais pas les codes, j'ai utilise formular1c1, mais pas comme il faut, je pense. Si vous pouvez m'aider a trouver un moyen pour que dans mes nouvelles feuilles je puisse avoir un lien du type formule =feuill1!B5. Sinon j'utilise un Excel English version.
Voici mes macros et le fichier en pièces jointes.
Merci d'avance pour vos réponses .
Cordialement,
Nicolas
Sub Formulaire()
Sheets("Hole_Chart").Select
Range("B5").Select
Do While Not IsEmpty(ActiveCell)
ActiveCell.Offset(1, 0).Select
Loop
Do While IsEmpty(ActiveCell)
UserForm.Description.SetFocus
UserForm.Show
If ActiveCell = "" Then Exit Do
ActiveCell.Offset(1, 0).Select
Loop
End SubPublic Sub Add_Details()
Dim RefCell As Range
Dim FinalRow As Range
Sheets("Hole_Chart").Select
' Determine how many name are on Hole_Chart sheet
Set FinalRow = Range("C5", Range("C5").End(xlDown).Address)
' Loop through each name on the Hole_Chart sheet
For Each RefCell In FinalRow
LastSheet = Sheets.Count
Sheets("Hole_Chart").Select
Letter = RefCell.Value
Description = RefCell.Offset(0, -1).Value
Qty = RefCell.Offset(0, 1).Value
NumberSize = RefCell.Offset(0, 2).Value
FormDiameter = RefCell.Offset(0, 3).Value
Diameter = RefCell.Offset(0, 4).Value
Chanfer = RefCell.Offset(0, 5).Value
FormDepth = RefCell.Offset(0, 6).Value
Depth = RefCell.Offset(0, 7).Value
Sheet = RefCell.Offset(0, 20).Value
NumberTolerance = RefCell.Offset(0, 19).Value
View = RefCell.Offset(0, 21).Value
RefCell.Offset(0, 22).Select
ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:="", SubAddress:= _
RefCell.Formula + "!A1", TextToDisplay:=RefCell.Formula + "!A1"
' Make a copy of Hole and move to end
Sheets("Hole_Template").copy After:=Sheets(LastSheet)
' rename the sheet and set B5 = to the description name
Sheets(LastSheet + 1).Name = RefCell
Range("E3").FormulaR1C1 = Description
Range("E16").Value = Depth
Range("I38").Value = Diameter
Range("N4").Value = Sheet
Range("D16").Value = FormDepth
Range("H38").Value = FormDiameter
Range("C5").Value = Qty
Range("C4").Value = Letter
Range("N5").Value = View
Range("N3").Value = NumberTolerance
Range("L9").Value = Chanfer
Range("G38").Value = NumberSize
Next
End Sub
Bonjour,
Voila le problème, j'ai une macro qui me permet de créer un formulaire.
Non ta macro sert juste à afficher le formulaire et non à le créér
Ce que tu veux faire c'est depuis l'USERFORM, pouvoir ajouter des données dans la feuille HOLE CHART ?
Ensuite créer tes feuilles depuis le bouton ADDDETAILS ??
A te relire
Bonjour à vous deux,
Avec la fonction Add_Details opérationnel.
Obliger de mettre un "_" (souligner) devant les noms des feuilles, la feuille 1004 génère une erreur, c'est un N° générique d'une erreur Excel
A+
re et salut Lhermite,
Bon Lhermite travaillait en même temps que moi sur le sujet...
En dehors de ce dont il parle, tu pourrais modifier les codes de ton fichier comme suit :
Dans le module, remplace la macro Formulaire par celle-ci :
Sub Formulaire()
UserForm.Show
End SubDans l'USERFORM, remplace toutes les macros et recopie en block celles-ci :
Private Sub UserForm_Initialize()
UserForm.Description.SetFocus
End Sub
Private Sub OK_Click()
Dim dlg As Integer
dlg = Sheets("Hole_Chart").Range("B" & Rows.Count).End(xlUp).Row + 1
With Range("B" & dlg)
Range("B" & dlg) = UserForm.Description.Value
.Offset(0, 1).Value = UserForm.Letter.Value
.Offset(0, 2).Value = UserForm.Quantity.Value
.Offset(0, 3).Value = UserForm.NumberSize.Value
.Offset(0, 4).Value = UserForm.FormDiameter.Value
.Offset(0, 5).Value = UserForm.Diameter.Value
.Offset(0, 6).Value = UserForm.Chanfer.Value
.Offset(0, 7).Value = UserForm.ListDepth.Value
.Offset(0, 8).Value = UserForm.Depth.Value
.Offset(0, 9).Value = UserForm.Reference.Value
.Offset(0, 10).Value = UserForm.Geometry.Value
.Offset(0, 11).Value = UserForm.ListArea.Value
.Offset(0, 12).Value = UserForm.Area.Value
.Offset(0, 13).Value = UserForm.Modifier.Value
.Offset(0, 14).Value = UserForm.First.Value
.Offset(0, 15).Value = UserForm.ListFirst.Value
.Offset(0, 16).Value = UserForm.Second.Value
.Offset(0, 17).Value = UserForm.ListSecond.Value
.Offset(0, 18).Value = UserForm.Third.Value
.Offset(0, 19).Value = UserForm.ListThird.Value
.Offset(0, 20).Value = UserForm.NumberTolerance.Value
.Offset(0, 21).Value = UserForm.Sheet.Value
.Offset(0, 22).Value = UserForm.View.Value
End With
Unload UserForm
End Sub
Private Sub Cancel_Click()
Unload UserForm
End SubAmicalement
Bonjour Dan et Lhermite, merci pour vos réponses,
Donc oui ma macro sert juste a afficher mon userform pour ensuite afficher les valeurs dans le tableaux.
J'ai remplacer mes macros ça fonctionne toujours.
J'ai utilise ton fichier, et oui "add_Details" est opérationnelle, seulement si je veux par la suite, modifier les valeurs directement dans le tableau, cela ne va pas changer la cellule correspondante dans la nouvelle feuille :S . Voila , c'est mon soucis.
Re,
Tu as plusieurs solutions.
Soit tu utilises des formules dans chacune des feuilles qui sont liées à la feuille Hole Chart
Soit tu places un bouton qui te permet d'appeler une macro qui modifiera les données dans les feuilles concernées
Soit tu construis une userform qui à l'ouverture appellera les données de la feuille Hole chart. Une fois les données corrigées, tu appelles un code qui modifie dans la feuille concernée.
A toi de voir ce que tu préfères
A te relire
Re,
Justement je pensais qu'on pouvait associer des cellules entre elles, via la macro pour générer autant de feuille que de ligne. Ainsi je peux changer directement dans le tableaux. Je pensais utiliser "FormulaR1C1" au lieu de "value", mais je ne vois pas comment implanter ça dans la macro.
Ma deuxième solution, c'est de lancer une autre macro pour mettre a jour. Mais je préfère changer directement dans le tableaux.
A savoir, qu'il peut y avoir plus de 100lignes donc plus de 100 feuilles a modifier manuellement, un peu long
Si dans ma macro on peut donc changer value par formulaR1C1, mais je vois pas comment?
Merci de votre aide
Re
Avec des formules à la place des valeur...
dans la sub Add_Détail changer..
With RefCell
Range("E3").FormulaLocal = "=Hole_Chart!" & .Offset(0, -1).Address
Range("E16").FormulaLocal = "=Hole_Chart!" & .Offset(0, 7).Address
Range("I38").FormulaLocal = "=Hole_Chart!" & .Offset(0, 4).Address
Range("N4").FormulaLocal = "=Hole_Chart!" & .Offset(0, 20).Address
Range("D16").FormulaLocal = "=Hole_Chart!" & .Offset(0, 6).Address
Range("H38").FormulaLocal = "=Hole_Chart!" & .Offset(0, 3).Address
Range("C5").FormulaLocal = "=Hole_Chart!" & .Offset(0, 1).Address
Range("C4").FormulaLocal = "=Hole_Chart!" & .Address
Range("N5").FormulaLocal = "=Hole_Chart!" & .Offset(0, 21).Address
Range("N3").FormulaLocal = "=Hole_Chart!" & .Offset(0, 19).Address
Range("L9").FormulaLocal = "=Hole_Chart!" & .Offset(0, 5).Address
Range("G38").FormulaLocal = "=Hole_Chart!" & .Offset(0, 2).Address
End WithMais tu a des erreurs de localisation et toutes les données ne sont pas présentes.
Tu dois supprimer les feuilles 1001 à 1004 déjà existantes.
A+
re,
Ma deuxième solution, c'est de lancer une autre macro pour mettre a jour. Mais je préfère changer directement dans le tableaux. A savoir, qu'il peut y avoir plus de 100lignes donc plus de 100 feuilles a modifier manuellement
Effectivement ce serait long.
Lhermite te propose une solution par formule qui va te permettre cela.
Garde toutefois en tête que si tu as 100 feuilles à raison de 12 formules par feuille, excel calculera 1200 formules à chaque changement que tu effectueras dans une seule des cellules de ta feuille Hole chart.
Amicalement
Re,
Nickel, je peux continuer grâce a cette ligne de code. Je vous remercie.
Désolé, je suis gourmand, mais est-il possible de faire la sélection de la colonne C5 jusqu’à la fin toute les 2 lignes, plutôt que toute les lignes comme dans l'exemple ci -dessous.
J'ai utilise une variable et step 2 mais sans succès.
Dim RefCell As Range
Dim FinalRow As Range
Sheets("Hole_Chart").Select
' Determine how many name are on Hole_Chart sheet
Set FinalRow = Range("C5", Range("C5").End(xlDown).Address)
' Loop through each name on the Hole_Chart sheet
For Each RefCell In FinalRowEn vous remerciant de votre aide
Re,
Je n'avais pas encore lu ton dernier poste quand je t'ai "concocté" c'est ébauche automatique.
J'ai mis des explications sur la feuille.
Comme déjà dis plus haut, tu n'a pas toutes les données renseignées sur les feuilles dessin.
J'ai laissé la sub Add_Details mais elle ne sert plus, tu peu la supprimer.
A+
<hors sujet> suis l'heureux proprio d'un RR
Merci lermite, j'arrive a comprendre les variantes pour ajouter mes feuilles.
Merci bien, de mon coter ça marche bien, il y a seulement la sélection toute les deux lignes, je l'ai indique dans l'un de mes derniers messages.
Amicalement,
Pourquoi toutes les 2 lignes ?
Une base de donnée est fortement plus compliquée si plusieurs lignes par data.
Vaux mieux trouver une autre solution.
En fait, j'ai besoin seulement de definir ma plage, plutot que toute les lignes seulement toute les 2 lignes.
Il faut que je redefinisse "FinalRow" est il possible? En utilisant step2 il me semble. J'ai change mon tableau.
Maintenant, mon RefCell est toute les 2 lignes., ou alors que je trouve un code qui tant que la cellule n'est pas vide je lance ma macro.
Dim RefCell As Range
Dim FinalRow As Range
Sheets("Hole_Chart").Select
' Determine how many name are on Hole_Chart sheet
Set FinalRow = Range("C5", Range("C5").End(xlDown).Address)
' Loop through each name on the Hole_Chart sheet
For Each RefCell In FinalRowTu ne répond pas à ma question...
POURQUOI TOUTES LES DEUX LIGNES
Désolé, c'est dans ma saisie, j'ai besoin de remplir 2 lignes pour une reference (RefCell),
donc comme je vais creer des feuilles a partir de cette référence, pour créer les autres je dois sélectionner toute les 2 lignes.
Ou alors l'autre solution, c'est de dire tant que la cellule n'est pas vide je lance ma macro.
Je t'envoie le fichier avec le tableaux pour y voir plus clair.
Même avec ton classeur je comprend pas, enfin bref, tu veux connaitre la ligne où tu peu mettre une nouvelle données ?
Si oui,
dim DerLig as Long
DerLig = Cells(Rows.Count, 3).End(xlUp).Row + 2
set RefCell = cells(Derlig,"C5')Mais compte plus sur moi pour remplir/modifier les données, comme dis plus haut, une BD comme ça est ingérable.
A+