Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

'recompiler' un fichier excel vide avec plusieurs fichier remplis

15 réponses
Avatar
david anceau
Bonjour,
Le titre n'est pas forcement explicite.

J'ai 30 fichiers de structure identiques qui doivent =EAtre remplis par
des magasins.
Chaque fichier comprend des colonnes qui correspondent =E0 tous les
magasins (code =E0 trois lettre).
ex :
ANG BOR PAR NAN COL etc...
Qt=E9
Chaque magasin va remplir sa colonne dans un fichier qui lui est
attribu=E9. ANG (angoul=E8me) aura le m=EAme fichier que BOR (bordeaux) mai=
s
remplira uniquement sa colonne.
ex pour Bordeaux : pour colmar :
ANG BOR PAR NAN COL ANG BOR PAR NAN COL
Qt=E9
12
20

Au final, j'aurai 30 fois le m=EAme fichier remplit uniquement dans une
colonne sp=E9cifique au magasin.

Je dois recompiler toutes les colonnes des trente fichiers dans un
autre fichier excel (le m=EAme mais vide) pour obtenir le fichier
global.
A B C D E
1 ANG BOR PAR NAN COL
2 Qt=E9 12 20

J'arrive =E0 lire un r=E9pertoire de fa=E7on r=E9cursive, mais je cherche =
=E0
faire un update (qui met =E0 jour la bonne colonne vide du fichier
final) =E0 chaque lecture. Savez vous comment faire, si possible en
utilisant ADO ????

Merci d'avance pour votre aide

5 réponses

1 2
Avatar
isabelle
bonjour David,

peut être comme ça,

With Fichier.Worksheets("REFERENCEMENT")

isabelle

David a écrit :
Bonjour MichDenis,
J'ai une erreur d'execution de type 9 en ligne

With Worksheets("REFERENCEMENT")

Apparemment, il ne trouve pas la feuille (qui pourtant existe)
Et je viens d'essayer tous les types de modif que je connais, rien n'y
fait.


On 5 mar, 09:28, david anceau wrote:

Chapeau bas MichDenis !!!

Je vais tester ton code dans la matinée.
Quitte à supprimer les données à vide en haut du fichier.

Merci merci beaucoup
David

On 4 mar, 21:19, "MichDenis" wrote:


Place ceci dans le fichier destinataire, dans un module standard.

En supposant que cela passe ! ADO n'aime pas beaucoup les
cellules vides, et différents types de données dans une même
colonne. Espérons que le bidouillage sera suffisannt.

J'ai utilisé EXCEL 2007.

à toi de t'amuser !
'--------------------------------------------
Sub test()

Dim Rst As New ADODB.Recordset
Dim Cnn As New ADODB.Connection
Dim Fichier As String
Dim Requete As String
Dim NbRecord As Long, A As Long
Dim R As Range, Cp As Range
Dim LigMax As Long
Dim répertoire As String
Dim ModeCalcul As String
'si le fichier destinataire est avec les autres
'sinon lui donner le chemin en dur
répertoire = ThisWorkbook.Path & ""

'Quel est le nombre maximum de données à traiter
'par colonne, tu mets un chiffre assez grand pour
'être certain qu'il n'y aura pas de dépassement.
LigMax = 500

Application.EnableEvents = False
Application.ScreenUpdating = False
MondeCalcul = Application.Calculation
Application.Calculation = xlCalculationManual

Fichier = Dir(répertoire & "*.xlsm")
If Fichier <> "" Then
Do While Fichier <> ""
If Fichier <> ThisWorkbook.Name Then
Champ = Left(Fichier, 3)
With Worksheets("REFERENCEMENT")
Set Cp = .Range("BF15:FQ15").Find(what:=Champ, LookIn:=xlValues, _
lookat:=xlWhole, SearchOrder:=xlByRows)
Set Rg = Cp.Offset(-14).Resize(LigMax)
If Not Cp Is Nothing Then
Champ = "F" & Cp.Column
Requete = "SELECT * From [" & Rg.Parent.Name & "$" & _
Rg.Address(0, 0) & "]"

Cnn.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=" & répertoire & Fichier & _
";Extended Properties=""Excel 12.0 Xml;HDR=NO;IMEX=1"""

Rst.Open Requete, Cnn, adOpenStatic, adLockOptimistic
NbRecord = Rst.RecordCount
For A = 1 To NbRecord
Rg(A) = Rst.Fields(0).Value
Rst.MoveNext
Next
Rst.Close: Cnn.Close
Else
MsgBox "Le champ " & Champ & " n'a pu être trouvé."
End If
End With
End If
Fichier = Dir()
Loop
End If
Set Rst = Nothing: Set Cnn = Nothing
Application.Calculation = MondeCalcul
Application.EnableEvents = True
End Sub
'--------------------------------------------

"David" a écrit dans le message de groupe de discussion :

