[VBA Excel] Problème chemin absolu 2 classeurs - 2 chemins différents

Problème chemin absolu 2 classeurs - 2 chemins différents [VBA Excel] - VB/VBA/VBS - Programmation

Marsh Posté le 18-01-2012 à 21:20:57    

Bonsoir à tous,  
 
Comme le titre l'indique, j'ai un petit problème à propos d'un code utilisant des chemins absolus.
 
J'ai un classeur dans lequel il y a la macro. Cette macro remplit un tableau à l'aide de chiffres contenus dans un autre classeur ouvert mais qui n'est pas dans le même dossier.
 
Pour pouvoir aller chercher ces données, j'ai voulu faire passer le chemin de ce classeur dans une variable de type string. Le nom du fichier est entré par l'utilisateur dans un UserForm qui appelle ensuite ma Sub. J'ai donc une variable string Report_FileName contenant le nom du classeur externe.  
 
Pour le chemin, je fais :  
 

Code :
  1. Report_FileNamePath = Workbooks(Report_FileName).Path  ' Report_FileNamePath de type string
  2. Report_FileNameFullPath = Report_FileNamePath & "\" & Report_FileName  ' évidemment de type string aussi
  3. MsgBox(Report_FileNameFullPath) ' ---> OK !


 
Ensuite, c'est là que rien ne vas plus... J'essaye de boucler sur le classeur externe en utilisant cette variable  
 

Code :
  1. For i = 1 to 1000
  2. if Workbooks(Report_FileNameFullPath).Sheets("Tab 1" ).Cells(10,i).value="FRANCE" Then   ' le Workbooks(Report_FileNameFullPath) ne fonctionne pas (checker par MsgBox)
  3. [...]
  4. End If
  5. Next i


 
Auriez-vous une idée du problème?

Reply

Marsh Posté le 18-01-2012 à 21:20:57   

Reply

Marsh Posté le 19-01-2012 à 14:46:51    

Si tu veux aller verifier des infos dans un fichier il faut d'abord l'ouvrir.
Tu fais ton truc.
Tu le fermes.
 
Et comme tu es "obligé" de l'ouvrir (faudrait rechercher dans mes messages j'avais donné une methode pour ne pas etre obligé) bah tu n'as plus besoin du fullpath pour verifier ce qu'il y a en "Tab 1"


---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 19-01-2012 à 21:13:26    

Alex_94 a écrit :


 
J'ai un classeur dans lequel il y a la macro. Cette macro remplit un tableau à l'aide de chiffres contenus dans un autre classeur ouvert mais qui n'est pas dans le même dossier.
 
 


 
J'ai précisé justement que celui-ci était bien ouvert au moment de l'exécution.

Reply

Marsh Posté le 19-01-2012 à 21:34:38    

SuppotDeSaTante a écrit :

Si tu veux aller verifier des infos dans un fichier il faut d'abord l'ouvrir.
Tu fais ton truc.
Tu le fermes.
 
Et comme tu es "obligé" de l'ouvrir (faudrait rechercher dans mes messages j'avais donné une methode pour ne pas etre obligé) bah tu n'as plus besoin du fullpath pour verifier ce qu'il y a en "Tab 1"


donc il faut pas utiliser le fullpath mais le nom du classeur. [:le colonel moutarde:5]


---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 19-01-2012 à 21:49:28    

SuppotDeSaTante a écrit :


donc il faut pas utiliser le fullpath mais le nom du classeur. [:le colonel moutarde:5]


 
Oui justement j'ai bien essayé mais ça ne fonctionne pas. De plus, il me semblait qu'il faut que les 2 classeurs soient dans le même dossier pour faire cela.  
 
J'essaye d'utiliser le chemin complet (avec le nom du fichier inclus) parce qu'ils ne sont pas au même endroit. Après, je m'embête avec ça parce que le nom du classeur externe (source de données qui sera mise à jour) changera au cours du temps et devra être entrer par l'utilisateur à ce moment.

Reply

Marsh Posté le 19-01-2012 à 22:41:03    

