Macro pour changer la macro

Résolu
daiman Messages postés 41 Date d'inscription vendredi 5 octobre 2007 Statut Membre Dernière intervention 17 mars 2008 - 4 mars 2008 à 21:18
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 - 8 mars 2008 à 23:58
bonjour,
j'ai créé une macro qui va  chercher une feuille xls sur un serveur et la copie dans ma feuille xls active. sa fonctionne très bien, sauf que des fois l'adresse du serveur change, sa n'arrive pas souvent mais sa arrive. quand c'est moi qui suis là je remet à jour la noucelle adresse mais mes collègue ne save pas comment faire.
je voudrais créé une macro qui va changer, quand je la solicite via un bouton par exemple, l'adresse du serveur dans la macro d'origine.

voilà un morçeau de mon code:
Workbooks.Open Filename:="[file://\\Mrf67-tw\Externe_MF67\Resultat\ \\Mrf67-tw\Externe_MF67\Resultat\]" & gmao & ".slk"

j'aimerais que la macro, via un userform, change uniquement "[file://mrf67-tw/Externe_MF67/Resultat/ \\Mrf67-tw\Externe_MF67\Resultat\]".
merci d'avance

ma passion c'est d'apprendre.

16 réponses

cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
7 mars 2008 à 23:04
Tu dois enlever les guillemets quand tu mets une variable dans un appel comme celui-ci
Workbooks.Open Filename:=<strike>"adresse_serveur"</strike> & gmao & ".slk"

Workbooks.Open Filename:=adresse_serveur & gmao & ".slk"
ou peut-être comme ceci s'il n'y a pas de "backslah" intégré
Workbooks.Open Filename:=adresse_serveur & "" & gmao & ".slk"

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
3
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
4 mars 2008 à 23:08
Tu pourrais essayer avec
Application.GetOpenFilename

Je ne suis pas certain si tu pourras accéder aux lecteurs réseaux, par contre... Je n'ai pas de réseau ici (je ne suis pas au bureau...)

Si ça fonctionne et que tu peux accéder aux lecteurs réseaux, il te resterait à faire une gestion d'erreur lorsque tu tentes d'ouvrir le fichier. Si le numéro d'erreur est le bon, tu affiches cette boîte de dialogue et tu sauvegardes le chemin dans un fichier ou la base de registre pour les sessions suivantes. Voir les fonctions de base de registre
GetSetting et SaveSetting

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
0
NHenry Messages postés 15116 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 9 mai 2024 159
5 mars 2008 à 08:51
Bonjour

Mieux que le registre, tu peux utiliser "ThisWorkbook.CustomDocumentProperties", comme cela, l'adresse est enregistrée dans le fichier Excel, donc toute personne recevant le fichier auront la maj.

Dans Word, j'Excel. (juste pour la citation)
VB (6, .NET1&2), C++, C#.Net1
Mon site
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
5 mars 2008 à 11:02
Merci NHenry,
On en apprend toujours...

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
daiman Messages postés 41 Date d'inscription vendredi 5 octobre 2007 Statut Membre Dernière intervention 17 mars 2008
5 mars 2008 à 23:33
merci de l'aide, je vais essayé.

ma passion c'est d'apprendre.
0
daiman Messages postés 41 Date d'inscription vendredi 5 octobre 2007 Statut Membre Dernière intervention 17 mars 2008
6 mars 2008 à 21:34
bonjour messieur,
on recois par mail la nouvelle adresse.
ce que j'aurais voulu faire c'est de poivoir changé quand j'en ai envie l'adresse du serveur.
c'est a dire avant même de lancer la macro récupérant mon xls je voudrais avoir la possibilité de clicker sur un bouton avec un inputbox. là je rentre ma nouvelle adresse. biensur lorsque je soliciterais ma macro de recupe l'adresse devrait être mis à jour. j'ai penser à jouet avec des variable mais je n'y arrive pas.
exemple:
dim adresse_serveur as string 
On Error Resume Next 
gmao = Application.InputBox(Prompt:="n'oubliez pas d'extraire dans résultat le RMP05 " & "& gmao & ", Title:="entrez votre login GMAO")
Workbooks.Open Filename:="adresse_serveur" & gmao & ".slk" 'C:\Documents and Settings\ZINDIEN\Bureau\29.10.07.rpm05 au top" & gmao & ".slk"
  If Err.Number <> 0 Then