Ah ? ADO ne peux pas copier des colonnes entières ?
Ce qui pourrais résoudre mon problème.
Merci pour ton aide

On 4 mar, 17:10, "MichDenis" wrote:

En relisant la donne du problème, tu disais que tes données
débutent en ligne 15. Cependant ADO a ses exigences et lui
il débute en ligne 1. le tableau doit débute en ligne 1

l'autre alternative est d'ouvrir chacun des fichiers pour
traiter les données.

"david anceau" a écrit dans le message de groupe de discussion :

Très bonne idée !
Je vais renommer les fichiers avec en prefixe le nom de la region
suivi de _
Mes colonnes débutent à BF et finissent à FQ.
voici en PJ un fichier type pour mieux comprendre
:http://www.cijoint.fr/cjlink.php?file=cj200903/cijj4Rh9V5.xls

On 4 mar, 16:15, "MichDenis" wrote:

Suggestion :
Si chaque nom de tes classeurs débutaient par le code
qui leur est propre dans le genre :
"ang_Classeur.xls" , "bor_classeur.xls" ...

A ) tu pourrais les regrouper dans le même répertoire
l'accessibilité est d'autant plus facile et rapide.
B ) Avec ADO, lorsque tu veux ouvrir le fichier, tu sais sur
quel champ de la table de ce classeur tu dois extraire les données
puisque ce champ apparaît dans le nom du classeur. À défaut de
quoi, il faut faire une requête sur l'ensemble des données du fichier,
identifier le champ qui a le plus de données car je suppose que les
autres champs sont vides... ça complique inutilement le traitement
et son temps de traitement.

C) Quels sont les colonnes que tu utilises ? De A15 À ....

Qu'en penses-tu ?

"david anceau" a écrit dans le message de groupe de discussion :

Ok tu as raison, il faut plus de précision...
Les fichiers portent tous le même nom mais sont dans des répertoires
différents.
Les étiquette de colonnes sont en ligne 15.
Le classeur possède plus d'une feuille et celle qui m'interesse est la
feuille "REFERENCEMENT"
Il s'agit du même nom pour chaque feuille de chaque classeur.
Il y a des cellules vide dans les colonnes de chaque region et il
s'agit de valeurs numériques entieres.
Je possède excel 2003 et 2007.

D'avance merci

David

On 4 mar, 15:14, "MichDenis" wrote:

Pour chacune des régions "ANG BOR PAR NAN COL etc..."
est-ce qu'il y a une façon de reconnaître la région par le nom
du fichier ?

Tes étiquettes de colonnes se retrouvent en ligne 1 ?
Est-ce que le classeur a plus d'une feuille ?
Est-ce le même nom pour chaque feuille de chaque classeur ?
si oui c'est quoi le nom de la feuille ?

Est-ce que dans la colonne de chaque région, il y a des cellules vides ?
le contenu des cellules de toute la colonne est-il du même type ?
Numérique ou alphanumérique ? (une idée du type de données)

Ta version d'excel ?

"david anceau" a écrit dans le message de groupe de discussion
:

Bonjour,
Le titre n'est pas forcement explicite.

J'ai 30 fichiers de structure identiques qui doivent être remplis par
des magasins.
Chaque fichier comprend des colonnes qui correspondent à tous les
magasins (code à trois lettre).
ex :
ANG BOR PAR NAN COL etc...
Qté
Chaque magasin va remplir sa colonne dans un fichier qui lui est
attribué. ANG (angoulème) aura le même fichier que BOR (bordeaux) mais
remplira uniquement sa colonne.
ex pour Bordeaux : pour colmar :
ANG BOR PAR NAN COL ANG BOR PAR NAN COL
Qté
12
20

Au final, j'aurai 30 fois le même fichier remplit uniquement dans une
colonne spécifique au magasin.

Je dois recompiler toutes les colonnes des trente fichiers dans un
autre fichier excel (le même mais vide) pour obtenir le fichier
global.
A B C D E
1 ANG BOR PAR NAN COL
2 Qté 12 20

J'arrive à lire un répertoire de façon récursive, mais je cherche à
faire un update (qui met à jour la bonne colonne vide du fichier
final) à chaque lecture. Savez vous comment faire, si possible en
utilisant ADO ????

Merci d'avance pour votre aide















Avatar
David
Au temps pour moi...
J'avais une erreur dans mon fichier de réception.
J'ai maintenant une erreur qui correspond à la zone suivante ::

Set Cp = .Range("BF15:FQ15").Find(what:=Champ, LookIn:=xlValues, _
lookat:=xlWhole,
SearchOrder:=xlByRows)
-->>>sur cette ligne Set Rg = Cp.Offset(-14).Resize
(LigMax) -->> variable objet ou variable de bloc With non définie.


On 6 mar, 15:59, David wrote:
Bonjour MichDenis,
J'ai une erreur d'execution de type 9 en ligne

