Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Syntaxe pour manipuler plusieurs fichiers excel

Skwi

XLDnaute Nouveau
Bonjour à tous,

J'ai une petite difficulté à écrire le code VBA pour résoudre mon problème.
J'ai un fichier contenant plusieurs feuilles que je remplis à l'aide d'autres fichiers.

Dans un premier temps j'ai remplis certaines feuilles manuellement mais je suis bloqué sur une feuille où je dois faire des tests (simples), via une macro, sur des cellules.

Pour être clair :
- J'ai ma macro dans le Fichier1 contenant 10 feuilles.
- Je souhaite parcourir les cellules de mon Fichier2
- et lorsque ma condition est respectée, je voudrais écrire la valeur de cette cellule (du Fichier2) dans mon Fichier1 (à la feuille "maFeuille").

Étant débutant en VBA je n'arrive tout simplement pas à trouver la syntaxe pour faire quelque chose du genre :

Code:
Dim Fichier As String
Dim ligne, colonne As Integer

'Je suis dans mon Fichier1 et mon Fichier2 se situe dans :
Fichier2 = "C:\Jeu de tests\*Fichier2.xls"
ligne = 0
For ligne = 2 To Fichier2.Range(A1).End(xlDown)
    For colonne = 45 To 183 Step 2
        If Fichier2.Cells(ligne, colonne).Value <> 0 Then
            ThisWorkbook.Activate
            Sheets("maFeuille").Select
            Cells(ligne,colonne).value=Fichier2.Cells(ligne,colonne)
        End
    Next colonne
Next ligne

Donc le gros problème du code vient du fait que "Fichier2.Cells(...)" n'existe pas, et je voudrai savoir si y'a un moyen de faire quelque chose de similaire.

Dans un premier temps j'ouvre les deux fichiers, mais à terme je souhaiterai parcourir le "Fichier2" sans avoir besoin de l'ouvrir.
J'ai donc commencé à regarder ici mais encore une fois, je ne sais pas comment utiliser son
Code:
='C:\Documents and Settings\mimi\dossier\excel\[ClasseurBase.xls]Feuil1'!$A$1

Merci d'avance,
Skwi.

Edit:
J'essaye de continuer dans ma lancée: Je n'ai pas pu tester à cause des autres erreurs mais je suppose que
Code:
Fichier2 = "C:\Jeu de tests\*Fichier2.xls"
ne doit pas être aimé.
j'ai donc remplacé par :
Code:
Fichier2 = Dir("C:\Jeu de tests\*Fichier2.xls")

De plus le "Fichier2.Cells(...)" étant également incorrect, j'ai tenté de le corrigé avec
Code:
Workbooks(Fichier2).Cells(...)
mais il n'a pas l'air d’aimer non plus. Si vous avez une idée...
 
Dernière édition:

Gorfael

XLDnaute Barbatruc
Re : Syntaxe pour manipuler plusieurs fichiers excel

Salut Skwi et le forum
Perso, je travailles à fichier ouvert => la première instruction est donc d'ouvrir le fichier. On peut travailler sur fichier fermé, mais les instructions sont différentes (je crois qu'il y a même un tuto dessus sur ce site).
A+
 

Skwi

XLDnaute Nouveau
Re : Syntaxe pour manipuler plusieurs fichiers excel

Salut, merci pour ta réponse,
J'ai réussi à faire ce que je voulais en cherchant mieux sur ce forum. Ce sont des petites erreurs bêtes qui bloquaient le programme.

Code qui fonctionne :
Code:
Dim ligne, ligne2, colonne, nb_ligne, taille, ident As Integer

Dim chemin, direction As String
Dim rh, tables As Workbook
chemin = dir("U:\Fichiers Synchronisés\Work\ACCESS\Jeu de tests\*Liste des Rhs détaillée.xls")

