Appel d'un fichier excel 2007 fermé pour MAJ

Résolu/Fermé
clark...kent - 17 avril 2012 à 09:51
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 - 19 avril 2012 à 16:58
Bonjour,
Je mets le nez dans VBA depuis une semaine et c'est dur pour un novice comme moi.

J'ai un fichier A, ou fichier utilisateur. Je souhaite que ce fichier se mette à jour en fonction de la date sélectionnée dans un formulaire, qui lui même affiche un calendrier
lors de la saisie de button.

Excel peut il intégrer un calendrier hebdomadaire et mensuel en plus du calendrier journalier?

Chacun de ces calendriers peut il s'afficher à la date d'aujourd'hui? j'ai essayé date et Now mais rien ne fonctionne, peut etre une erreur de parenthèse?

Ensuite, je souhaite qu'une fois la date saisie ainsi que l'agent ou l'équipe, par exemple si l'utilisateur choisi la date d'aujourd'hui la macro fera appel à "C:/17042012.xlsx" , ou d'autres dates antérieures, dans ce cas "C:/12032012.xslx" pour que les résultats se mettent à jour de facon dynamique selon ces deux critères : date, [(agent ou équipe) ou hors normes]

Dans mon cas, le second fichier "date" doit il être ouvert ou peut il rester fermé?

J'ai tenté des choses du genre Application Run mais impossible de l'appliquer à une condition de date. J'ai cherché sur plusieurs forums mais je sèche là.

Voici mon fichier : http://cjoint.com/?3DrjVZakARt

Désolé pour la clarté du code, j'ai essayé de faire au mieux.

L'objectif final est d'avoir en quelques clics une image clair des données selon
les critères sélectionnés au départ.

Merci de votre aide.



A voir également:

14 réponses

lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
Modifié par lermite222 le 18/04/2012 à 10:14
Workbooks.Open ("C:\" & format([A3].Value,"dd mm yyyy") & ".xlsx") 

Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
NOTE : Je ne répond pas aux MP pour les questions techniques.
1
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
19 avril 2012 à 16:58
Ouvre le classeur selon la date en A3 dans la feuille Chargement 
With Sheets("Chargement") 
Workbooks.Open ("C:\" & Format([A3].Value, "dd mm yyyy") & ".xlsx") 

'Recherche dans le nouveau classeur ouvert le nom ou l'équipe sélectionné 
With Sheets("Total") 

Ca déjà ça va pas marcher... Quelle feuille Excel doit choisir ? y va se mélanger les pinceaux.
Tu peu faire..
Ouvre le classeur selon la date en A3 dans la feuille Chargement 
    Sheets("Chargement").select 
Workbooks.Open ("C:\" & Format([A3].Value, "dd mm yyyy") & ".xlsx") 

'Recherche dans le nouveau classeur ouvert le nom ou l'équipe sélectionné 
With Sheets("Total")


les "Range" avec un point devant seront de la feuille Total et sans point de la feuille Chargement.
Mais le code que tu montre n'est pas assez explicite toutefois tu peut donner un critère qui provient d'ailleurs pour autant que tu le précise.
A+
1
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
Modifié par lermite222 le 17/04/2012 à 10:57
Re,
Excel peut il intégrer un calendrier hebdomadaire et mensuel en plus du calendrier journalier?
Mensuel, tu devrais mettre un combobox avec les noms de mois.
Hebdomadaire ? Par N° de semaine ? non.

Chacun de ces calendriers peut il s'afficher à la date d'aujourd'hui? j'ai essayé date et Now mais rien ne fonctionne, peut etre une erreur de parenthèse?
Tu dois séparer la date
Calendar1.Day = Day(Now) 
Calendar1.Month = Month(Now) 
Calendar1.Year = Year(Now)

Je sais pas tester ton calendrier je n'ai pas cet OCX. Tu l'a télécharger ?

Travailler sur d'autre classeurs ne pose pas de problème.
A+
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
NOTE : Je ne répond pas aux MP pour les questions techniques.
0
clark...kent
17 avril 2012 à 11:11
Encore toi, décidemment tu es le maître de ces lieux :)

Pour les mois, c'est ce que je pensais faire, mais le numéro des semaines l'utilisateur doit pouvoir les choisir en fonction des journées. Je m'explique.

Si il souhaite consulter la plage du lundi, mardi, mercredi de cette semaine, il ne va pas choisir 3 jours mais plutot le numéro de semaine correspondant.

Pour que le calendrier affiche la date d'aujourd'hui, j'ai déjà essayé plusieurs fois ta formule et il m'affiche une erreur au "Private Sub Jour_Click()"
Je t'invite à essayer avec d'autres calendriers si tu en possède d'autres.

Concernant le travail avec d'autres classeurs, je sais que c'est possible, j'ai trouvé le code pour faire appel à une feuille excel contenu dans un autre classeur. Seul problème, le classeur doit être ouvert et la formule fonctionne sans condition. Et à cet appel, je veux y mettre la condition de la date du calendrier qui sera sélectionné par l'utilisateur.(if?)

Et enfin pour l'OCX, non je ne l'ai pas téléchargé, il était intégré (office 2007), mais bizarrement il ne l'est pas chez moi (office 2010) donc un peu plus compliqué pour travaillé à la maison.

Merci
0

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

Posez votre question
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
17 avril 2012 à 11:38
Pour la semaine, j'ai vu que tu avais mis des OptionButton, si Semaine est sélectionner il ne faut cliquer que sur un seul jour du calendrier et avec la fonction WeekDay trouver la semaine complète.

L'erreur est normale si tu n'a pas l'OCX sur ton PC, J'ai un autre calendrier mais la syntaxe est différente.

Le 2007 que tu à est probablement un "Pro" et le 2010 (comme mon 2007) est un "Studient"
Il y a moyen de télécharger un calendrier ICI mais je ne sais pas ce que c'est exactement.

Sur autre classeur : Tu peu ouvrir un classeur en invisible et faire tout ce que tu veux dedans, les conditions sont à implémenter dans ton code.
A+
0
clark...kent
17 avril 2012 à 12:26
Ok je vais me renseigner sur cette fonction week day car je ne connais pas comment l'utiliser.

Sinon oui mon 2007 est bien une version pro. Le calendrier que tu m'as proposé n'est pas le même malheureusement.

Pour l'ouverture du classeur voici mon code : (soyez indulgent j'ai commencé le VBA il y a une semaine).

Sub Calendar1_Click()
Dim Cnx As ADODB.Connection

Calendar1.Day = Day(Now)
Me.Calendar1.Value = Date

'Définit le classeur fermé servant de base de données
Fichier = "C:\""Date" & ".xslx"

Set Cnx = New ADODB.Connection

'--- Connexion ---
With Cnx
.Provider = "Microsoft.Jet.OLEDB.4.0"
.ConnectionString = "Data Source=" & Fichier & _
";Extended Properties=Excel 8.0;"
.Open
End With

'... la requête ...
With Sheets("Total")
Lig = .Range("H65536").End(xlUp).Row
Sheets("Résultats").Rows("2:" & Lig).Delete
'Blanc Sheets("Base de données").Range("A2:K" & Lig)
.Range("A1:K" & Lig).AutoFilter Field:=8, Criteria1:=.[M1]
.Range("A2:K" & Lig).SpecialCells(xlCellTypeVisible).Copy Sheets("Résultats").[A2]
.Range("A1:K" & Lig).AutoFilter
Sheets("Résultats").Select
End With

'--- Fermeture connexion ---
Cnx.Close
Set Cn = Nothing
End Sub

Il bloque à la fonction open et me dis que le fichier est en lecture seule.
Ensuite mon critère situé en M1, j'essaye que celui-ci provienne du résultat de la sélection d'une zone de liste déroulante contenu dans mon userform.

Bref, je vais jamais m'en sortir, j'ai la tête comme une pastèque.
0
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
Modifié par lermite222 le 17/04/2012 à 14:43
Si tu ouvre un classeur comme une base de données ce que tu fait après n'est pas possible, tu peu juste extraire ou ajouter des données et il faut travailler comme dans une base de données.
Tu dois ouvrir le classeur tout simplement
WorkBooks.open("C:\Repertoire\MonFichier.xlsx")
ensuite tu peu travailler dans ce classeur.
A+
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
NOTE : Je ne répond pas aux MP pour les questions techniques.
0
clark...kent
17 avril 2012 à 14:56
Salut,
Alors tout d'abord je me répond à moi même pour date :
Private Sub UserForm_Initialize()
Calendar1.Value = Date
End Sub

Private Sub Calendar1_Click()
ActiveCell.Value = Format(Calendar1.Value, "dd mmmm yyyy")
Range("A2") = Date
End Sub

La première initialise à la date d'aujourd'hui, la deuxième me colle la date dans une cellule, mon problème c'est qu'il me change pas la date quand j'en sélectionne une autre dans le calendrier.

Ensuite, pour l'ouverture du fichier excel, pas de problème mais ce que je veux, c'est que cette ouverture de fichier s'effectue selon la date sélectionné dans le calendrier, qui elle sera affiché en A3.

Exemple WorkBooks.open"C:/"Date sélectionnée".xslx"

et après une commande pour fermée la BDD excel une fois les copies et mises à jour effectués.
0
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
17 avril 2012 à 15:21
C'est comme je disais plus haut, chaque OCX à sa syntaxe.
Pour OPEN tu peu faire
WorkBooks.Open ("C:\" & [A3].Value & ".xlsx"
Pour fermer
ActiveWorkBook.Close
Quelque chose comme ça...
    With Workbooks.Open("C:\" & [A3].Value & ".xlsx")
        'Pour qu'il reste invisible
        ActiveWindow.Visible = False
        With .Sheets("Total")
            Lig = .Range("H65536").End(xlUp).Row
            Sheets("Résultats").Rows("2:" & Lig).Delete
            'Blanc Sheets("Base de données").Range("A2:K" & Lig)
            .Range("A1:K" & Lig).AutoFilter Field:=8, Criteria1:=.[M1]
            .Range("A2:K" & Lig).SpecialCells(xlCellTypeVisible).Copy Sheets("Résultats").[A2]
            .Range("A1:K" & Lig).AutoFilter
            Sheets("Résultats").Select
        End With
        .Close
    End With

Mais je ne pense pas que c'est ça que tu veux faire.
Explique
0
clark...kent
17 avril 2012 à 23:19
si je ne peux pas tester le code chez moi, mais d'après ce que je lis ca semble ca que je veux faire...
Je ne connaissais pas cette partie
Pour OPEN tu peu faire
WorkBooks.Open ("C:\" & [A3].Value & ".xlsx"
Pour fermer
ActiveWorkBook.Close

Merci
0
clark...kent
18 avril 2012 à 09:48
la suite de l'aventure, donc pour ma date tout est ok, il l'écrit bien dans une cellule, A3 et au bon format. Par contre l'ouverture du classeur en question impossible. il me trouve une erreur ici.

Sub Valider_Click()
Dim Lig As String

'Ouvre le classeur de Franck selon la date collé en A3
Workbooks.Open Filename:=("C:\" & [A3].Value & ".xlsx")

J'ai essayé ça aussi "[A3].Value" ou sans le filename mais pareil, cela ne fonctionne pas.
0
clark...kent
18 avril 2012 à 09:56
En réalité, mon format de date est bon dans la cellule A3 (jj mm aaaa) mais lorsque j'éxécute la macro suivante

Workbooks.Open Filename:=("C:\" & [A3].Value & ".xlsx")

Il me cherche une date de format (jj/mm/aaaa) mais je ne peux pas mettre un tel format de date sur mes fichiers excel sources.
0
clark...kent
18 avril 2012 à 14:33
Une fois encore merci, ça fonctionne. Impeccable.
0
Clark...kent Messages postés 44 Date d'inscription mardi 25 mars 2008 Statut Membre Dernière intervention 1 mars 2020 2
19 avril 2012 à 13:51
J'ai une autre petite question technique, je n'ai pas voulu ouvrir un autre sujet.

Est ce que lors de l'utilisation d'un filtre (élaboré ou non), le critère de filtre peut il être situé dans le fichier destination plutot que dans le fichier excel base de données.

Exemple : Range("A2:L").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range( _"$A$5"), CopyToRange:=Range("A10"), Unique:=False

Mon A5 est dans le fichier destination, c'est le critère qui servira au filtre dans mon fichier excel ouvert au préalable sous condition grâce à ma macro.

Sub Valider_Click()
Dim Lig As String

'Ouvre le classeur selon la date en A3 dans la feuille Chargement
With Sheets("Chargement")
Workbooks.Open ("C:\" & Format([A3].Value, "dd mm yyyy") & ".xlsx")

'Recherche dans le nouveau classeur ouvert le nom ou l'équipe sélectionné
With Sheets("Total")
Lig = .Range("H65536").End(xlUp).Row

'Blanc Sheets("Résultats").Range("A2:L" & Lig)
Range("A2:L").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range( _
"$A$5"), CopyToRange:=Range("A10"), Unique:=False
Sheets("Résultats").Rows("2:" & Lig).Delete
.Range("A2:L" & Lig).SpecialCells(xlCellTypeVisible).Copy Sheets("Résultats").[A2]
.Range("A1:L" & Lig).AutoFilter
Sheets("Résultats").Select
End With
End With

Unload Me

End Sub

Merci de votre aide.
0