With Worksheets("REFERENCEMENT")

Apparemment, il ne trouve pas la feuille (qui pourtant existe)
Et je viens d'essayer tous les types de modif que je connais, rien n'y
fait.

On 5 mar, 09:28, david anceau wrote:

> Chapeau bas MichDenis !!!

> Je vais tester ton code dans la matinée.
> Quitte à supprimer les données à vide en haut du fichier.

> Merci merci beaucoup
> David

> On 4 mar, 21:19, "MichDenis" wrote:

> > Place ceci dans le fichier destinataire, dans un module standard.

> > En supposant que cela passe ! ADO n'aime pas beaucoup les
> > cellules vides, et différents types de données dans une même
> > colonne. Espérons que le bidouillage sera suffisannt.

> > J'ai utilisé EXCEL 2007.

> > à toi de t'amuser !
> > '--------------------------------------------
> > Sub test()

> > Dim Rst As New ADODB.Recordset
> > Dim Cnn As New ADODB.Connection
> > Dim Fichier As String
> > Dim Requete As String
> > Dim NbRecord As Long, A As Long
> > Dim R As Range, Cp As Range
> > Dim LigMax As Long
> > Dim répertoire As String
> > Dim ModeCalcul As String
> > 'si le fichier destinataire est avec les autres
> > 'sinon lui donner le chemin en dur
> > répertoire = ThisWorkbook.Path & ""

> > 'Quel est le nombre maximum de données à traiter
> > 'par colonne, tu mets un chiffre assez grand pour
> > 'être certain qu'il n'y aura pas de dépassement.
> > LigMax = 500

> > Application.EnableEvents = False
> > Application.ScreenUpdating = False
> > MondeCalcul = Application.Calculation
> > Application.Calculation = xlCalculationManual

> > Fichier = Dir(répertoire & "*.xlsm")
> > If Fichier <> "" Then
> >     Do While Fichier <> ""
> >         If Fichier <> ThisWorkbook.Name Then
> >             Champ = Left(Fichier, 3)
> >             With Worksheets("REFERENCEMENT")
> >                 Set Cp = .Range("BF15:FQ15").Find(w hat:=Champ, LookIn:=xlValues, _
> >                                 looka t:=xlWhole, SearchOrder:=xlByRows)
> >                 Set Rg = Cp.Offset(-14).Resize(LigM ax)
> >                 If Not Cp Is Nothing Then
> >                     Champ = "F" & Cp.Column
> >                     Requete = "SELECT * From [" & Rg.Parent.Name & "$" & _
> >                             Rg.Address(0, 0) & "]"

> >                     Cnn.Open "Provider=Microsof t.ACE.OLEDB.12.0;" & _
> >                         "Data Source=" & r épertoire & Fichier & _
> >                         ";Extended Properties =""Excel 12.0 Xml;HDR=NO;IMEX=1"""

> >                     Rst.Open Requete, Cnn, adOpen Static, adLockOptimistic
> >                     NbRecord = Rst.RecordCount
> >                     For A = 1 To NbRecord
> >                         Rg(A) = Rst.Fields( 0).Value
> >                         Rst.MoveNext
> >                     Next
> >                     Rst.Close: Cnn.Close
> >                 Else
> >                     MsgBox "Le champ " & Champ & " n'a pu être trouvé."
> >                 End If
> >             End With
> >         End If
> >         Fichier = Dir()
> >     Loop
> > End If
> > Set Rst = Nothing: Set Cnn = Nothing
> > Application.Calculation = MondeCalcul
> > Application.EnableEvents = True
> > End Sub
> > '--------------------------------------------

> > "David" a écrit dans le message de gr oupe de discussion :
> >
> > Ah ? ADO ne peux pas copier des colonnes entières ?
> > Ce qui pourrais résoudre mon problème.
> > Merci pour ton aide

> > On 4 mar, 17:10, "MichDenis" wrote:

> > > En relisant la donne du problème, tu disais que tes données
> > > débutent en ligne 15. Cependant ADO a ses exigences et lui
> > > il débute en ligne 1. le tableau doit débute en ligne 1

> > > l'autre alternative est d'ouvrir chacun des fichiers pour
> > > traiter les données.

> > > "david anceau" a écrit dans le message de gr oupe de discussion :
> > >
> > > Très bonne idée !
> > > Je vais renommer les fichiers avec en prefixe le nom de la region
> > > suivi de _
> > > Mes colonnes débutent à BF et finissent à FQ.
> > > voici en PJ un fichier type pour mieux comprendre
> > > :http://www.cijoint.fr/cjlink.php?file=cj200903/cijj4Rh9V5.xls

> > > On 4 mar, 16:15, "MichDenis" wrote:

> > > > Suggestion :
> > > > Si chaque nom de tes classeurs débutaient par le code
> > > > qui leur est propre dans le genre :
> > > > "ang_Classeur.xls" , "bor_classeur.xls" ...