MsgBox "Erreur: le ficher " & gmao & ".slk n'existe pas ou le serveur ne fonctionne pas.", , "Message erreur"

call macroserveur
Exit Sub
Else
Windows(gmao & ".slk").Activate........

sub macroserveur
adresse_serveur= inputbox "........
end sub
ma passion c'est d'apprendre.
0
NHenry Messages postés 15116 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 9 mai 2024 159
7 mars 2008 à 09:12
Bonjour

Il faut que tu mette ton "dim adresse_serveur as string " en-dehors de toutes fonctions/sub dans un module, éventuellement changer sa visibilité : "Public adresse_serveur as string"

Penses à toujours mettre "Option Explicit" en haut de tes modules/form, ...

Dans Word, j'Excel. (juste pour la citation)
VB (6, .NET1&2), C++, C#.Net1
Mon site
0
daiman Messages postés 41 Date d'inscription vendredi 5 octobre 2007 Statut Membre Dernière intervention 17 mars 2008
7 mars 2008 à 16:20
bonjour NHenry,
j'ai déclarer dans le module 10"public adresse_serveu as string".
dans le module 17 la macro suivante lui donne une valeur:
Sub macroserveur()
adresse_serveur = InputBox("")
MsgBox adresse_serveur
End Sub

pour finir dans le module 17 j'execute la macro suivante:
On Error Resume Next 
gmao = Application.InputBox(Prompt:="n'oubliez pas d'extraire dans résultat le RMP05 " & "& gmao & ", Title:="entrez votre login GMAO")
Workbooks.Open Filename:="adresse_serveur" & gmao & ".slk"

resultat sa fonctionne pas...adresse_serveur est vide...pourquoi?

merci de ton aide
ma passion c'est d'apprendre.
0
NHenry Messages postés 15116 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 9 mai 2024 159
7 mars 2008 à 16:27
Bonjour

public adresse_serveu as string
ou
public adresse_serveur as string
?

Passe-tu dans "macroserveur" avant de passer dans la dernière partie de ton message ?

Dans Word, j'Excel. (juste pour la citation)
VB (6, .NET1&2), C++, C#.Net1
Mon site
0
daiman Messages postés 41 Date d'inscription vendredi 5 octobre 2007 Statut Membre Dernière intervention 17 mars 2008
7 mars 2008 à 22:10
oui j'execute bien macroserveur avant.
je me trompe peut être sur la façon de déclarer "le public adresse_serveur as string"
donc, je vais te dire comment je fais: je vais dans un module vièrge et j'écris "public adresse_serveur as string" sans sub ni end?
sinon le "r" est un oublie lors de l'ecriture du message.

ps: impressionnant ton CV

ma passion c'est d'apprendre.
0
daiman Messages postés 41 Date d'inscription vendredi 5 octobre 2007 Statut Membre Dernière intervention 17 mars 2008
8 mars 2008 à 14:34
merci,
sa fonctionne très bien maintenant. avec votre aide j'ai réussi à faire exactemnt ce que je voulais.
j'en profite pour une autre question.

est-il possible de supprimer ou d'ajouté des élément dans un "case" par le biais d'une autre macro?
vous l'aurez compris, toujour avec un bouton.
voilà le style de "case" que j'emploie:
Do While Feuil2_VAR <> ""
       Sheets("Données Brut").Select
       Rows(M + Format(Feuil2_lgn)).Select
       Cellule_Feuil2_VAR = Worksheets("Données Brut").Range("M" + Format(Feuil2_lgn)).Value
       cellule_A = Worksheets("Données Brut").Range("A" + Format(Feuil2_lgn)).Value
       B = Worksheets("Données Brut").Range("M" + Format(Feuil2_lgn)).Value
    
        If cellule_A = "" Then Exit Do
       Feuil2_VAR = "TRUE"


      Sheets("Données Brut").Select
      Select Case B 
                  Case 1928, 3276, 3286, 3279, 1924, 1925, 1926, 2136, 1929, 1930, 1931,1967, 1976
        Call copy(Feuil2_lgn, Feuil3_lgn)
       
