[VBA] Modification du code VBA de code VBA
Bonsoir,
Je sais qu'il y a beaucoup plus simple (notamment en utilisant une cellule fixe dans le tableau, modifiable par VBA), mais, savez-vous s'il est possible de modifier du code VBA à l'aide d'un autre code VBA.
Par exemple, si j'ai un code simple :
Private Sub CommandButton2_Click()
Cells(9, 8).Value = Cells(6, 6).Value * (50 / 100) * (11.5 / 100)
End Sub
Puis-je agir sur les valeurs 50 / 100
ou 11.5 / 100
Je peux, par exemple, faire apparaître un UserForm, proposant de modifier certaines valeurs fixes qui s'appliquent à de nombreuses cellules dans le tableau. Si j'inscrit 22 dans le premier champ et 17 dans le second j'obtiendrais :
Private Sub CommandButton2_Click()
Cells(9, 8).Value = Cells(6, 6).Value * (22 / 100) * (17 / 100)
End Sub
Et le bouton en question produirait donc un calcul différent.
Bonne soirée !
Slt,
à tester
Sub ChangeLineInSubs()
Dim myBook As Workbook
Dim i
Dim j
For Each myBook In Application.Workbooks
For i = 1 To myBook.VBProject.VBComponents.Count
For j = 1 To myBook.VBProject.VBComponents(i).CodeModule.CountOfLines
If myBook.VBProject.VBComponents(i).CodeModule.Lines(j, 1) = "Cells(9, 8).Value = Cells(6, 6).Value * (50 / 100) * (11.5 / 100)" Then
myBook.VBProject.VBComponents(i).CodeModule.DeleteLines j
myBook.VBProject.VBComponents(i).CodeModule.InsertLines j, "Cells(9, 8).Value = Cells(6, 6).Value * (22 / 100) * (17 / 100)"
End If
Next j
Next i
Next myBook
End Sub
Bonjour à tous,
Si j'ai bien compris, il n'y aurait pas besoin d'aller modifier le code à l'aide d'un code. Il s'agirait plutôt de paramétrer une instruction en fonction de valeurs saisies dans des champs.
si ces champs sont les textbox TextBox1 et TextBox2 (par exemple) dans un UserForm:
Private Sub CommandButton2_Click()
Cells(9, 8).Value = Cells(6, 6).Value * (TextBox1.Value / 100) * (TextBox2.Value / 100)
End Sub
Ces textbox retournant un string, il serait peut-être nécessaire de convertir ces string en numérique à l'aide de fonction de conversion(CInt,CDbl,....). A voir
A+
Bonjour à tous,
Une proposition via inputbox...
Private Sub CommandButton2_Click()
Dim a As Integer, b As Integer
a = InputBox("Valeur 1?", "Valeur 1")
b = InputBox("Valeur 2?", "Valeur 2")
Cells(9, 8).Value = Cells(6, 6).Value * (a / 100) * (b / 100)
End Sub
Cordialement,
Bonjour,
Attention, ce genre de manœuvre n'est pas anodine !
Voici un code qui remplace les valeurs :
Private Sub CommandButton1_Click()
Dim mModule As Object
Dim Ligne As String
Dim Changer As Boolean
Dim I As Integer
For Each mModule In ActiveWorkbook.VBProject.VBComponents
'évite le module de la Form
If mModule.Name <> Me.Name Then
'boucle sur les lignes de code
For I = 1 To mModule.CodeModule.CountOfLines
Ligne = mModule.CodeModule.Lines(I, 1)
If InStr(Ligne, TextBox1.Text) <> 0 Then
Ligne = Replace(Ligne, TextBox1.Text, TextBox3.Text)
mModule.CodeModule.ReplaceLine I, Ligne
Changer = True
End If
Ligne = mModule.CodeModule.Lines(I, 1)
If InStr(Ligne, TextBox2.Text) <> 0 Then
Ligne = Replace(Ligne, TextBox2.Text, TextBox4.Text)
mModule.CodeModule.ReplaceLine I, Ligne
Changer = True
End If
Next I
End If
Next mModule
If Changer = True Then MsgBox "Au moins un des deux remplacements a été effectué !"
End Sub
Dans le TextBox1, la première des valeurs à remplacer, dans le TextBox2, la seconde valeur à remplacer, dans le TextBox3, la valeur de remplacement de la première valeur et dans le TextBox4, la valeur de remplacement de la seconde valeur. Pour plus de facilité, voici un classeur exemple :
Merci pour vos réponses ; en effet ce genre d'opération n'est pas courant.
Il y a beaucoup d'informations à modifier ; je vais tester deux méthodes.
Celle que vous proposez et la méthode qui consiste à créer une feuille Excel protégée, où toutes les données pourront être modifiées via les champs de l'UserForm.
Merci beaucoup pour votre aide !
Bonne journée.