> > > > A ) tu pourrais les regrouper dans le même répertoire
> > > >      l'accessibilité est d'autant plus facile et rapide.
> > > > B ) Avec ADO, lorsque tu veux ouvrir le fichier, tu sais sur
> > > > quel champ de la table de ce classeur tu dois extraire les donn ées
> > > > puisque ce champ apparaît dans le nom du classeur. À défaut de
> > > > quoi, il faut faire une requête sur l'ensemble des données du fichier,
> > > > identifier le champ qui a le plus de données car je suppose que les
> > > > autres champs sont vides... ça complique inutilement le traitem ent
> > > > et son temps de traitement.

> > > > C) Quels sont les colonnes que tu utilises ? De A15 À  ....

> > > > Qu'en penses-tu ?

> > > > "david anceau" a écrit dans le message de groupe de discussion :
> > > > ..
> > > > Ok tu as raison, il faut plus de précision...
> > > > Les fichiers portent tous le même nom mais sont dans des répe rtoires
> > > > différents.
> > > > Les étiquette de colonnes sont en ligne 15.
> > > > Le classeur possède plus d'une feuille et celle qui m'interesse est la
> > > > feuille "REFERENCEMENT"
> > > > Il s'agit du même nom pour chaque feuille de chaque classeur.
> > > > Il y a des cellules vide dans les colonnes de chaque region et il
> > > > s'agit de valeurs numériques entieres.
> > > > Je possède excel 2003 et 2007.

> > > > D'avance merci

> > > > David

> > > > On 4 mar, 15:14, "MichDenis" wrote:

> > > > > Pour chacune des régions "ANG BOR PAR NAN COL etc..."
> > > > > est-ce qu'il y a une façon de reconnaître la région par l e nom
> > > > > du fichier ?

> > > > > Tes étiquettes de colonnes se retrouvent en ligne 1 ?
> > > > > Est-ce que le classeur a plus d'une feuille ?
> > > > > Est-ce le même nom pour chaque feuille de chaque classeur ?
> > > > > si oui c'est quoi le nom de la feuille ?

> > > > > Est-ce que dans la colonne de chaque région, il y a des cellu les vides ?
> > > > > le contenu des cellules de toute la colonne est-il du même ty pe ?
> > > > > Numérique ou alphanumérique ? (une idée du type de donn ées)

> > > > > Ta version d'excel ?

> > > > > "david anceau" a écrit dans le message d e groupe de discussion
> > > > > :
> > > > > om...
> > > > > Bonjour,
> > > > > Le titre n'est pas forcement explicite.

> > > > > J'ai 30 fichiers de structure identiques qui doivent être rem plis par
> > > > > des magasins.
> > > > > Chaque fichier comprend des colonnes qui correspondent à tous les
> > > > > magasins (code à trois lettre).
> > > > > ex :
> > > > >         ANG BOR PAR NAN COL etc...
> > > > > Qté
> > > > > Chaque magasin va remplir sa colonne dans un fichier qui lui es t
> > > > > attribué. ANG (angoulème) aura le même fichier que BOR (b ordeaux) mais
> > > > > remplira uniquement sa colonne.
> > > > > ex pour Bordeaux :                           pour colmar :
> > > > >         ANG BOR PAR NAN COL         ANG BOR PAR NAN COL
> > > > > Qté
> > > > > 12
> > > > > 20

> > > > > Au final, j'aurai 30 fois le même fichier remplit uniquement dans une
> > > > > colonne spécifique au magasin.

> > > > > Je dois recompiler toutes les colonnes des trente fichiers dans un
> > > > > autre fichier excel (le même mais vide) pour obtenir le fichi er
> > > > > global.
> > > > >           A     B     C      D     E
> > > > > 1        ANG BOR PAR NAN COL
> > > > > 2 Qté           12                    20

> > > > > J'arrive à lire un répertoire de façon récursive, mais je cherche à
> > > > > faire un update (qui met à jour la bonne colonne vide du fich ier
> > > > > final) à chaque lecture. Savez vous comment faire, si possibl e en
> > > > > utilisant ADO ????

> > > > > Merci d'avance pour votre aide


Avatar
David
Au temps pour moi...
J'avais une erreur dans mon fichier de réception.
J'ai maintenant une erreur qui correspond à la zone suivante ::

Set Cp = .Range("BF15:FQ15").Find(what:=Champ, LookIn:=xlValues, _
lookat:=xlWhole,
SearchOrder:=xlByRows)
-->>>sur cette ligne Set Rg = Cp.Offset(-14).Resize
(LigMax) -->> variable objet ou variable de bloc With non définie.


On 6 mar, 15:59, David wrote:
Bonjour MichDenis,
J'ai une erreur d'execution de type 9 en ligne

With Worksheets("REFERENCEMENT")

