Forum |  HardWare.fr | News | Articles | PC | Prix | S'identifier | S'inscrire | Aide Recherche
2254 connectés 

 


 Mot :   Pseudo :  
 
 Page :   1  2
Page Suivante
Auteur Sujet :

macro excel pour récupérer cellules

n°2090458
kiki29
Posté le 20-07-2011 à 19:45:24  profilanswer
 

Reprise du message précédent :
Salut, un exemple à adapter qui retourne le nom des feuilles d'un classeur
ShDatas étant le CodeName de la feuille recevant ici les noms des feuilles du fichier passé dans sNom
de la procédure ListeNomFeuilles
Affecter un bouton à SelFichier


'   Références  Microsoft ADO Ext. 2.8 for DLL and Security
'               Microsoft ActiveX Data Objects 2.x Library
 
Option Explicit
 
Sub SelFichier()
Dim Fichier As Variant
 
    ChDir ThisWorkbook.Path
 
    Fichier = Application.GetOpenFilename("Fichier xls (*.xls), *.xls" )
    If Fichier <> False Then
        Application.ScreenUpdating = False
        ListeNomFeuilles (Fichier)
        Application.ScreenUpdating = True
    End If
End Sub
 
Private Sub ListeNomFeuilles(sNom As String)
Dim Conn As Object
Dim Cat As Object
Dim FeuilleXL As Object
Dim iRow As Long
 
    ShDatas.Cells.Clear
    Set Conn = CreateObject("ADODB.Connection" )
    Set Cat = CreateObject("ADOX.Catalog" )
 
    Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" & sNom & ";Extended Properties=Excel 8.0;"
 
    Set Cat.ActiveConnection = Conn
 
    iRow = 1
    For Each FeuilleXL In Cat.Tables
        Select Case Right$(FeuilleXL.Name, 1)
            Case "$"
                ShDatas.Cells(iRow, 1) = Left$(FeuilleXL.Name, Len(FeuilleXL.Name) - 1)
                iRow = iRow + 1
            Case "'"
                ' Nom de feuille comportant des espaces
                ShDatas.Cells(iRow, 1) = Mid$(FeuilleXL.Name, 2, Len(FeuilleXL.Name) - 3)
                iRow = iRow + 1
        End Select
    Next FeuilleXL
 
    Conn.Close
    Set Conn = Nothing
    Set Cat = Nothing
End Sub


Message édité par kiki29 le 20-07-2011 à 22:30:44

---------------
Contribution : Excel / Word / PDF avec Acrobat Pro et PDFCreator http://www.developpez.net/forums/d [...] dfcreator/
mood
Publicité
Posté le 20-07-2011 à 19:45:24  profilanswer
 

n°2114011
ll46
Posté le 30-11-2011 à 11:49:22  profilanswer
 

Bonjour,  
 
Merci beaucoup pour le code (mis à jour du 9 août 2007) qui correspond parfaitement à mon problème. Cependant je suis incapable de le faire marcher pour des fichiers "csv" qui ne comportent qu'une seule feuille et dont le nom n'est pas "feuil1". Votre réponse (cf. cidessous) ne fonctionne pas et je n'arrive pas à corriger.  
J'en ai vraiment besoin et par avance merci MERCI beaucoup de votre aide  
 
 
 

kiki29 a écrit :

Salut, vite fait , à adapter à ton contexte


Option Explicit
.....
Dim NomFeuille As String
Const TypeFichier As String = "xls"
 
Dans procédure ListeFichiersDans
    .....
    For Each Fichier In DossierSource.Files
        If UCase(FSO.GetExtensionName(Fichier)) = UCase(TypeFichier) Then
  .....
        End If
    Next Fichier
    .....
 
Dans btnImport_QuandClic
    .....
    For i = 1 To NbFichiers
        NomFichier = ShImport.Range("A" & NumeroLigne)
        NomFeuille = Left$(ShImport.Range("A" & NumeroLigne), 15)
 .....
    Next i
    .....



 
 
 
 

n°2114054
kiki29
Posté le 30-11-2011 à 15:32:10  profilanswer
 

Salut, les macros proposées sont pour des fichiers XLS, pour des CSV j'ai ceci mais je pense qu'il y a mieux
 
Affecter un bouton à SelDossier
 

