Résolu Copier une cellule d'un fichier Excel "fermé" dans un fichier Excel "ouvert"

RhaegarNorka

Habitué
Bonjour la compagnie,

alors voila, c'est mon premier post sur le fofo mais j'ai déjà utilisé des "trucs & astuces" que vous donniez à d'autres internotes et cela m'a beaucoup aidé jusqu'à maintenant =)

Voila mon problème : Je dois créer un fichier Excel dans lequel je dois répertorier tous les fichiers d'un dossier. Jusque là pas de soucis de mon coté, ils se mettent tous dans la première colonne de mon fichier actif (celui que je dois remplir). Le soucis est que pour ces fichiers, je dois copier une valeur (nommée Alerte) qui se trouve en B8 (dans chacun des fichiers) et la mettre dans la deuxieme colonne du fichier actif.

Je tente de faire le tout via une macro mais je vous avoue que j'ai du mal avec la prog, à mon grand désarroi...

Voici le code que j'ai pu pondre jusqu'a maintenant :

Code:
Sub Lister()
    Dim Chemin As String
    Dim Fichier As String
    Dim Alerte As String
    Dim ligne As Integer
    ligne = 2
    Chemin = "chemin_réseau_du_dossier"
    Fichier = Dir(Chemin)

    Do While Fichier <> "" 'Jusqu'à ce que la recherche soit vide
        Cells(ligne, 1) = Fichier 'On écrit le nom du fichier dans une cellule
        Workbook(Fichier).Sheets("Feuil1").Range("B8").Copy
        Alerte = ActiveWorkbook.Sheets("Feuil1").Paste
        Cells(ligne, 2) = Alerte 'On écrit le nom de l'alerte correspondant au fichier
        Fichier = Dir 'Fichier suivant
        ligne = ligne + 1
    Loop
End Sub

Merci d'avance pour l'aide apportée ^^

Cordialement,

RhaegarNorka
 

drul

Obscur pro du hardware
Staff
Salut,
Tu devras ouvrir chacun des fichier pour accéder à la cellule B8, à l'aide "Workbooks.open(fichier)" ensuite faire la copie puis refermer le fichier "Workbooks(fichier).close".
Un conseil, déclare deux variable de type workbook, une contenant ton fichier de base, l'autre le fichier ouvert, beaucoup plus facile pour s'y retrouver.
P.S. evite d'utiliser paste, mais plutôt:
Code:
Source.copy destination:=TargetRange
 

RhaegarNorka

Habitué
Salutations,

Je te remercie de ta réponde Drul =)

Le problème est que j'aurais besoin que tout le travail se fasse de façon automatique (j'avais oublié de la marquer...)

Y aurait-il un moyen selon toi de faire ça ? j'ai retourné la question dans tous les sens et je ne trouve absolument rien...

En revanche je ne vois pas comment utiliser la variable que tu viens de me passer =/

J'avais tenté un truc de mon coté mais ça marche pas ^^'

En retour j'ai un message disant "Erreur '13' : type incompatible" et ça me renvois sur la ligne "If Fichier <> true Then" =(

Code:
'Pour rechercher des fichers Excel en VB depuis un fichier .xls
Sub Lister()
    Dim Chemin As String
    Dim Fichier As String
    Dim Alerte As String
    Dim ligne As Integer
    Dim Entree As Workbook
    Dim Sortie As Workbook
    Dim FeuilleOrigine As Worksheet
    Dim FeuilleDestination As Worksheet
    ligne = 2
    Chemin = "chemin_reseau_des_fichiers"
    Fichier = Dir(Chemin)
    Set Sortie = ThisWorkbook
    Do While Fichier <> "" 'Jusqu'à ce que la recherche soit vide
        Cells(ligne, 1) = Fichier 'On écrit le nom du fichier dans une cellule
        Fichier = Application.GetOpenFilename("Fichier Excel(*.xls;*.xlsm;*.xlsx),*.xls;*.xlsm;*.xlsx")
        If Fichier <> True Then
            Set Entree = Workbooks.Open(Fichier)
            Set FeuilleOrigine = Entree.Sheets("Feuil1")
            Set FeuilleDestination = Sortie.Sheets("Feuil1")
            With Alerte = FeuilleOrigine.Range("B8").Value
            End With
            Entree.Close
            Cells(ligne, 2) = Alerte 'On écrit le nom de l'alerte correspondant au fichier
            Fichier = Dir 'Fichier suivant
            ligne = ligne + 1
        End If
    Loop
End Sub
 

drul

Obscur pro du hardware
Staff
Meilleure réponse
Essaye ça:

Code:
Sub Lister()

    Dim Chemin As String

    Dim Fichier As String

    Dim Alerte As String

    Dim ligne As Integer

    Dim Entree As Workbook

    Dim Sortie As Workbook

    Dim FeuilleOrigine As Worksheet

    Dim FeuilleDestination As Worksheet

    ligne = 2

    Chemin = "chemin_reseau_des_fichiers"

    Fichier = Dir(Chemin)

    Set Sortie = ThisWorkbook

    Do While Fichier <> "" 'Jusqu'à ce que la recherche soit vide

        Cells(ligne, 1) = Fichier 'On écrit le nom du fichier dans une cellule

            Set Entree = Workbooks.Open(Chemin & "\" & Fichier)

            Set FeuilleOrigine = Entree.Sheets("Feuil1")

            Set FeuilleDestination = Sortie.Sheets("Feuil1")

           FeuilleOrigine.Range("B8").copy destination :=  FeuilleDestination .Cells(ligne, 2) 

            Entree.Close

            Fichier = Dir 'Fichier suivant

            ligne = ligne + 1

    Loop

End Sub
Il faut qu'il n'y ai que des fichier excel dans ton répertoire, sinon ça plante (mais on peut filtrer)
 

RhaegarNorka

Habitué
Bonjour Drul,

Merci de ta réponse et de t'intéresser à mon cas ^^

Désolé du retard mais j'avais pas les documents avec moi chez moi (confidentialité tout ça...).

Je viens de tester ton code. La commande "FeuilleOrigine.Range("B8").copy destination := FeuilleDestination .Cells(ligne, 2) " est intéressante mais le problème c'est que la macro ne me retourne strictement rien ='(

J'ai suivi ton conseil et il n'y a que des fichiers Excel dans mon dossier. Cependant ces fichiers sont en lecture seule (encore un détail important oublié de ma part...), je ne sais pas si ça joue dans l'exécution du code =/

Si tu as une idée je suis preneur ^^
 

RhaegarNorka

Habitué
Re-Bonjour la Compagnie,

Bon Drul, j'ai trouvé où ça plantai chez moi, il manque un "\" dans le chemin d'accès réseau. Une fois que je l'ai rajouté tout fonctionne correctement =)

Le seul hic c'est que les fichiers (étant en lecture seule) me demande de les ouvrir en lecture seule quand la macro vient les chercher.

Penses tu qu'il soit possible que l'on passe outre cette demande ?

Encore merci de l'aide apportée jusqu'a mainenant =)
 

RhaegarNorka

Habitué


J'ai réussi :)
Il suffisait que je rajoute ReadOnly:=True juste après (chemin & "\" & fichier) et ça fonctionne nickel :)

Encore merci à toi :)
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 136
Messages
6 718 120
Membres
1 586 398
Dernier membre
mookie767
Partager cette page
Haut