Apparemment, il ne trouve pas la feuille (qui pourtant existe)
Et je viens d'essayer tous les types de modif que je connais, rien n'y
fait.

On 5 mar, 09:28, david anceau wrote:

> Chapeau bas MichDenis !!!

> Je vais tester ton code dans la matinée.
> Quitte à supprimer les données à vide en haut du fichier.

> Merci merci beaucoup
> David

> On 4 mar, 21:19, "MichDenis" wrote:

> > Place ceci dans le fichier destinataire, dans un module standard.

> > En supposant que cela passe ! ADO n'aime pas beaucoup les
> > cellules vides, et différents types de données dans une même
> > colonne. Espérons que le bidouillage sera suffisannt.

> > J'ai utilisé EXCEL 2007.

> > à toi de t'amuser !
> > '--------------------------------------------
> > Sub test()

> > Dim Rst As New ADODB.Recordset
> > Dim Cnn As New ADODB.Connection
> > Dim Fichier As String
> > Dim Requete As String
> > Dim NbRecord As Long, A As Long
> > Dim R As Range, Cp As Range
> > Dim LigMax As Long
> > Dim répertoire As String
> > Dim ModeCalcul As String
> > 'si le fichier destinataire est avec les autres
> > 'sinon lui donner le chemin en dur
> > répertoire = ThisWorkbook.Path & ""

> > 'Quel est le nombre maximum de données à traiter
> > 'par colonne, tu mets un chiffre assez grand pour
> > 'être certain qu'il n'y aura pas de dépassement.
> > LigMax = 500

> > Application.EnableEvents = False
> > Application.ScreenUpdating = False
> > MondeCalcul = Application.Calculation
> > Application.Calculation = xlCalculationManual

> > Fichier = Dir(répertoire & "*.xlsm")
> > If Fichier <> "" Then
> >     Do While Fichier <> ""
> >         If Fichier <> ThisWorkbook.Name Then
> >             Champ = Left(Fichier, 3)
> >             With Worksheets("REFERENCEMENT")
> >                 Set Cp = .Range("BF15:FQ15").Find(w hat:=Champ, LookIn:=xlValues, _
> >                                 looka t:=xlWhole, SearchOrder:=xlByRows)
> >                 Set Rg = Cp.Offset(-14).Resize(LigM ax)
> >                 If Not Cp Is Nothing Then
> >                     Champ = "F" & Cp.Column
> >                     Requete = "SELECT * From [" & Rg.Parent.Name & "$" & _
> >                             Rg.Address(0, 0) & "]"

> >                     Cnn.Open "Provider=Microsof t.ACE.OLEDB.12.0;" & _
> >                         "Data Source=" & r épertoire & Fichier & _
> >                         ";Extended Properties =""Excel 12.0 Xml;HDR=NO;IMEX=1"""

> >                     Rst.Open Requete, Cnn, adOpen Static, adLockOptimistic
> >                     NbRecord = Rst.RecordCount
> >                     For A = 1 To NbRecord
> >                         Rg(A) = Rst.Fields( 0).Value
> >                         Rst.MoveNext
> >                     Next
> >                     Rst.Close: Cnn.Close
> >                 Else
> >                     MsgBox "Le champ " & Champ & " n'a pu être trouvé."
> >                 End If
> >             End With
> >         End If
> >         Fichier = Dir()
> >     Loop
> > End If
> > Set Rst = Nothing: Set Cnn = Nothing
> > Application.Calculation = MondeCalcul
> > Application.EnableEvents = True
> > End Sub
> > '--------------------------------------------

> > "David" a écrit dans le message de gr oupe de discussion :
> >
> > Ah ? ADO ne peux pas copier des colonnes entières ?
> > Ce qui pourrais résoudre mon problème.
> > Merci pour ton aide

> > On 4 mar, 17:10, "MichDenis" wrote:

> > > En relisant la donne du problème, tu disais que tes données
> > > débutent en ligne 15. Cependant ADO a ses exigences et lui
> > > il débute en ligne 1. le tableau doit débute en ligne 1

> > > l'autre alternative est d'ouvrir chacun des fichiers pour
> > > traiter les données.

> > > "david anceau" a écrit dans le message de gr oupe de discussion :
> > >
> > > Très bonne idée !
> > > Je vais renommer les fichiers avec en prefixe le nom de la region
> > > suivi de _
> > > Mes colonnes débutent à BF et finissent à FQ.
> > > voici en PJ un fichier type pour mieux comprendre
> > > :http://www.cijoint.fr/cjlink.php?file=cj200903/cijj4Rh9V5.xls

> > > On 4 mar, 16:15, "MichDenis" wrote:

> > > > Suggestion :
> > > > Si chaque nom de tes classeurs débutaient par le code
> > > > qui leur est propre dans le genre :
> > > > "ang_Classeur.xls" , "bor_classeur.xls" ...