Option Explicit
 
Private Declare Function QueryPerformanceCounter Lib "Kernel32" (X As Currency) As Boolean
Private Declare Function QueryPerformanceFrequency Lib "Kernel32" (X As Currency) As Boolean
 
Dim Debut As Currency, Fin As Currency, Freq As Currency
Dim TabFichiers() As String, NbFichiers As Long
Dim sNom As String
 
Sub SelDossier()
Dim sChemin As String
    sChemin = ThisWorkbook.Path
 
    With Application.FileDialog(msoFileDialogFolderPicker)
        .InitialFileName = sChemin & "\"
        .Title = "Sélectionner le Dossier Racine"
        .AllowMultiSelect = False
        .InitialView = msoFileDialogViewDetails
        .ButtonName = "Sélection Dossier"
        .Show
        If .SelectedItems.Count > 0 Then
            DoEvents
            NbFichiers = 0
            ShDatas.Cells.Clear
            LectureFichiersCSV .SelectedItems(1)
        End If
    End With
End Sub
 
Private Sub LectureFichiersCSV(sDossier As String)
Dim sChemin As String, sFichier As String
Dim iNumFree As Integer, i As Long
Dim  j As Long
Dim Wkb As Workbook
 
    Application.StatusBar = ""
    QueryPerformanceCounter Debut
    Close
 
    sChemin = sDossier
    iNumFree = FreeFile
 
    Application.ScreenUpdating = False
    sNom = "Lecture CSV.csv"
 
    '   Recherche   Récursive  ListeFichiersDossier sDossier, True
    '               Non Récursive  ListeFichiersDossier sDossier, False
    ListeFichiersDossier sDossier, True
    If NbFichiers = 0 Then Exit Sub
 
    j = 1
    For i = 1 To UBound(TabFichiers)
        sFichier = TabFichiers(i)
        Set Wkb = Workbooks.Open(Filename:=sFichier, Local:=True)
        With ShDatas
            .Range("A" & j) = Wkb.Worksheets(1).Range("A1" )
            .Range("B" & j) = Wkb.Worksheets(1).Range("B3" )
        End With
        j = j + 1
        Wkb.Close
        Application.StatusBar = i & " / " & NbFichiers
    Next i
 
    Set Wkb = Nothing
    Erase TabFichiers
 
    Application.ScreenUpdating = True
 
    QueryPerformanceCounter Fin
    QueryPerformanceFrequency Freq
    Application.StatusBar = Application.StatusBar & " : " & Format((Fin - Debut) / Freq, "0.00 s" )
 
End Sub
 
