daiman
Messages postés41Date d'inscriptionvendredi 5 octobre 2007StatutMembreDernière intervention17 mars 2008
-
4 mars 2008 à 21:18
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 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
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201823 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
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201823 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
NHenry
Messages postés15116Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention 9 mai 2024159 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
daiman
Messages postés41Date d'inscriptionvendredi 5 octobre 2007StatutMembreDernière intervention17 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.
NHenry
Messages postés15116Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention 9 mai 2024159 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
daiman
Messages postés41Date d'inscriptionvendredi 5 octobre 2007StatutMembreDernière intervention17 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?
daiman
Messages postés41Date d'inscriptionvendredi 5 octobre 2007StatutMembreDernière intervention17 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.
daiman
Messages postés41Date d'inscriptionvendredi 5 octobre 2007StatutMembreDernière intervention17 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)
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201823 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
daiman
Messages postés41Date d'inscriptionvendredi 5 octobre 2007StatutMembreDernière intervention17 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.
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201823 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()
daiman
Messages postés41Date d'inscriptionvendredi 5 octobre 2007StatutMembreDernière intervention17 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