Concaténation & contenu de cellules

cs_thunderbolt Messages postés 7 Date d'inscription mardi 3 août 2004 Statut Membre Dernière intervention 19 août 2009 - 30 janv. 2007 à 10:47
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 - 31 janv. 2007 à 18:10
Bonjour,


Je fais appel à votre expérience pour résoudre mon souci qui est le suivant :


J'ai dans un répertoire c:\.....\test : 103 feuilles de calcul Excel ayant exactement la même structure.

Ils sont nommés de 001.xls  à 103.xls.

Chacune de ces feuilles ne comporte qu'un onglet ayant le même nom que la feuille (feuille 001.xls, onglet 001, .....)


J'aurai besoin de récupérer dans chacunes d'entre elles la valeur de la
cellule D4, D10, E1 et de présenter sur une nouvelle feuille le
résultat sous la forme 1 ligne par feuille d'origine.


ex: feuille 001    valeur D4  valeur D10  valeur E1


J'ai bien écrit une formule de liaison externe, mais cela m'oblige à la modifier 103*4  soit 412 fois.


J'ai essayé en faisant une concaténation pour "reconstituer l'adresse
de la cellule source", mais alors ce n'est plus une liaison mais du
texte.  (avec INDIRECT)


Y aurait-il une âme charitable qui aurait une syntaxe qui fonctionne sous excel 2000 ?


Merci d'avance pour tous vos conseils


Bonne journée

5 réponses

cs_Exploreur Messages postés 4821 Date d'inscription lundi 11 novembre 2002 Statut Membre Dernière intervention 15 novembre 2016 15
30 janv. 2007 à 22:32
Salut,

Est-ce tu développe sous VB6 ou autres ?

A+
Exploreur
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
31 janv. 2007 à 03:48
salut,
la demande semble être en VBA (bien que mal classée, je vais modifier...)

en VB6, la lecture donnerait quelquechose dans ce goût là :

Option Explicit

Private Sub Form_Load()
    Dim ExlObj As Object
    Dim i As Integer
    Dim aRet(1 To 103, 2) As String
    Const PATH As String =  "C:\BLABLA\test"
    
    For i = 1 To 103
'       ouvre
excel
        Call OpenXlsDocument(ExlObj, PATH & Format$(i, "000") & ".xls")
        aRet(i, 0) = CStr(ExlObj.range("D4").Value)
        aRet(i, 1) = CStr(ExlObj.range("D10").Value)
        aRet(i, 2) = CStr(ExlObj.range("E1").Value)
        ExlObj.Close
        Set ExlObj = Nothing
    Next i

'   il ne reste plus qu'à
enregistrer le tableau dans un nouveau document....
    Unload Me
End Sub
'
Private Sub OpenXlsDocument(XLS As Object, sPath As String)
'   l'objet est de type feuille excel (pas de référence librairie
à excel)
    Set XLS = CreateObject("Excel.Application")

    XLS.Visible = False
    XLS.Workbooks.Open FileName:=sPath, Editable:=True

    'supprime l'affichage
des messages d'erreurs ou de confirmation de suppression,
...
    XLS.DisplayAlerts = False
End Sub

<small>Coloration
syntaxique automatique [AFCK] </small>
       

pas testé mais çà devrait coller. c'est un début en tout cas.
jète un oeil sur [www.codyx.org Codyx], çà peut t"insiper
++
PCPT   [AFCK]
<hr size ="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
31 janv. 2007 à 16:09
Salut,

PCPT a bien travaillé, ça me facilite la tâche
Alors voici le code (qui devient allégé car en VBA, Excel est déjà ouvert, et les classeurs sont connus, pas besoins d'objets) :

Option Explicit

Private Sub Import_Donnees()
    Dim i As Integer
    Dim aRet(1 To 103, 2) As String
    Const PATH As String = "C:\BLABLA\test"

    Application.DisplayAlerts = False
    
    For i = 1 To 103
'       ouvre
excel
        WorkBooks.Open(PATH & Format$(i, "000") & ".xls")
        aRet(i, 0) = CStr(ActiveWorkBook.range("D4").Value)
        aRet(i, 1) = CStr(ActiveWorkBook.range("D10").Value)
        aRet(i, 2) = CStr(ActiveWorkBook.range("E1").Value)
        ActiveWorkBook.Close False
    Next i

'   il ne reste plus qu'à
enregistrer le tableau dans un nouveau document....

        Application.DisplayAlerts = True

End Sub

' l'autre procédure
deviens inutile

~ <small>[code.aspx?ID=39466 Mortalino] ~
Colorisation automatique</small>

@++

<hr size="2" width="100%" />
  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
<!--
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
31 janv. 2007 à 16:37
salut,
mortalino -> et pour l'enregistrement du tableau?
je ne l'ai pas fais non plus mais çà permettrait d'ajouter à codyx

et pour les feuilles, là il n'y en a qu'une par classeur mais s'il y en avait plusieurs, la 1 serait par défaut?
(je reconnais mes lacunes)

ps : tu as vu dans mon post, Unload n'est pas de la bonne couleur.. ,  à mettre de côté
++
<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
31 janv. 2007 à 18:10
et pour l'enregistrement du tableau?

    >> je fourni le code inverse plus bas (facile )

je ne l'ai pas fais non plus mais çà permettrait d'ajouter à codyx
    >> je sais pas, c'est assez particulier, dans le sens où tu stockes des valeurs de 3 cellules prédéfinis, de plusieurs classeurs bien spécifiques.

et pour les feuilles, là il n'y en a qu'une par classeur mais s'il y en avait plusieurs, la 1 serait par défaut?
    >> pas forcémment, si t'as plusieurs feuilles, celle qui s'affiche à l'ouverture est celle sur laquelle tu étais au dernier enregistrement

ps : tu as vu dans mon post, Unload n'est pas de la bonne couleur.. ,  à mettre de côté
    >> oui, bien vu, je l'enlève de la liste.

Code avec tableau :

Option Explicit

Private Sub Import_Donnees()
    Dim i As Integer
    Dim aRet(1 To 103, 2) As String
    Const PATH As String = "C:\BLABLA\test"

    Application.DisplayAlerts = False
    
    For i = 1 To 103
'       ouvre excel
        Workbooks.Open (PATH & Format$(i, "000") & ".xls")
        
        aRet(i, 0) = CStr(Range("D4").Value)
        aRet(i, 1) = CStr(Range("D10").Value)
        aRet(i, 2) = CStr(Range("E1").Value)
        ActiveWorkbook.Close False
    Next i

    Workbooks.Add

    For i = 1 To 103
        Cells(i, 1).Value = aRet(i, 0)
        Cells(i, 2).Value = aRet(i, 1)
        Cells(i, 3).Value = aRet(i, 2)
    Next i
    
    Columns("A:C").EntireColumn.AutoFit
    ' a toi
de faire les encadrements
    
    ActiveWorkbook.SaveAs PATH & "Tableau Recapitulatif.xls"
    ActiveWorkbook.Close ' ferme le nouveau
classeur

    Application.DisplayAlerts = True

End Sub


~ <small>[code.aspx?ID=39466 Mortalino] ~
Colorisation automatique</small>

@++

<hr size="2" width="100%" />
  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
<!--
0
Rejoignez-nous