" Modifier une partie d'une macro à partir d'une autre macro " [Résolu]

Amatheux 7 Messages postés dimanche 10 janvier 2016Date d'inscription 10 janvier 2016 Dernière intervention - 10 janv. 2016 à 16:16 - Dernière réponse : NHenry 14011 Messages postés vendredi 14 mars 2003Date d'inscriptionModérateurStatut 17 décembre 2017 Dernière intervention
- 11 janv. 2016 à 20:24
VBA Office (Excel, Word ...) Posez votre question Signaler Répondre au sujet
Bonjour tout le monde,

Je suis complètement novice en VBA, et à mes heures perdues j'essaie de m'amuser à apprendre comment faire des macros sous excel.
N'ayant pas de formation là dedans, j'arrive tant bien que mal à bidouiller, mais là je suis sur un problème dont je n'arrive pas résoudre:
" Modifier une partie d'une macro à partir d'une autre macro en utilisant un userform".
Je suis tombé dans un "vieux" forum donnant le code suivant:


Public Adresse_Serveur As String
__________________________________________
Sub Ma_Macro()
Dim Ttl As Long
Dim i As Integer
Ttl = 1
For i = 1 To 10
Ttl = Ttl * i
Next
Workbooks.Open Filename:="essai" & gmao & ".slk"
End Sub
___________________________________________
Sub usf()
UserForm1.Show
End Sub



En fait j'aimerai faire quelque chose d'équivalent :
1) Une première macro qui ouvre une page internet et qui la recopie sur une page excel comme celle-ci:




Sub import()
' import Macro
With ActiveSheet.QueryTables.Add(Connection:= _
"URL;http://www.turfomania.fr/fiches/jockeys/gelormini-g.html?idjockey=7721", _
Destination:=Range("$A$1"))
.Name = "gelormini-g.html?idjockey=7721_2"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = False
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.WebSelectionType = xlEntirePage
.WebFormatting = xlWebFormattingAll
.WebPreFormattedTextToColumns = True
.WebConsecutiveDelimitersAsOne = True
.WebSingleBlockTextImport = False
.WebDisableDateRecognition = False
.WebDisableRedirections = False
.Refresh BackgroundQuery:=False
End With
End Sub

2) Puis une deuxième macro qui, avec un userform, me permettrait d'exécuter la première macro mais avec la nouvelle adresse internet que j'aurai rentrée dans le userform.

Je ne sais pas si vous avez un peu de temps pour vous plonger dans ce problème?
En tout cas ça m'aiderai bien...!

bien cordialement,
Amatheux
Afficher la suite 

10 réponses

Répondre au sujet
NHenry 14011 Messages postés vendredi 14 mars 2003Date d'inscriptionModérateurStatut 17 décembre 2017 Dernière intervention - 10 janv. 2016 à 16:25
0
Utile
9
Comme précédemment suggéré, je te conseil de passer un paramètre à ta Sub Import afin de lui donner l'URL cible.
Amatheux 7 Messages postés dimanche 10 janvier 2016Date d'inscription 10 janvier 2016 Dernière intervention - 10 janv. 2016 à 17:53
ça coince toujours !
Il me met en jaune la dernière ligne d'instructions

".Refresh BackgroundQuery:=False"
de la deuxième macro !
Amatheux 7 Messages postés dimanche 10 janvier 2016Date d'inscription 10 janvier 2016 Dernière intervention - 10 janv. 2016 à 18:07
En fait je me rend compte que je n'ai pas une macro qui puisse me réclamer l'adresse internet sur laquelle la macro import puisse s'exécuter...!
Amatheux 7 Messages postés dimanche 10 janvier 2016Date d'inscription 10 janvier 2016 Dernière intervention - 10 janv. 2016 à 18:35
En analysant le code du bouton de remplissage qui est le suivant:

__________________________________________________________
Private Sub CommandButton1_Click()

Dim VBComp As VBComponent
Dim Anciene_Adresse As String, Nouvelle_Adresse As String, Recherche As String
Dim i As Integer

If TextBox2 = "" Then
MsgBox "Entrer l'adresse du nouveau serveur", vbInformation, "Attention:"
Exit Sub
End If

Anciene_Adresse = TextBox1.Text
Nouvelle_Adresse = TextBox2.Text

Set VBComp = ActiveWorkbook.VBProject.VBComponents("Module1")

With VBComp
For i = 1 To .CodeModule.CountOfLines
Recherche = .CodeModule.Lines(i, 1)
Recherche = Replace(Recherche, Anciene_Adresse, Nouvelle_Adresse)
.CodeModule.ReplaceLine i, Recherche
Next
End With

Sheets("Feuil1").Range("A2") = TextBox2.Text
Ma_Macro (TextBox2)
Unload Me


End Sub
__________________________________________________________
Private Sub CommandButton2_Click()
Unload Me
Ma_Macro (TextBox2)
End Sub
__________________________________________________________
Private Sub UserForm_Initialize()
Adresse_Serveur = Sheets("Feuil1").Range("A2").Text
TextBox1 = Adresse_Serveur

End Sub
__________________________________________________________

" TextBox2 " joue le rôle de " adresse " dans mes précédentes macros.
J'ai donc essayé d'incorporer la ligne de commande
" import (TextBox2) " un peu de partout dans les différentes macros ci-dessus, mais ça ne fonctionne toujours pas....! J'ai même Excel qui se ferme par frustration...!
Amatheux 7 Messages postés dimanche 10 janvier 2016Date d'inscription 10 janvier 2016 Dernière intervention - 10 janv. 2016 à 18:50
En étant moins ambitieux, j'ai fait modifié ma première macro par :
__________________________________________________________
Sub Appel()
'
' Appel Macro
Dim adresse As String
adresse = Range("A1").Value
import (adresse)
End Sub

__________________________________________________________

Il me suffit alors de rentrer l'adresse voulue en A1 puis de lancer la macro Appel et ça marche...!
Faudra que j'y revienne une autre fois avec l'histoire du bouton qui permet de changer les choses....!

Encore merci M. Henry pour cet échange qui m'a permis d'apprendre quelque chose aujourd'hui..!

Bien cordialement,
A très bientôt !
NHenry 14011 Messages postés vendredi 14 mars 2003Date d'inscriptionModérateurStatut 17 décembre 2017 Dernière intervention - 11 janv. 2016 à 20:24
De rien :)
Commenter la réponse de NHenry

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.