code VB à adapter pr nvelle architecture

chroberto

XLDnaute Nouveau
salut le FORUM
je me permets de solliciter de l'aide car j'ai ce code que je dois modifier car l'architecture de mon fichier doit-être modifié aussi. ce code permet de faire une recherche dans une feuille4 qui se trouvais dans le même fichier excel que mes tableaux à remplir. aujourd'hui cette feuille4 va devoir faire l'objet d'un fichier propre.
en somme il y aura 2 fichiers dans un dossier:
fichier A (tableaux à remplir)
fichier B (Bdd feuille4)
...et le hic c'est qu'il y aura des copies de ce dossier par mois.
je souhaiterais pr faire simple, indiquer à ma macro qu'il faut qu'elle récupère le fichier B avec la feuille4 dans le même dossier où ce trouve le fichier A avec cette macro?
en gros un code qui permet de rechercher un nom de fichier dans le répertoire du fichier ouvert?

quelqu'un connaitrait-il un code pour rechercher l'adresse du fichier ouvert?
du genre "ActiveWorkbook.Path"
mais je ne sais pas comment l'adapter...
pourriez-vous me filer un coup de main?
merci par avance et n'hésitez à me contacter.

a + le forum et merci par avance pr tte proposition



Code:
Sub PLAY()

bas = [A65000].End(3).Row
dcol = [IV4].End(xlToLeft).Column - 2
Range("C5", Cells(bas, dcol)).ClearContents
[COLOR="Red"]avant la feuille4 était dans le même fichier, aujourd'hui j'aurais 
besoin de modifier cette ligne de code pour 
mettre à la place l'adresse du fichier où se situera cette feuille4[/COLOR]
For k = 2 To Feuil4.[A65000].End(3).Row
col = Application.Match(Feuil4.Cells(k, 3), Range("C3", Cells(3, dcol)), 0)
lig = Application.Match(Feuil4.Cells(k, 1), Range("A5:A" & bas), 0)
On Error Resume Next
Cells(lig + 4, col + 2) = Cells(lig + 4, col + 2) + 1
If Err > 0 Then Err.Clear
Next
End Sub
 

chroberto

XLDnaute Nouveau
Re : code VB à adapter pr nvelle architecture

bonjour gilbert_RGI et merci pr ta rapidité,
j'ai testé ton code mais il m'ouvre l'explorateur pr que je lui indique le fichier à ouvrir et ensuite la recherche ne s'effectue même pas?!?! :confused:
n'y aurait-il pas un moyen qu'il ouvre le fichier tout seul et que la recherche s'effectue comme si la feuille était dans le fichier? comme avant quoi?
merci de m'éclairer,
cordialement
 

solquagerius

XLDnaute Junior
Re : code VB à adapter pr nvelle architecture

Bonjour,

j'ai écrit une macro pour gérer les ouvertures de fichiers

le principe :
il y a une variable "chemin" : chaine de caractère qui contient l'adresse du fichier.

Code:
chemin = ouverture_fichier(condition, texte)

condition est une chaine de caractère qui pose une condition sur le nom du fichier (ex : condition = "foot", la macro n'ouvrira aucun document qui n'a pas le mot foot dans son nom. Si condition = "", on accepte tous les fichiers).
texte est une chaine de caractère pour la boite de dialogue qui s'ouvre (texte = "choisissez un fichier" par exemple).

Si tu connais le chemin, il faut juste l'indiquer... chemin = "blablabla"

Une fois qu'on a le chemin :

Code:
set doc = ouvrir(chemin,true ou false)

doc est déclaré en workbook.
la deuxième variable permet de choisir si on veut ouvrir le fichier en visible (true) ou en caché (false).

ensuite il y a la fonction pour fermer le doc : fermer(doc)

Pour sélectionner une feuille dans le doc :
set feuille = doc.sheets(index)

feuille est déclarée en worksheet. Et je pense que c'est à peu près tout ! :)

Ce module est à améliorer... (je dois le faire depuis un moment :p)

s'il y a une arborescence spécifique pour le fichier, il est possible d'aller le chercher automatiquement.

Solquagerius
 

Pièces jointes

  • fichiers.xls
    26 KB · Affichages: 65
  • fichiers.xls
    26 KB · Affichages: 60
  • fichiers.xls
    26 KB · Affichages: 62
Dernière édition:

gilbert_RGI

XLDnaute Barbatruc
Re : code VB à adapter pr nvelle architecture