ident = 1
ligne2 = 2
Set tables = ThisWorkbook
Set rh = Application.Workbooks.Open("U:\Fichiers Synchronisés\Work\ACCESS\Jeu de tests\" & chemin)
With rh.Sheets("Projet")
For ligne = 2 To .Range("A1").End(xlDown)
    For colonne = 45 To 183 Step 2
        If .Cells(ligne, colonne).Value <> 0 Then
            taille = InStr(.Cells(1, colonne).Value, ")")
            direction = Mid(.Cells(1, colonne).Value, 8, taille - 8)
            With tables.Sheets("RH")
                .Cells(ligne2, 1) = ident
                .Cells(ligne2, 2) = direction
                .Cells(ligne2, 3) = rh.Sheets("Projet").Cells(ligne, 1).Value
                .Cells(ligne2, 4) = rh.Sheets("Projet").Cells(ligne, colonne).Value
            End With
            ligne2 = ligne2 + 1
            ident = ident + 1
        End If
    Next colonne
Next ligne
End With

rh.Close savechanges:=False
Si jamais ça peut aider des gens
Ce que j'en retiens :
On déclare et ouvre un classeur avec
Code:
Dim nomClasseur as Workbooks
Set nomClasseur = Application.Workbooks.Open("chemin\fichier.xls")
et on utilise nomClasseur.Sheets(...)... .

Je n'ai pas réussi à faire directement Workbook("chemin\fichier.xls").Sheets(...).Cells(...).Value

Sheets est sensible à la casse aussi (petit casse tête )

Dans un premier temps ça me convient donc je vais laisser de la sorte pour obtenir mes fichiers. Mais je repasserai surement sur ce post afin de demander de l'aide pour faire la même manip sans avoir à ouvrir le deuxième fichier.
 

Gorfael

XLDnaute Barbatruc
Re : Syntaxe pour manipuler plusieurs fichiers excel

Salut Skwi et le forum
Ce sont des petites erreurs bêtes qui bloquaient le programme.
On en est tous là !
Code:
Dim ligne, ligne2, colonne, nb_ligne, taille, ident As Integer
deux remarques :
1 - tu déclares pas toutes tes variables en integer, seulement la dernière, les autres sont déclarées en variant. La bonne syntaxe serait
Code:
Dim ligne As Integer, ligne2 As Integer, colonne As Integer, nb_ligne As Integer, taille As Integer, ident As Integer
2 - déclarer une ligne en integer t'amène des risques : Integer est limité à 32768. Le numéro de ligne max est supérieur. On est à la génération du Go de RAM, et quelques octets de plus sont négligeables. Il est préférable de déclarer les variables dans un format admettant leur plus grande valeur possible et de ne pas se contenter des valeurs probables qu'elles auront (justement à cause des petites erreurs de manips).
Déclare tes variables lignes en Long.
Code:
Dim nomClasseur as Workbooks
Set nomClasseur = Application.Workbooks.Open("chemin\fichier.xls")
Qu'est-ce que tu disais à Propos des petites erreurs ?
Heureusement que tu ne l'as pas faite dans ta déclaration de ta variable tables
Code:
tables As Workbook
Sheets est sensible à la casse
Non, du moins pas à ma connaissance :
sheets("A") équivaut à sheets("a")
Mais je repasserai surement sur ce post afin de demander de l'aide pour faire la même manip sans avoir à ouvrir le deuxième fichier.
Je pense qu'il existe un tutoriel consacré aux manipulations des fichiers fermés (sur ce site, il me semble). Mais comme ça ne m'intéresse pas, je n'ai pas cherché.
A+
 

Skwi

XLDnaute Nouveau
Re : Syntaxe pour manipuler plusieurs fichiers excel

Merci beaucoup gorfael, ainsi que tous les autres, pour la déclaration des variables je ne savais pas que ça ne fonctionnait pas comme ça (habitude du C) donc c'est bon à savoir.

Workbook/workbooks, de toute manière ça ne marche pas si je me trompe dans le code

Et pour Integer à la place de Long, je ne dépasse pas les 10.000 lignes, mais cette "erreur" m'a permis de découvrir un bug dans les données que j'avais : une valeur à -680154 (environ) qui ne pouvait pas être copiée (à cause de ma variable en Integer).

En tout cas encore merci
Skwi.
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…