> > > > A ) tu pourrais les regrouper dans le même répertoire
> > > >      l'accessibilité est d'autant plus facile et rapide.
> > > > B ) Avec ADO, lorsque tu veux ouvrir le fichier, tu sais sur
> > > > quel champ de la table de ce classeur tu dois extraire les donn ées
> > > > puisque ce champ apparaît dans le nom du classeur. À défaut de
> > > > quoi, il faut faire une requête sur l'ensemble des données du fichier,
> > > > identifier le champ qui a le plus de données car je suppose que les
> > > > autres champs sont vides... ça complique inutilement le traitem ent
> > > > et son temps de traitement.

> > > > C) Quels sont les colonnes que tu utilises ? De A15 À  ....

> > > > Qu'en penses-tu ?

> > > > "david anceau" a écrit dans le message de groupe de discussion :
> > > > ..
> > > > Ok tu as raison, il faut plus de précision...
> > > > Les fichiers portent tous le même nom mais sont dans des répe rtoires
> > > > différents.
> > > > Les étiquette de colonnes sont en ligne 15.
> > > > Le classeur possède plus d'une feuille et celle qui m'interesse est la
> > > > feuille "REFERENCEMENT"
> > > > Il s'agit du même nom pour chaque feuille de chaque classeur.
> > > > Il y a des cellules vide dans les colonnes de chaque region et il
> > > > s'agit de valeurs numériques entieres.
> > > > Je possède excel 2003 et 2007.

> > > > D'avance merci

> > > > David

> > > > On 4 mar, 15:14, "MichDenis" wrote:

> > > > > Pour chacune des régions "ANG BOR PAR NAN COL etc..."
> > > > > est-ce qu'il y a une façon de reconnaître la région par l e nom
> > > > > du fichier ?

> > > > > Tes étiquettes de colonnes se retrouvent en ligne 1 ?
> > > > > Est-ce que le classeur a plus d'une feuille ?
> > > > > Est-ce le même nom pour chaque feuille de chaque classeur ?
> > > > > si oui c'est quoi le nom de la feuille ?

> > > > > Est-ce que dans la colonne de chaque région, il y a des cellu les vides ?
> > > > > le contenu des cellules de toute la colonne est-il du même ty pe ?
> > > > > Numérique ou alphanumérique ? (une idée du type de donn ées)

> > > > > Ta version d'excel ?

> > > > > "david anceau" a écrit dans le message d e groupe de discussion
> > > > > :
> > > > > om...
> > > > > Bonjour,
> > > > > Le titre n'est pas forcement explicite.

> > > > > J'ai 30 fichiers de structure identiques qui doivent être rem plis par
> > > > > des magasins.
> > > > > Chaque fichier comprend des colonnes qui correspondent à tous les
> > > > > magasins (code à trois lettre).
> > > > > ex :
> > > > >         ANG BOR PAR NAN COL etc...
> > > > > Qté
> > > > > Chaque magasin va remplir sa colonne dans un fichier qui lui es t
> > > > > attribué. ANG (angoulème) aura le même fichier que BOR (b ordeaux) mais
> > > > > remplira uniquement sa colonne.
> > > > > ex pour Bordeaux :                           pour colmar :
> > > > >         ANG BOR PAR NAN COL         ANG BOR PAR NAN COL
> > > > > Qté
> > > > > 12
> > > > > 20

> > > > > Au final, j'aurai 30 fois le même fichier remplit uniquement dans une
> > > > > colonne spécifique au magasin.

> > > > > Je dois recompiler toutes les colonnes des trente fichiers dans un
> > > > > autre fichier excel (le même mais vide) pour obtenir le fichi er
> > > > > global.
> > > > >           A     B     C      D     E
> > > > > 1        ANG BOR PAR NAN COL
> > > > > 2 Qté           12                    20

> > > > > J'arrive à lire un répertoire de façon récursive, mais je cherche à
> > > > > faire un update (qui met à jour la bonne colonne vide du fich ier
> > > > > final) à chaque lecture. Savez vous comment faire, si possibl e en
> > > > > utilisant ADO ????

> > > > > Merci d'avance pour votre aide


Avatar
MichDenis
Je n'ai pas vu l'organisation de tes fichiers.

ce que j'ai retenu de tes propos c'est que la zone
BF15:FQ15 c'est là où tu avais saisi les 3 lettres de
chacune des régions. Ces 3 lettres devaient se retrouver
au début du nom de chaque fichier à ouvrir.

Ton classeur résultat devait avoir la même
configuration.
Lorsque tu ouvres un fichier, la procédure extrait les 3
premières lettres du nom et détermine à quelle colonne
elles appartiennent pour lancer la requête et par la suite
faire la copie des données dans la feuille recevant les données.
Avatar
David
Merci Isabelle et un grand merci MichDenis.
L'erreur venait de l'interface humaine entre mon siège et mon
écran ;-)))) Je suis une biquette.....
Tout fonctionne super bien !!