bonjour gilbert_RGI et merci pr ta rapidité,
j'ai testé ton code mais il m'ouvre l'explorateur pr que je lui indique le fichier à ouvrir et ensuite la recherche ne s'effectue même pas?!?! :confused:
n'y aurait-il pas un moyen qu'il ouvre le fichier tout seul et que la recherche s'effectue comme si la feuille était dans le fichier? comme avant quoi?
merci de m'éclairer,
cordialement

dans la variable fichier indiquer le chemin (path) en dur
comme le fait dans mon exemple Application.GetOpenFilename

ensuite Workbooks.Open fichier ouvre le fichier

une fois ouvert ouvrir l'onglet voulu avec sheets(4).select
 

chroberto

XLDnaute Nouveau
Re : code VB à adapter pr nvelle architecture

bjr solquagerius, re gilbert_RGI ...:)
je vais tester vos 2 méthode qui ne diffère pas trop d'ailleurs.
cependant n'oubliez pas que mon "chemin" d'accès à mon fichier B (base de données) sera modifié tout les mois. car le dossier source qu'il faudrat ouvrir sera mensuel.
je m'explique si je n'ai pas été claire:
Dossier Janvier
fichier A (tableaux à remplir)
fichier B (Bdd feuille4)​
Dossier Février
etc...
si le fichier A du mois de mars est ouvert et que l'ont souhaite lancer la macro, il faudrait automatiquement que celle-ci aille chercher le chemin .... Dossier Mars/fichier B.xls
pour faire au plus simple il faudrait reprendre dans le code l'adresse du fichier A ,ouvert (avec la macro). le fichier B dépendra tjs du fichier A du même dossier.

merci de votre aide et je vais voir avec vos propositions si ça fonctionne
a+
 

gilbert_RGI

XLDnaute Barbatruc
Re : code VB à adapter pr nvelle architecture

bjr solquagerius, re gilbert_RGI ...:)
je vais tester vos 2 méthode qui ne diffère pas trop d'ailleurs.
cependant n'oubliez pas que mon "chemin" d'accès à mon fichier B (base de données) sera modifié tout les mois. car le dossier source qu'il faudrat ouvrir sera mensuel.
je m'explique si je n'ai pas été claire:
Dossier Janvier
fichier A (tableaux à remplir)
fichier B (Bdd feuille4)​
Dossier Février
etc...
si le fichier A du mois de mars est ouvert et que l'ont souhaite lancer la macro, il faudrait automatiquement que celle-ci aille chercher le chemin .... Dossier Mars/fichier B.xls
pour faire au plus simple il faudrait reprendre dans le code l'adresse du fichier A ,ouvert (avec la macro). le fichier B dépendra tjs du fichier A du même dossier.

merci de votre aide et je vais voir avec vos propositions si ça fonctionne
a+
c'est pour cela que j'avais mis une boite ouvrir afin de pouvoir choisir le fichier voulu au lieu de mettre le chemin en dur dans le code
:p
 

chroberto

XLDnaute Nouveau
Re : code VB à adapter pr nvelle architecture

gilbert_RGI, en utilisant ton code, effectivement on s'assure d'ouvrir le bon fichier.Mais quoi qu'il en soit ma recherche ne s'effectue pas????

Code:
Sub PLAY_AD()
'crée le 16 décembre 2009
bas = [A65000].End(3).Row
dcol = [IV4].End(xlToLeft).Column - 2
Range("C5", Cells(bas, dcol)).ClearContents
'pour configurer fichier
fichier = Application.GetOpenFilename("(*.xls),")
Workbooks.Open chemin
[COLOR="Red"]nom de la feuil4[/COLOR]
Sheets("[COLOR="Red"]AD[/COLOR]").Select
    For k = 2 To Feuil4.[A65000].End(3).Row
col = Application.Match(Feuil4.Cells(k, 3), Range("C3", Cells(3, dcol)), 0)
lig = Application.Match(Feuil4.Cells(k, 1), Range("A5:A" & bas), 0)
On Error Resume Next
Cells(lig + 4, col + 2) = Cells(lig + 4, col + 2) + 1
If Err > 0 Then Err.Clear
Next
End Sub

je galère... et j'ai commencé la macro il y à seulement qques semaines!!:confused:
autrement n'y aurait-il pas un moyen pr que le chemin "fichier" s'effectue automatiquement avec l'adresse du fichier B déjà ouvert pour lancer la macro?

au plaisir de vous relire rapidemment... et merci encore pr tout
 

gilbert_RGI

XLDnaute Barbatruc
Re : code VB à adapter pr nvelle architecture

Code:
fichier = Application.GetOpenFilename("(*.xls),")
Workbooks.Open chemin

