Bonjour à tous, je reviens sur mon post du 3 mai auquel Daniel.C m'a apporté
une solution ( merci à lui )
Je voudrais améliorer la macro et pouvoir faire la recherche de dates sans
ouvrir le classeur "Anniversaire.xls"
Merci pour votre aide
Pour mémoire, je rappelle le contenu des messages du 3 mai :
Dans un fichier nommé Anniversaires.xls ( Excel 2003 ) j'ai un ensemble de
dates d'anniversaires pour la famille et les amis.
Je voudrais si c'est possible que dès que j'ouvre un autre fichier qui
s'appelle Pense-bête.xls,
si le fichier Anniversaires.xls n'est pas ouvert, et si une des dates
anniversaire correspond à la date du jour, une alerte apparaisse sous la
forme d'une Msgbox par exemple. Les dates anniversaires se trouvent en
colonne C du fichier Anniversaires.xls.
Si le fichier Anniversaires.xls est ouvert, on ne fait rien.
Quant à la personne dont c'est l'anniversaire, il peut y avoir plusieurs
personnes ayant la même date anniversaire, la seule condition est donc que
lorsqu'on parcours la colonne C où se trouvent les dates anniversaires, dès
que la recherche ( fonction Find ? ) trouve une date étant égale à la date
du jour, une alerte msgbox soit donnée.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Daniel.C
Bonjour. 1. Dans Outils, Références, coche "Microsoft ActiveX Data Objects 2.8 Library" 2. Le nom de champ (en C1 du fichier anniversaire) s'appelle "Dates" dans la macro. Modifier en conséquence. 3. Dans ThisWorkbook, mettre le code suivant :
Private Sub Workbook_Open() Dim wb As Workbook, c As Range For Each wb In Workbooks If wb.Name = "Anniversaire.xls" Then Exit Sub Next wb Dim Cn As ADODB.Connection Dim Fichier As String, Tablo(10000, 1) Dim NomFeuille As String, texte_SQL As String 'Définit le classeur fermé servant de base de données Fichier = "c:tempAnniversaire.xls" Set Cn = New ADODB.Connection '--- Connexion --- With Cn .Provider = "Microsoft.Jet.OLEDB.4.0" .ConnectionString = "Data Source=" & Fichier & _ ";Extended Properties=Excel 8.0;" .Open NomFeuille = "Feuil1" texte_SQL = "SELECT Dates FROM [" & NomFeuille & "$]" Set rst = New ADODB.Recordset Set rst = .Execute(texte_SQL) rst.MoveFirst With rst Do While Not rst.EOF If !Dates = Date Then MsgBox "Anniversaire(s) aujourd'hui" rst.Close Cn.Close Set Cn = Nothing Exit Sub End If rst.MoveNext Loop End With rst.Close End With '--- Fermeture connexion --- Cn.Close Set Cn = Nothing
End Sub
Cordialement. Daniel
Bonjour à tous, je reviens sur mon post du 3 mai auquel Daniel.C m'a apporté une solution ( merci à lui )
Je voudrais améliorer la macro et pouvoir faire la recherche de dates sans ouvrir le classeur "Anniversaire.xls"
Merci pour votre aide
Pour mémoire, je rappelle le contenu des messages du 3 mai :
Dans un fichier nommé Anniversaires.xls ( Excel 2003 ) j'ai un ensemble de dates d'anniversaires pour la famille et les amis.
Je voudrais si c'est possible que dès que j'ouvre un autre fichier qui s'appelle Pense-bête.xls, si le fichier Anniversaires.xls n'est pas ouvert, et si une des dates anniversaire correspond à la date du jour, une alerte apparaisse sous la forme d'une Msgbox par exemple. Les dates anniversaires se trouvent en colonne C du fichier Anniversaires.xls.
Si le fichier Anniversaires.xls est ouvert, on ne fait rien. Quant à la personne dont c'est l'anniversaire, il peut y avoir plusieurs personnes ayant la même date anniversaire, la seule condition est donc que lorsqu'on parcours la colonne C où se trouvent les dates anniversaires, dès que la recherche ( fonction Find ? ) trouve une date étant égale à la date du jour, une alerte msgbox soit donnée.
Cordialement
Infogroup
Bonjour.
1. Dans Outils, Références, coche "Microsoft ActiveX Data Objects 2.8
Library"
2. Le nom de champ (en C1 du fichier anniversaire) s'appelle "Dates"
dans la macro. Modifier en conséquence.
3. Dans ThisWorkbook, mettre le code suivant :
Private Sub Workbook_Open()
Dim wb As Workbook, c As Range
For Each wb In Workbooks
If wb.Name = "Anniversaire.xls" Then Exit Sub
Next wb
Dim Cn As ADODB.Connection
Dim Fichier As String, Tablo(10000, 1)
Dim NomFeuille As String, texte_SQL As String
'Définit le classeur fermé servant de base de données
Fichier = "c:tempAnniversaire.xls"
Set Cn = New ADODB.Connection
'--- Connexion ---
With Cn
.Provider = "Microsoft.Jet.OLEDB.4.0"
.ConnectionString = "Data Source=" & Fichier & _
";Extended Properties=Excel 8.0;"
.Open
NomFeuille = "Feuil1"
texte_SQL = "SELECT Dates FROM [" & NomFeuille & "$]"
Set rst = New ADODB.Recordset
Set rst = .Execute(texte_SQL)
rst.MoveFirst
With rst
Do While Not rst.EOF
If !Dates = Date Then
MsgBox "Anniversaire(s) aujourd'hui"
rst.Close
Cn.Close
Set Cn = Nothing
Exit Sub
End If
rst.MoveNext
Loop
End With
rst.Close
End With
'--- Fermeture connexion ---
Cn.Close
Set Cn = Nothing
End Sub
Cordialement.
Daniel
Bonjour à tous, je reviens sur mon post du 3 mai auquel Daniel.C m'a apporté
une solution ( merci à lui )
Je voudrais améliorer la macro et pouvoir faire la recherche de dates sans
ouvrir le classeur "Anniversaire.xls"
Merci pour votre aide
Pour mémoire, je rappelle le contenu des messages du 3 mai :
Dans un fichier nommé Anniversaires.xls ( Excel 2003 ) j'ai un ensemble de
dates d'anniversaires pour la famille et les amis.
Je voudrais si c'est possible que dès que j'ouvre un autre fichier qui
s'appelle Pense-bête.xls,
si le fichier Anniversaires.xls n'est pas ouvert, et si une des dates
anniversaire correspond à la date du jour, une alerte apparaisse sous la
forme d'une Msgbox par exemple. Les dates anniversaires se trouvent en
colonne C du fichier Anniversaires.xls.
Si le fichier Anniversaires.xls est ouvert, on ne fait rien.
Quant à la personne dont c'est l'anniversaire, il peut y avoir plusieurs
personnes ayant la même date anniversaire, la seule condition est donc que
lorsqu'on parcours la colonne C où se trouvent les dates anniversaires, dès
que la recherche ( fonction Find ? ) trouve une date étant égale à la date
du jour, une alerte msgbox soit donnée.
Bonjour. 1. Dans Outils, Références, coche "Microsoft ActiveX Data Objects 2.8 Library" 2. Le nom de champ (en C1 du fichier anniversaire) s'appelle "Dates" dans la macro. Modifier en conséquence. 3. Dans ThisWorkbook, mettre le code suivant :
Private Sub Workbook_Open() Dim wb As Workbook, c As Range For Each wb In Workbooks If wb.Name = "Anniversaire.xls" Then Exit Sub Next wb Dim Cn As ADODB.Connection Dim Fichier As String, Tablo(10000, 1) Dim NomFeuille As String, texte_SQL As String 'Définit le classeur fermé servant de base de données Fichier = "c:tempAnniversaire.xls" Set Cn = New ADODB.Connection '--- Connexion --- With Cn .Provider = "Microsoft.Jet.OLEDB.4.0" .ConnectionString = "Data Source=" & Fichier & _ ";Extended Properties=Excel 8.0;" .Open NomFeuille = "Feuil1" texte_SQL = "SELECT Dates FROM [" & NomFeuille & "$]" Set rst = New ADODB.Recordset Set rst = .Execute(texte_SQL) rst.MoveFirst With rst Do While Not rst.EOF If !Dates = Date Then MsgBox "Anniversaire(s) aujourd'hui" rst.Close Cn.Close Set Cn = Nothing Exit Sub End If rst.MoveNext Loop End With rst.Close End With '--- Fermeture connexion --- Cn.Close Set Cn = Nothing
End Sub
Cordialement. Daniel
Bonjour à tous, je reviens sur mon post du 3 mai auquel Daniel.C m'a apporté une solution ( merci à lui )
Je voudrais améliorer la macro et pouvoir faire la recherche de dates sans ouvrir le classeur "Anniversaire.xls"
Merci pour votre aide
Pour mémoire, je rappelle le contenu des messages du 3 mai :
Dans un fichier nommé Anniversaires.xls ( Excel 2003 ) j'ai un ensemble de dates d'anniversaires pour la famille et les amis.
Je voudrais si c'est possible que dès que j'ouvre un autre fichier qui s'appelle Pense-bête.xls, si le fichier Anniversaires.xls n'est pas ouvert, et si une des dates anniversaire correspond à la date du jour, une alerte apparaisse sous la forme d'une Msgbox par exemple. Les dates anniversaires se trouvent en colonne C du fichier Anniversaires.xls.
Si le fichier Anniversaires.xls est ouvert, on ne fait rien. Quant à la personne dont c'est l'anniversaire, il peut y avoir plusieurs personnes ayant la même date anniversaire, la seule condition est donc que lorsqu'on parcours la colonne C où se trouvent les dates anniversaires, dès que la recherche ( fonction Find ? ) trouve une date étant égale à la date du jour, une alerte msgbox soit donnée.