Private Sub ListeFichiersDossier(sChemin As String, bInclureSousDossiers As Boolean)
Dim FSO As Object, Dossier As Object, sFichier As String
Dim sPath As String, Pos As Long
 
    Set FSO = CreateObject("Scripting.FileSystemObject" )
    Set Dossier = FSO.GetFolder(sChemin)
 
    sFichier = Dir$(sChemin & "\*.csv" )
    Do While Len(sFichier) > 0
        Pos = InStrRev(sFichier, "\" )
        If Right$(sFichier, Len(sFichier) - Pos) <> sNom Then
            sPath = sChemin & "\" & sFichier
            NbFichiers = NbFichiers + 1
            ReDim Preserve TabFichiers(1 To NbFichiers)
            TabFichiers(NbFichiers) = sPath
        End If
        sFichier = Dir$()
    Loop
 
    If bInclureSousDossiers Then
        For Each Dossier In Dossier.SubFolders
            ListeFichiersDossier Dossier.Path, True
        Next Dossier
    End If
 
    Set Dossier = Nothing
    Set FSO = Nothing
End Sub


Message édité par kiki29 le 02-12-2011 à 15:01:27

---------------
Contribution : Excel / Word / PDF avec Acrobat Pro et PDFCreator http://www.developpez.net/forums/d [...] dfcreator/
n°2118592
mclav
Posté le 28-12-2011 à 20:06:18  profilanswer
 

Sans utiliser le nom de la feuille ("Feuil1" par exemple), on peut alors utiliser le rang de la feuille.
Par exemple pour la première feuille, on place le chiffre "1" entre parenthèses, au lieu du nom de la feuille.
.Sheets(1)
 
De même, mais ce n'est pas la réponse demandée, on peut utiliser ce rang pour demander le nom de la feuille :
.Sheets(1).Name
 
Bon courage !
 

ll46 a écrit :

Bonjour,  
 
Merci beaucoup pour le code (mis à jour du 9 août 2007) qui correspond parfaitement à mon problème. Cependant je suis incapable de le faire marcher pour des fichiers "csv" qui ne comportent qu'une seule feuille et dont le nom n'est pas "feuil1". Votre réponse (cf. cidessous) ne fonctionne pas et je n'arrive pas à corriger.  
J'en ai vraiment besoin et par avance merci MERCI beaucoup de votre aide  
 
[i]


Message édité par mclav le 28-12-2011 à 20:07:44
n°2125402
varik
Posté le 08-02-2012 à 14:20:10  profilanswer
 

Bonjour tout le monde !!
 
je viens vous voir car je dois écrire sur des fichiers un ensemble de fichiers excel (7000) qui sont placé dans des répertoires et sous répertoires .
 
je voulais savoir si je pouvais m'inspirer du code cité dans le forum afin d'écrire directement sur les cellules que je veux:
 
Option Explicit  
 
Dim NbFichiers As Long  
Dim DossierOk As String  
 
Private Sub ListeFichiersDansDossier(ByVal NomDossierSource As String, ByVal InclureSousDossiers As Boolean)  
Dim FSO As Scripting.FileSystemObject  
Dim DossierSource As Scripting.Folder, SousDossier As Scripting.Folder  
Dim Fichier As Scripting.File  
Dim Extension As String  
Dim r As Long, VerifNom As Boolean  
 
    Set FSO = New Scripting.FileSystemObject  
    Set DossierSource = FSO.GetFolder(NomDossierSource)  
 
    r = ShImport.Range("A65536" ).End(xlUp).Row + 1  
 
    For Each Fichier In DossierSource.Files  
        VerifNom = UCase(Fichier.Name) Like UCase(NomFichierRch)  
        If VerifNom Then  
            With ShImport  
                .Cells(r, 1)= Fichier.Name  
                .Cells(r, 2)= Fichier.ParentFolder  
                .Cells(r, 3)= Fichier.DateCreated  
                .Cells(r, 4)= Fichier.Size  
                NbFichiers = NbFichiers + 1  
                r = r + 1  
            End With  
            Application.StatusBar = "Lecture noms : " & r  
        End If  
    Next Fichier  
 
    If InclureSousDossiers Then  
        For Each SousDossier In DossierSource.SubFolders  
            ListeFichiersDansDossier SousDossier.Path, True  
        Next SousDossier  
        Set SousDossier = Nothing  
    End If  
 
    ActiveWorkbook.Names.Add Name:="Zone_de_Tri", RefersToR1C1:="=Import!R4C1:R" & (NbFichiers + 3) & "C5"  
    ' Si cellule Z3 remplacer la ligne ci-dessus par  
    'ActiveWorkbook.Names.Add Name:="Zone_de_Tri", RefersToR1C1:="=Import!R4C1:R" & (NbFichiers + 3) & "C6"  
 
    Set DossierSource = Nothing  
    Set FSO = Nothing  
 
End Sub  
 
Private Function ExtraireValeur(ByVal Dossier As String, ByVal Fichier As String, _  
                                ByVal Feuille As String, ByVal Cellule As String)  
 
j'attend vos réflexion car je commence en VB et j'avoue qu'il y a pas mal de truc que j'ai pas encore compris


Message édité par varik le 08-02-2012 à 15:05:41
mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Suivante

Aller à :
Ajouter une réponse
 

Sujets relatifs
insertion de donnée dans tableau excel en phpSortie etat excel
Tableau Excel en phpN° de ligne de l'intersection de 2 cellules
Excel VBA - Double cliqueecrire un long titre dans une page excel en php
outils pour récupérer infos dans code htmlenorme probleme excel
[JavaScript] Récupérer les attributs d'une classe ?recupérer la date d'hier
Plus de sujets relatifs à : macro excel pour récupérer cellules


Hit-Parade
Copyright © 1997-2012 Hardware.fr SARL / Groupe LDLC / LesNumeriques.com / Version anglaise du site: BeHardware