pas possible que ça fonctionne comme cela !!!

pour comprendre faites cela dans une procédure seule

Code:
sub test()
fichier = Application.GetOpenFilename("(*.xls),")
msgbox fichier
end sub

que ce passe- t- il ???

normalement après avoir sélectionne votre fichier dans la boite

le chemin (ici variable fichier) est mis dans la msgbox

donc pour ouvrir votre fichier.xls

il faut que l'open ouvre bien ce fichier et non une variable qu'il ne connait pas

Code:
Workbooks.Open[COLOR="Red"] fichier[/COLOR]

et non chemin
 
Dernière édition:

chroberto

XLDnaute Nouveau
Re : code VB à adapter pr nvelle architecture

effectivement gilbert_RGI, tu as raison, je me suis planter sur l'adaptation de tes conseils à mon code...ah bein c'est sûr!!!! ça va marcher moin bien maintenant...:)
j'ai fais les rectifications d'usage, merci, ça fonctionne comme je le souhaitais

merci bcp pr ton coup de main, en qques messages j'ai fais un bon de géant dans mon travail. ;)

a +
 

gilbert_RGI

XLDnaute Barbatruc
Re : code VB à adapter pr nvelle architecture

effectivement gilbert_RGI, tu as raison, je me suis planter sur l'adaptation de tes conseils à mon code...ah bein c'est sûr!!!! ça va marcher moin bien maintenant...:)
j'ai fais les rectifications d'usage, merci, ça fonctionne comme je le souhaitais

merci bcp pr ton coup de main, en qques messages j'ai fais un bon de géant dans mon travail. ;)

a +

pour voir le plantage ou la non execution d'un programme mettre un point d'arrêt (pause ou stop) en début de procédure lancer la macro qui s'arrête au stop ensuite avancer pas à pas avec la touche F8 et voir le remplissage des variables et où l'erreur se produit

ne pas hésiter à revenir sur le forum si besoin:rolleyes:
 

solquagerius

XLDnaute Junior
Re : code VB à adapter pr nvelle architecture

Bonjour,

je ne sais pas si ca a été résolu (en partie ou pas). J'ai écrit ce code pour trouver un fichier en automatique dans des répertoires (moi aussi je devais mettre à jour un fichier avec d'autres qui étaient remplacés chaque mois).

Cependant, il faut absolument que la structure soit la suivante :
Nom du répertoire principal -> Dossiers des mois avec pour nom le numéro du mois avec deux chiffres (donc 02 pour février par exemple) puis après ce qu'on veut-> fichiers du mois (même plusieurs c'est possible, la macro va chercher le dernier fichier créé).

dans VBA, il faut rajouter la référence "Microsoft Scripting Runtime" (onglet Tools->rerefences ou outils->références selon la langue).

Here is the code :

Code:
public function trouver_fichier() as workbook
    Dim FSO As New FileSystemObject
    Dim MonRep As Folder
    Dim d_temp As Date
    Dim rep As String, rep2 As String
    Dim f As File
    Dim S As Folder
    Dim nb As Integer, nb_temp As Integer
    Dim fichier As Workbook
    Dim D(0) As Date
    
    rep = "" 'Repertoire principal où se trouve les dossiers "mois"
    Set MonRep = FSO.GetFolder(rep)
    
    nb = 0
    For Each S In MonRep.SubFolders
        nb_temp = CInt(left(S.name, 2)) ' nom du type 01-janvier, 04-Avril par exemple
        If nb_temp > nb Then
            nb = nb_temp
            rep2 = "\" & S.name
        End If
    Next
    rep = rep & rep2
    Set MonRep = FSO.GetFolder(rep)
    For Each f In MonRep.Files
        d_temp = f.DateLastModified
        If d_temp > D(0) Then
            nom = f.name
        End If
    Next
    Set trouver = ouvrir(rep & "\" & nom, False) 'ouvre le fichier le plus 
récent (s'appuie sur la fonction ouvrir de mon module "fichiers")
end function
 

chroberto

XLDnaute Nouveau
Re : code VB à adapter pr nvelle architecture

bonjour le fil, j'ai pas pris le temps de vous informer que mon code fonctionne bien avec les conseil de gilbert_RGI. mais merci de ta proposition solquagerius, je vais la regarder de plus près ton code et peut etre pourrat-il me servir pr une prochaine requete.
merci à tous et passez de bonne fête de fin d'année
 

Discussions similaires

Réponses
2
Affichages
176

Statistiques des forums

Discussions
312 488
Messages
2 088 846
Membres
103 972
dernier inscrit
steeter