Feuil3_lgn = Feuil3_lgn + 1
End Select
Feuil2_lgn = Feuil2_lgn + 1
Loop

ma passion c'est d'apprendre.
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
8 mars 2008 à 15:20
Si je comprends bien ce que tu cherches à faire, je dirais que non, ce n'est pas possible, à moins de passer par VBE, ce qui me paraît bien compliqué pour rien...

Plutôt que de passer par un Select Case comme tu le fais, tu pourrais inscrire tes valeurs dans une feuille (qui pourrait être masquée...) et charger un tableau de ces valeurs. Il te resterait à faire tes vérifications sur ce tableau plutôt que sur des valeurs en dur dans le code.

Autres choses:
tu utilises la fonction Format mais tu n'y mets aucun paramètre de formatage... Si Feuil2_lgn est de type String, utilise CLng(Feuil2_lgn). Si c'est un Long, n'utilise rien d'autre.
Range("M" & Feuil2_lgn).Value

Remarque le & plutôt que +

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
0
daiman Messages postés 41 Date d'inscription vendredi 5 octobre 2007 Statut Membre Dernière intervention 17 mars 2008
8 mars 2008 à 22:11
ah! oui. comme sa je pourrais changer mes donnée à volonté. je comprend le rpincipe mais contre je n'ai aucune idée de comment faire. je n'ai encore jaimais utiliser des tableau.
encore merci.

ma passion c'est d'apprendre.
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
8 mars 2008 à 22:58
Comme tu ne connais pas le nombre de valeurs à tableau, tu dois utiliser un tableau dynamique (sans dimension). Tu le redimensionnes au fur et à mesure avec Redim Preserve.

Voici un exemple avec des valeurs en colonne A de Feuil1:
    Dim I As Long, nbLignes As Long, Idx As Long
    Dim Tablo()
   
    ReDim Tablo(0)
   
    nbLignes = Sheets("Feuil1").Cells(Rows.Count, "A").End(xlUp).Row
   
    For I = 1 To nbLignes
        ReDim Preserve Tablo(Idx)
        Tablo(Idx) = Range("A" & I)
        Idx = Idx + 1
    Next

Il te reste à boucler ce tableau pour savoir si un nombre est présent. Une petite fonction toute simple pourra le faire...

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
0
daiman Messages postés 41 Date d'inscription vendredi 5 octobre 2007 Statut Membre Dernière intervention 17 mars 2008
8 mars 2008 à 23:47
avec ton code je crée un tableau. mais je n'arrive pas à voir comment on peu l'employé comme un case.  à sa voir comparer la valuer de chaque cellule d'une feuille non vide avec les donnée du select case. et lorsqu'il y a egalité on recopie la ligne entière dans une autre feuille.
 il faudrais arrivé à faire la même chose avec un tableau. a savoir recopier dans une autre feuille toute les ligne dont u moins un cellule est égale à une valeur contenu dans le tableau. n'ayant pas l'habitude des tableau j'ai du mal à voir.
merci d'avance

ma passion c'est d'apprendre.
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
8 mars 2008 à 23:58
Tu dois laisser tomber le Select Case et plutôt te créer une Function comme celle-ci

Function IsInTablo(Tablo, Valeur) As Boolean
    Dim I As Long
   
    For I = 0 To UBound(Tablo)
        If Valeur = Tablo(I) Then
            IsInTablo = True
            Exit Function
        End If
    Next
End Function

Pour vérifier si une valeur est dans la liste (tableau), tu n'as qu'à appeler cette Function de cette manière dans ta boucle de vérification.

If IsInTablo(Tablo, Range("A" & i) Then
    MsgBox "La valeur est dans le tableau"
End If

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
0
Rejoignez-nous