Parcours itératif de cellule

the_ionic

XLDnaute Nouveau
Salut, voilà le truc que j'ai à faire... c'est pas bien complexe mais le code VBA, c'est un peu obscur pour moi.
Alors oui, c'est sûr, je pourrais apprendre mais disons que mon projet est assez pressé et que c'est vraiment une annexe pour de la documentation alors j'ai pas trop le temps, je sollicite donc votre aide! Merci d'avance...

j'ai donc des noms de fichiers (oui encore des noms de fichiers, ceux qui ont suivis mon post précédent comprendront :p) dans une colonne (je reprécise, une et une seule colonne). Par exemple toto.xls, puis tata.xls enfin vous voyez je pense.

Le problème, c'est que je ne connais pas la colonne par avance, ça peut être la colonne D, la F, la G etc... Je ne sais pas non plus à quelle ligne est inscrit le premier nom de fichiers, ni à quelle ligne le dernier se trouve le dernier. Tout ce que je sais, c'est que du premier fichier au dernier, il ne peut y avoir de vide.

Voilà, le décors est planté! Maintenant ce que je veux faire, c'est une macro qui ouvre tous les fichiers de la colonne contenant les fichiers.
Pour la macro, bon, j'ai un début de piste:

Code:
Sub ChargerFichiers()
Dim Chemin$, Wbk As Workbook
Chemin = "D:\repertoire\toto.xls"
Workbooks.Open Chemin
End Sub

J'ai donc le code pour ouvrir toto.xls. Maintenant pour récupérer ma colonne, ça se gate... vu que je suis une quiche. Le pseudo-algo serait un truc du genre:

Code:
booleen trouver = faux;
cellule garde; // l adresse de la cellule ou se trouve le premier nom de fichier
entier i=1; // numero de ligne
colonne J; // colonne
Tant que (booleen == faux)
|      Pour J de A à Z (on dit que la colonne le nom de fichier ne peut être  après  la colonne Z)
|      |    Si Cellule[J][I] contient .xls sur sa ligne (alors c'est la colonne nom de fichier car aucune autre colonne ne contiendra de nom de fichier)
|      |    {
|      |    |       garde = Cellule[J][I];
|      |    |       trouver = vrai;
|      |    |
|      |    }
|      |    I++;
|      | 
|      finpour
fintantque

// maintenant on sait ou se trouve le premier nom de fichier, on a plus qu'a parcourir toute la colonne jusqu'à trouver un blanc
I=0;
Tant que garde!=blanc
|   ouvrirFichier(garde);
|   I++;
|   garde = cellule[J][I]
fintantque

Voilà, c'est du pseudo-code, ça fait peut être long à lire comme post mais je pense que ça permets d'être plus clair pour éventuelle résolution, alors merci à tous! Si quelqu'un a une autre solution que celle que je propose, je suis preneur, c'est plus une question de non maitrise du langage que de problème avec comment faire!
 

Hervé

XLDnaute Barbatruc
Re : Parcours itératif de cellule

bonjour

peut etre une piste à travers ce code :

Code:
Dim c As Range
Dim Chemin$
Dim i As Integer
Dim colonne As Byte
Dim lignedebut As Integer, lignedefin As Integer

Chemin = "D:\repertoire\"


Set c = Cells.Find(".xls")
If Not c Is Nothing Then
    colonne = c.Column
    lignedebut = c.Row
    lignedefin = Cells(65536, colonne).End(xlUp).Row
    For i = lignedebut To lignedefin
        Workbooks.Open Chemin & Cells(i, colonne)
    Next i
End If

salut
 

the_ionic

XLDnaute Nouveau
Re : Parcours itératif de cellule

Merci beaucoup, c'est je pense, le gros du travail.
Par contre cela ne fonctionne pas, enfin ça ne marche que pour le premier fichier, ensuite je récupère une erreur du type:

Code:
Erreur '1004'
"c:\repertoire\" introuvable. Vérifier l'orthographe du nom...

Donc il arrive pas à chopper le nom du deuxième fichier apparement vu que y'a rien après répertoire. Or celui-ci est bien juste en dessous le premier nom de fichier. J'ai beau essayer de débugger, je vois pas...
 

the_ionic

XLDnaute Nouveau
Re : Parcours itératif de cellule

Petite précision préalable:
J'appele maitre.xls le classeur qui contient les noms de fichiers, et la macro permettant de lancer l'ouverture de tous les fichiers.
toto.xls est le premier nom de fichier dans la colonne nom de fichier.


Bon, j'ai identifié l'erreur... en fait, la première itération, ça marche bien.

Le fichier toto.xls s'ouvre.
Ensuite au niveau des différents indexs, c'est nickel, par contre ce qui va pas, c'est qu'il va essayer d'aller voir le nom du fichier dans le fichier toto.xls car celui-ci est le workbook actif or il faudrait qu'il regarde dans le fichier maitre.xls.

J'arrive pas à résoudre ce problème... quelqu'un a une idée?

Merci beaucoup!
 

the_ionic

XLDnaute Nouveau
Re : Parcours itératif de cellule

Nickel, ça marche, merci!

Par contre un nouveau problème, mon classeur maitre.xls fait un tas de calcul à l'aide des fichiers qu'il ouvre. Donc à chaque fichier ouvert, y'a un recalcul qui se fait donc ça rame carrêment.
Y'a pas moyen de dire à mon fichier maitre.xls, tu recalcules pas? Ou alors même mieux, tu recalcules que une fois tous les fichiers ouverts?

Merci beaucoup!
 

the_ionic

XLDnaute Nouveau
Re : Parcours itératif de cellule

Bon, j'ai trouvé. Voici la solution pour qui rencontrerait le même problème.

Code:
Sub ChargerFichiers()
Dim c As Range
Dim Chemin$
Dim i As Integer
Dim colonne As Byte
Dim lignedebut As Integer, lignedefin As Integer
Dim workBookName As String


workBookName = ThisWorkbook.Name
Chemin = ThisWorkbook.Path

Application.Calculation = xlCalculationManual
Set c = Cells.Find(".xls")
If Not c Is Nothing Then
    colonne = c.Column
    lignedebut = c.Row
    lignedefin = Cells(65536, colonne).End(xlUp).Row
    For i = lignedebut To lignedefin
         Workbooks.Open Chemin & "\" & Cells(i, colonne)
         Workbooks(workBookName).Activate
    Next i
End If
Application.Calculation = xlCalculationAutomatic
End Sub

qui fait bien le recalcul qu'une fois tous les fichiers ouverts.
 

Discussions similaires

Réponses
18
Affichages
473

Statistiques des forums

Discussions
312 753
Messages
2 091 668
Membres
105 040
dernier inscrit
PeupleVert