On 6 mar, 16:12, isabelle wrote:
bonjour David,

peut être comme ça,

With Fichier.Worksheets("REFERENCEMENT")

isabelle

David a écrit :

> Bonjour MichDenis,
> J'ai une erreur d'execution de type 9 en ligne

> With Worksheets("REFERENCEMENT")

> Apparemment, il ne trouve pas la feuille (qui pourtant existe)
> Et je viens d'essayer tous les types de modif que je connais, rien n'y
> fait.

> On 5 mar, 09:28, david anceau wrote:

>> Chapeau bas MichDenis !!!

>> Je vais tester ton code dans la matinée.
>> Quitte à supprimer les données à vide en haut du fichier.

>> Merci merci beaucoup
>> David

>> On 4 mar, 21:19, "MichDenis" wrote:

>>> Place ceci dans le fichier destinataire, dans un module standard.

>>> En supposant que cela passe ! ADO n'aime pas beaucoup les
>>> cellules vides, et différents types de données dans une même
>>> colonne. Espérons que le bidouillage sera suffisannt.

>>> J'ai utilisé EXCEL 2007.

>>> à toi de t'amuser !
>>> '--------------------------------------------
>>> Sub test()

>>> Dim Rst As New ADODB.Recordset
>>> Dim Cnn As New ADODB.Connection
>>> Dim Fichier As String
>>> Dim Requete As String
>>> Dim NbRecord As Long, A As Long
>>> Dim R As Range, Cp As Range
>>> Dim LigMax As Long
>>> Dim répertoire As String
>>> Dim ModeCalcul As String
>>> 'si le fichier destinataire est avec les autres
>>> 'sinon lui donner le chemin en dur
>>> répertoire = ThisWorkbook.Path & ""

>>> 'Quel est le nombre maximum de données à traiter
>>> 'par colonne, tu mets un chiffre assez grand pour
>>> 'être certain qu'il n'y aura pas de dépassement.
>>> LigMax = 500

>>> Application.EnableEvents = False
>>> Application.ScreenUpdating = False
>>> MondeCalcul = Application.Calculation
>>> Application.Calculation = xlCalculationManual

>>> Fichier = Dir(répertoire & "*.xlsm")
>>> If Fichier <> "" Then
>>>     Do While Fichier <> ""
>>>         If Fichier <> ThisWorkbook.Name Then
>>>             Champ = Left(Fichier, 3)
>>>             With Worksheets("REFERENCEMENT")
>>>                 Set Cp = .Range("BF15:FQ15").Find(w hat:=Champ, LookIn:=xlValues, _
>>>                                 looka t:=xlWhole, SearchOrder:=xlByRows)
>>>                 Set Rg = Cp.Offset(-14).Resize(LigM ax)
>>>                 If Not Cp Is Nothing Then
>>>                     Champ = "F" & Cp.Column
>>>                     Requete = "SELECT * From [" & Rg.Parent.Name & "$" & _
>>>                             Rg.Address(0, 0) & "]"

>>>                     Cnn.Open "Provider=Microsof t.ACE.OLEDB.12.0;" & _
>>>                         "Data Source=" & r épertoire & Fichier & _
>>>                         ";Extended Properties =""Excel 12.0 Xml;HDR=NO;IMEX=1"""

>>>                     Rst.Open Requete, Cnn, adOpen Static, adLockOptimistic
>>>                     NbRecord = Rst.RecordCount
>>>                     For A = 1 To NbRecord
>>>                         Rg(A) = Rst.Fields( 0).Value
>>>                         Rst.MoveNext
>>>                     Next
>>>                     Rst.Close: Cnn.Close
>>>                 Else
>>>                     MsgBox "Le champ " & Champ & " n'a pu être trouvé."
>>>                 End If
>>>             End With
>>>         End If
>>>         Fichier = Dir()
>>>     Loop
>>> End If
>>> Set Rst = Nothing: Set Cnn = Nothing
>>> Application.Calculation = MondeCalcul
>>> Application.EnableEvents = True
>>> End Sub
>>> '--------------------------------------------

>>> "David" a écrit dans le message de gr oupe de discussion :
>>>
>>> Ah ? ADO ne peux pas copier des colonnes entières ?
>>> Ce qui pourrais résoudre mon problème.
>>> Merci pour ton aide

>>> On 4 mar, 17:10, "MichDenis" wrote:

>>>> En relisant la donne du problème, tu disais que tes données
>>>> débutent en ligne 15. Cependant ADO a ses exigences et lui
>>>> il débute en ligne 1. le tableau doit débute en ligne 1

>>>> l'autre alternative est d'ouvrir chacun des fichiers pour
>>>> traiter les données.