Quand ton fichier est ouvert dans Excel seul son nom compte.
Donc si tu veux l'ouvrir tu utilises le chemin, logique. Et si tu veux l'atteindre c'est avec son nom court.
Pour l'ouvrir : C:\test.xls
Pour l'atteindre dans Excel : WorkBooks("test.xls" )
 
Sinon donne le code entier ;)


---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 19-01-2012 à 23:15:08    

Ok donc je laisse tomber l'idée du chemin.  
 
Reste que, je voudrais passer le nom du fichier dans une variable donc en l'occurence avoir un  
 

Code :
  1. Workbooks(FileName)  'Avec FileName = "test.xls"


 
au lieu de  
 

Code :
  1. Workbooks("test.xls" )


 
Ca marche bien quand les 2 fichiers sont au même endroit mais pas si ils ne sont pas dans le même dossier (en gros, sans chemin, Excel considère que c'est dans le même dossier et donc ne le trouve pas)

Reply

Marsh Posté le 20-01-2012 à 11:25:37    

Exemple, j'ai deux fichiers :
FichierSurC.xls qui est sur C:\
FichierSurD.xls qui est sur D:\
 
(oui je sais j'ai beaucoup d'imagination)
 
Avec une macro sur FichierSurC je vais ouvrir FichierSurD puis l'atteindre pour mettre à jour la cellule A1 :
 
En dur ca donne :

Code :
  1. Workbooks.Open "D:\FichierSurD.xls"
  2. Workbooks("FichierSurD.xls" ).Sheets("Feuil1" ).Cells(1, 1).Value = "Alex_94"


 
Deux solutions :
 
1) Tu passes en parametres dans deux variables le chemin et le nom du fichier.

Code :
  1. Sub Alex_94()
  2.    'Nos deux variables
  3.    Dim CheminFichier As String, NomFichier As String
  4.    
  5.    'On les alimente
  6.    CheminFichier = "D:\"
  7.    NomFichier = "FichierSurD.xls"
  8.    
  9.    'On ouvre le fichier avec le chemin et le document
  10.    Workbooks.Open CheminFichier & NomFichier
  11.    
  12.    'On va sur le fichier et on change la valeur de A1
  13.    Workbooks(NomFichier).Sheets("Feuil1" ).Cells(1, 1).Value = "Alex_94"
  14.  
  15. End Sub


 
2) Tu ne passes une seule variable, et a l'aide d'une petite routine on recupere le nom du fichier à l'interieur du fullpath

Code :
  1. Sub Alex_94()
  2.    'Une seule variable qui contient chemin et fichier
  3.    Dim CheminFichier As String
  4.    
  5.    'On les alimente
  6.    CheminFichier = "D:\FichierSurD.xls"
  7.    
  8.    
  9.    'On ouvre le fichier avec le chemin
  10.    Workbooks.Open CheminFichier
  11.    
  12. 'ici on va inverser l'ordre des caracteres de chaine pour trouver le premier "\" qui _
  13. nous indique le début du nom du fichier
  14.    'Declaration des variables
  15.    Dim InverseCheminFichier, EmplacementAntiSlash, NomFichier
  16.    
  17.    'on retourne l'ordre des caracteres
  18.    InverseCheminFichier = StrReverse(CheminFichier)
  19.    
  20.    'on cherche le premier \
  21.    EmplacementAntiSlash = InStr(1, InverseCheminFichier, "\", vbTextCompare)
  22.    
  23.    'S'il trouve un \
  24.    If EmplacementAntiSlash <> 0 Then
  25.        'on recupere le nom du fichier à l'interieur du fullpath
  26.        NomFichier = Right(CheminFichier, Len(CheminFichier) - i - 3)
  27.    End If
  28.    
  29.    'On va sur le fichier et on change la valeur de A1
  30.    Workbooks(NomFichier).Sheets("Feuil1" ).Cells(1, 1).Value = "Alex_94"
  31.  
  32. End Sub


 
Et aucun souci les deux fonctionnent bien chez moi, et partout d'ailleurs.


Message édité par SuppotDeSaTante le 20-01-2012 à 11:27:05

---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 22-01-2012 à 11:05:50    

Magnifique, je te remercie dje69r ;-)

Reply

Marsh Posté le 22-01-2012 à 22:53:38    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed