Ouvrir et fermer un fichier
Dernière réponse : dans Programmation
Bonjour à tous,
je cherche à récupérer les informations de plusieurs fichiers et à créer un historique générale.
J'ai écri un code qui marche très bien mais il faut pour cela que le ou les fichiers à copier soient ouvert.
Je sais que je peux nommer quelques trucs pour que ce soit moins long mais bon. la c pas l'objet de ma demande.
J'ai donc essayer le code suivant pour ouvrir puis fermer le fichier à copier
Et la j'ai un probleme. Propriété ou méthode non géré par cet objet. Je pense que ca vient du fait qu'il ne reconnait pas les ligne (a,i,n) mais je ne vois pas quoi faire.
Merci de votre aide
Julien
je cherche à récupérer les informations de plusieurs fichiers et à créer un historique générale.
J'ai écri un code qui marche très bien mais il faut pour cela que le ou les fichiers à copier soient ouvert.
Sub historique()
Dim i As Long, a As Long
Dim n As Long
a = Worksheets("Historique Abattage").Range("A65536").End(xlUp).Row + 1
n = Workbooks("Plan com Abattage").Worksheets("Historique des pannes").Range("A65536").End(xlUp).Row
For i = 5 To n
If Workbooks("Plan com Abattage").Worksheets("Historique des pannes").Cells(i, 11).Value = 1 Then
Worksheets("Historique Abattage").Cells(a, 1).Value = Workbooks("Plan com Abattage").Worksheets("Historique des pannes").Cells(i, 1).Value
Worksheets("Historique Abattage").Cells(a, 2).Interior.ColorIndex = Workbooks("Plan com Abattage").Worksheets("Historique des pannes").Cells(i, 2).Interior.ColorIndex
Worksheets("Historique Abattage").Cells(a, 3).Value = Workbooks("Plan com Abattage").Worksheets("Historique des pannes").Cells(i, 3).Value
Worksheets("Historique Abattage").Cells(a, 4).Value = Workbooks("Plan com Abattage").Worksheets("Historique des pannes").Cells(i, 4).Value
Worksheets("Historique Abattage").Cells(a, 5).Value = Workbooks("Plan com Abattage").Worksheets("Historique des pannes").Cells(i, 5).Value
Worksheets("Historique Abattage").Cells(a, 6).Value = Workbooks("Plan com Abattage").Worksheets("Historique des pannes").Cells(i, 6).Value
Worksheets("Historique Abattage").Cells(a, 7).Value = Workbooks("Plan com Abattage").Worksheets("Historique des pannes").Cells(i, 7).Value
Workbooks("Plan com Abattage").Worksheets("Historique des pannes").Cells(i, 11).Value = 0
a = a + 1
End If
Next
End Sub
Je sais que je peux nommer quelques trucs pour que ce soit moins long mais bon. la c pas l'objet de ma demande.
J'ai donc essayer le code suivant pour ouvrir puis fermer le fichier à copier
Sub historiqueabattage()
Dim wb As Workbook
Dim ws As Worksheet
Dim i As Long, n As Long
Dim a As Long
Set wb = Workbooks.Open("C:\Documents and Settings\STAGE\Bureau\Plan com U4\Plan com Abattage.xls")
Set ws = wb.Worksheets("Historique des pannes")
a = ActiveSheet.Range("A65536").End(xlUp).Row + 1
n = wb.ws.Range("A65536").End(xlUp).Row
For i = 5 To n
If wb.ws.Cells(i, 11).Value = 1 Then
ActiveSheet.Cells(a, 1).Value = wb.ws.Cells(i, 1).Value
ActiveSheet.Cells(a, 2).Interior.ColorIndex = wb.ws.Cells(i, 2).Interior.ColorIndex
ActiveSheet.Cells(a, 3).Value = wb.ws.Cells(i, 3).Value
ActiveSheet.Cells(a, 4).Value = wb.ws.Cells(i, 4).Value
ActiveSheet.Cells(a, 5).Value = wb.ws.Cells(i, 5).Value
ActiveSheet.Cells(a, 6).Value = wb.ws.Cells(i, 6).Value
ActiveSheet.Cells(a, 7).Value = wb.ws.Cells(i, 7).Value
wb.ws.Cells(i, 11).Value = 0
a = a + 1
End If
Next
wb.Close SaveChanges:=True
End Sub
Et la j'ai un probleme. Propriété ou méthode non géré par cet objet. Je pense que ca vient du fait qu'il ne reconnait pas les ligne (a,i,n) mais je ne vois pas quoi faire.
Merci de votre aide
Julien
Autres pages sur : ouvrir fermer fichier
Lassé par la pub ? Créez un compte
Meilleure solution
salut,
Ohla ! pas d'activesheet quand on ouvre et on ferme des classeurs et des feuilles, c'est le meilleur moyen de s'embrouiller. Définis donc une variable pour la seconde feuille.
Ligne 9, tu définis un classeur. C'est bien.
Ligne 10, tu définis une feuille de ce classeur. C'est bien.
(Ligne 12, tu utilises la feuille active, c'est mal.)
Ligne 13, tu utilises la feuille de ce classeur de ce classeur. C'est bizarre, non ?
Inutile (et c'est une erreur) de préciser la classeur pour une feuille déjà renseignée.
Pour preuve, copie ce code à la ligne 11 :
Ohla ! pas d'activesheet quand on ouvre et on ferme des classeurs et des feuilles, c'est le meilleur moyen de s'embrouiller. Définis donc une variable pour la seconde feuille.
Ligne 9, tu définis un classeur. C'est bien.
Ligne 10, tu définis une feuille de ce classeur. C'est bien.
(Ligne 12, tu utilises la feuille active, c'est mal.)
Ligne 13, tu utilises la feuille de ce classeur de ce classeur. C'est bizarre, non ?
Inutile (et c'est une erreur) de préciser la classeur pour une feuille déjà renseignée.
Pour preuve, copie ce code à la ligne 11 :
MsgBox "Je suis la feuille " & ws.Name & " et mon classeur est " & ws.Workbook.Name
Bonjour Zeb
finalement le pb n'était pas difficile à résoudre mais je ne voyais pas d'ou ca venait. merci de ton aide.
pour info voici le code qui fonctionne
finalement le pb n'était pas difficile à résoudre mais je ne voyais pas d'ou ca venait. merci de ton aide.
pour info voici le code qui fonctionne
Sub historique()
Dim wb, wb2 As Workbook
Dim ws, ws2 As Worksheet
Dim i As Long, a As Long
Dim n As Long
Set wb = Workbooks.Open("C:\Documents and Settings\STAGE\Bureau\Plan com U4\Plan com Abattage.xls")
Set ws = wb.Worksheets("Historique des pannes")
Set wb2 = Workbooks("Historique générale des pannes U4")
Set ws2 = wb2.Worksheets("Historique Abattage")
a = ws2.Range("A65536").End(xlUp).Row + 1
n = ws.Range("A65536").End(xlUp).Row
For i = 5 To n
If ws.Cells(i, 11).Value = 1 Then
ws2.Cells(a, 1).Value = ws.Cells(i, 1).Value
ws2.Cells(a, 2).Interior.ColorIndex = ws.Cells(i, 2).Interior.ColorIndex
ws2.Cells(a, 3).Value = ws.Cells(i, 3).Value
ws2.Cells(a, 4).Value = ws.Cells(i, 4).Value
ws2.Cells(a, 5).Value = ws.Cells(i, 5).Value
ws2.Cells(a, 6).Value = ws.Cells(i, 6).Value
ws2.Cells(a, 7).Value = ws.Cells(i, 7).Value
ws.Cells(i, 11).Value = 0
a = a + 1
End If
Next
wb.Close SaveChanges:=True
End Sub
Petite question pour apporter une dernière amélioration à mon projet:
mon but est de venir chercher les infos dans 3 autres fichiers pour avoir une sauvegarde générale. ce sont d'autre personnes qui saississent les infos.
comment puis-je savoir si le fichier est déjà ouvert au moment de l'acivation de la macro et si c'est le cas comment afficher un message le signalant puis stoper la macro.
Je sais que tu donnes pas les réponses comme ca donc si tu peux me mettre sur la voie. J'appliquerai à ma macro ensuite
Par avance merci
Julien
mon but est de venir chercher les infos dans 3 autres fichiers pour avoir une sauvegarde générale. ce sont d'autre personnes qui saississent les infos.
comment puis-je savoir si le fichier est déjà ouvert au moment de l'acivation de la macro et si c'est le cas comment afficher un message le signalant puis stoper la macro.
Je sais que tu donnes pas les réponses comme ca donc si tu peux me mettre sur la voie. J'appliquerai à ma macro ensuite
Par avance merci
Julien
Mon code est le suivant
En ligne 9 je viens ouvrir le fichier dans lequel je viens récupérer les infos qui m'interesse.
Seulement il est possible que le fichier en question soit déjà ouvert par la personne chargée de le remplir. si c'est le cas je ne viens pas copier les infos qui m'interesse et surtout je le sais meme pas car rien ne me l'indique.
C'est pourquoi au moment ou j'ouvre mon fichier, s'il est déjà ouvert, je voudrai afficher un msgbox indiquant que le fichier est ouvert puis stopper la macro.
J'ai essayer avec on error mais rien ne se passe. Je ne vois pas comment faire
Sub historiquetranchage()
Dim wb, wb2 As Workbook
Dim ws, ws2 As Worksheet
Dim i As Long, a As Long
Dim n As Long
Set wb = Workbooks.Open("C:\Documents and Settings\STAGE\Bureau\Plan com U4\Plan com salle HR.xls")
Set ws = wb.Worksheets("Historique (détail)")
Set wb2 = Workbooks("Historique générale des pannes U4")
Set ws2 = wb2.Worksheets("Historique Salle Haut risque")
a = ws2.Range("A65536").End(xlUp).Row + 1
n = ws.Range("A65536").End(xlUp).Row
For i = 5 To n
If ws.Cells(i, 11).Value = 1 And ws.Cells(i, 12) = 1 Then
ws2.Cells(a, 1).Value = ws.Cells(i, 1).Value
ws2.Cells(a, 2).Interior.ColorIndex = ws.Cells(i, 2).Interior.ColorIndex
ws2.Cells(a, 3).Value = ws.Cells(i, 3).Value
ws2.Cells(a, 4).Value = ws.Cells(i, 4).Value
ws2.Cells(a, 5).Value = ws.Cells(i, 5).Value
ws2.Cells(a, 6).Value = ws.Cells(i, 6).Value
ws2.Cells(a, 7).Value = ws.Cells(i, 7).Value
ws.Cells(i, 11).Value = 0
ws.Cells(i, 12).Value = 0
a = a + 1
ElseIf ws.Cells(i, 11).Value = 1 And ws.Cells(i, 12) = 0 Then
ws2.Cells(a, 1).Value = ws.Cells(i, 1).Value
ws2.Cells(a, 2).Interior.ColorIndex = ws.Cells(i, 2).Interior.ColorIndex
ws2.Cells(a, 3).Value = ws.Cells(i, 3).Value
ws2.Cells(a, 4).Value = ws.Cells(i, 4).Value
ws2.Cells(a, 5).Value = ws.Cells(i, 5).Value
ws.Cells(i, 11).Value = 0
a = a + 1
ElseIf ws.Cells(i, 11).Value = 0 And ws.Cells(i, 12) = 1 Then
a = i
ws2.Cells(a, 6).Value = ws.Cells(i, 6).Value
ws2.Cells(a, 7).Value = ws.Cells(i, 7).Value
ws.Cells(i, 12).Value = 0
a = a + 1
End If
Next
wb.Close SaveChanges:=True
End Sub
En ligne 9 je viens ouvrir le fichier dans lequel je viens récupérer les infos qui m'interesse.
Seulement il est possible que le fichier en question soit déjà ouvert par la personne chargée de le remplir. si c'est le cas je ne viens pas copier les infos qui m'interesse et surtout je le sais meme pas car rien ne me l'indique.
C'est pourquoi au moment ou j'ouvre mon fichier, s'il est déjà ouvert, je voudrai afficher un msgbox indiquant que le fichier est ouvert puis stopper la macro.
J'ai essayer avec on error mais rien ne se passe. Je ne vois pas comment faire
julien05 a dit :
Je sais que tu donnes pas les réponses comme ca donc si tu peux me mettre sur la voie. J'appliquerai à ma macro ensuitezeb a dit :
Je donne les solutions pourvu qu'on fasse montre d'un peu de recherche personnelle.
julien05 a dit :
Si je pose la question c'est que les recherches n'ont rien donné de concluant. je ne pose des question que lorsque que je suis bloqué.
Bon, j'ai de nouveau accès à une machine avec Windows+Excel. Je regarde....
J'ai une idée à te soumettre.
Avant, la ligne 9, tu vérifies si le classeur est déjà ouvert ou pas.
Si un des classeurs ouverts (Workbooks) a pour propriété Name le nom de fichier que tu veux ouvrir, c'est qu'il est déjà ouvert.
Pour plus de précision encore, tu peux regarder du côté de FullName au lieu de simplement Name.
Avant, la ligne 9, tu vérifies si le classeur est déjà ouvert ou pas.
Si un des classeurs ouverts (Workbooks) a pour propriété Name le nom de fichier que tu veux ouvrir, c'est qu'il est déjà ouvert.
Dim NomFichier As String
Dim wb As Workbook
NomFichier = "Plan com salle HR.xls"
For Each wb In Workbooks
If wb.Name = NomFichier Then
MsgBox "Le fichier est déjà ouvert"
Exit For
End If
Next
Pour plus de précision encore, tu peux regarder du côté de FullName au lieu de simplement Name.
Lassé par la pub ? Créez un compte
- Contenus similaires :