>>>> "david anceau" a écrit dans le message de gro upe de discussion :
>>>>
>>>> Très bonne idée !
>>>> Je vais renommer les fichiers avec en prefixe le nom de la region
>>>> suivi de _
>>>> Mes colonnes débutent à BF et finissent à FQ.
>>>> voici en PJ un fichier type pour mieux comprendre
>>>> :http://www.cijoint.fr/cjlink.php?file=cj200903/cijj4Rh9V5.xls

>>>> On 4 mar, 16:15, "MichDenis" wrote:

>>>>> Suggestion :
>>>>> Si chaque nom de tes classeurs débutaient par le code
>>>>> qui leur est propre dans le genre :
>>>>> "ang_Classeur.xls" , "bor_classeur.xls" ...

>>>>> A ) tu pourrais les regrouper dans le même répertoire
>>>>>      l'accessibilité est d'autant plus facile et rapide.
>>>>> B ) Avec ADO, lorsque tu veux ouvrir le fichier, tu sais sur
>>>>> quel champ de la table de ce classeur tu dois extraire les donnée s
>>>>> puisque ce champ apparaît dans le nom du classeur. À défaut d e
>>>>> quoi, il faut faire une requête sur l'ensemble des données du f ichier,
>>>>> identifier le champ qui a le plus de données car je suppose que l es
>>>>> autres champs sont vides... ça complique inutilement le traitemen t
>>>>> et son temps de traitement.

>>>>> C) Quels sont les colonnes que tu utilises ? De A15 À  ....

>>>>> Qu'en penses-tu ?

>>>>> "david anceau" a écrit dans le message de gr oupe de discussion :
>>>>>
>>>>> Ok tu as raison, il faut plus de précision...
>>>>> Les fichiers portent tous le même nom mais sont dans des répert oires
>>>>> différents.
>>>>> Les étiquette de colonnes sont en ligne 15.
>>>>> Le classeur possède plus d'une feuille et celle qui m'interesse e st la
>>>>> feuille "REFERENCEMENT"
>>>>> Il s'agit du même nom pour chaque feuille de chaque classeur.
>>>>> Il y a des cellules vide dans les colonnes de chaque region et il
>>>>> s'agit de valeurs numériques entieres.
>>>>> Je possède excel 2003 et 2007.

>>>>> D'avance merci

>>>>> David

>>>>> On 4 mar, 15:14, "MichDenis" wrote:

>>>>>> Pour chacune des régions "ANG BOR PAR NAN COL etc..."
>>>>>> est-ce qu'il y a une façon de reconnaître la région par le n om
>>>>>> du fichier ?

>>>>>> Tes étiquettes de colonnes se retrouvent en ligne 1 ?
>>>>>> Est-ce que le classeur a plus d'une feuille ?
>>>>>> Est-ce le même nom pour chaque feuille de chaque classeur ?
>>>>>> si oui c'est quoi le nom de la feuille ?

>>>>>> Est-ce que dans la colonne de chaque région, il y a des cellules vides ?
>>>>>> le contenu des cellules de toute la colonne est-il du même type ?
>>>>>> Numérique ou alphanumérique ? (une idée du type de données )

>>>>>> Ta version d'excel ?

>>>>>> "david anceau" a écrit dans le message de g roupe de discussion
>>>>>> :
>>>>>> ..
>>>>>> Bonjour,
>>>>>> Le titre n'est pas forcement explicite.

>>>>>> J'ai 30 fichiers de structure identiques qui doivent être rempli s par
>>>>>> des magasins.
>>>>>> Chaque fichier comprend des colonnes qui correspondent à tous le s
>>>>>> magasins (code à trois lettre).
>>>>>> ex :
>>>>>>         ANG BOR PAR NAN COL etc...
>>>>>> Qté
>>>>>> Chaque magasin va remplir sa colonne dans un fichier qui lui est
>>>>>> attribué. ANG (angoulème) aura le même fichier que BOR (bord eaux) mais
>>>>>> remplira uniquement sa colonne.
>>>>>> ex pour Bordeaux :                           pour colmar :
>>>>>>         ANG BOR PAR NAN COL         ANG BOR PAR NA N COL
>>>>>> Qté
>>>>>> 12
>>>>>> 20

>>>>>> Au final, j'aurai 30 fois le même fichier remplit uniquement dan s une
>>>>>> colonne spécifique au magasin.

>>>>>> Je dois recompiler toutes les colonnes des trente fichiers dans un
>>>>>> autre fichier excel (le même mais vide) pour obtenir le fichier
>>>>>> global.
>>>>>>           A     B     C      D     E
>>>>>> 1        ANG BOR PAR NAN COL
>>>>>> 2 Qté           12                    20

>>>>>> J'arrive à lire un répertoire de façon récursive, mais je cherche à
>>>>>> faire un update (qui met à jour la bonne colonne vide du fichier
>>>>>> final) à chaque lecture. Savez vous comment faire, si possible e n
>>>>>> utilisant ADO ????

>>>>>> Merci d'avance pour votre aide


1 2