Macro Excel si fichier ouvert message et arrêt de la macro
Résolu/Fermé
Nilec
Messages postés
1
Date d'inscription
lundi 27 avril 2015
Statut
Membre
Dernière intervention
27 avril 2015
-
27 avril 2015 à 18:07
Le Pingou Messages postés 12227 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 6 janvier 2025 - 30 avril 2015 à 22:26
Le Pingou Messages postés 12227 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 6 janvier 2025 - 30 avril 2015 à 22:26
A voir également:
- Macro Excel si fichier ouvert message et arrêt de la macro
- Message - Guide
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Si et excel - Guide
- Fichier rar - Guide
- Cette action ne peut pas être réalisée car le fichier est ouvert dans system - Guide
11 réponses
Le Pingou
Messages postés
12227
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
6 janvier 2025
1 454
30 avril 2015 à 09:12
30 avril 2015 à 09:12
Bonjour,
C'est une nouvelle procédure (macro) qui doit être placée dans le module à la suite de la vôtre, c'est-à-dire après la ligne :
C'est une nouvelle procédure (macro) qui doit être placée dans le module à la suite de la vôtre, c'est-à-dire après la ligne :
End SubPetite remarque, j'ai l'impression que les résultats que vous obtiendrez dans le classeur [Liste des numéros.....] ne seront pas corrects. Entrer 3 à 4 enregistrements différents pour voir... !
f894009
Messages postés
17222
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
8 janvier 2025
1 712
28 avril 2015 à 09:13
28 avril 2015 à 09:13
Bonjour,
test fichier ouvert:
https://support.microsoft.com/en-us/help/291295/
test fichier ouvert:
https://support.microsoft.com/en-us/help/291295/
Le Pingou
Messages postés
12227
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
6 janvier 2025
1 454
28 avril 2015 à 17:52
28 avril 2015 à 17:52
Bonjour,
Merci, pas de doublon, relire encore une fois mon message qui se trouve ici.
Merci, pas de doublon, relire encore une fois mon message qui se trouve ici.
Re-Bonjour,
Désolé, mais c'est la première fois que je participe à un forum. Si je comprends bien vous allez répondre à celui-ci. Voulez-vous que je remettre mon code de macro ?
Merci d'être patient avec moi.
Désolé, mais c'est la première fois que je participe à un forum. Si je comprends bien vous allez répondre à celui-ci. Voulez-vous que je remettre mon code de macro ?
Merci d'être patient avec moi.
Bonjour,
Merci, j'ai pris la macro sur l'autre poste.
Je vais vous donner le complément pour détecter l'état du fichier et sortir de la procédure s'il est ouvert en lecture.
Patience.
Salutations.
Le Pingou
Merci, j'ai pris la macro sur l'autre poste.
Je vais vous donner le complément pour détecter l'état du fichier et sortir de la procédure s'il est ouvert en lecture.
Patience.
Salutations.
Le Pingou
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Le Pingou
Messages postés
12227
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
6 janvier 2025
1 454
Modifié par Le Pingou le 28/04/2015 à 23:51
Modifié par Le Pingou le 28/04/2015 à 23:51
Bonjour,
Je vous propose le code suivant que vous insérez après la ligne : Range("H2") = Chèque
' ******** déterter si fichier ouvert en lecture
Dim xlapp, oWk
Set xlapp = CreateObject("Excel.Application")
nomcla = "Liste des numéros ch émis année fiscale 2015.xlsm"
Rept = "U:\Cheque Émis\Original\Nicole\Macro\" ' votre répertoire
Set oWk = xlapp.Workbooks.Open(Rept & nomcla, , , , , , True, , , , True)
If oWk.ReadOnly Then
MsgBox "Le classeur est ouvert en lecture seule"
Set oWk = Nothing
Set xlapp = Nothing
Workbooks(nomcla).Close SaveChanges:=False
Exit Sub
End If
' *********
J'espère que cela marchera chez vous, chez moi petit test et c'est bon.
Salutations.
Le Pingou
Je vous propose le code suivant que vous insérez après la ligne : Range("H2") = Chèque
' ******** déterter si fichier ouvert en lecture
Dim xlapp, oWk
Set xlapp = CreateObject("Excel.Application")
nomcla = "Liste des numéros ch émis année fiscale 2015.xlsm"
Rept = "U:\Cheque Émis\Original\Nicole\Macro\" ' votre répertoire
Set oWk = xlapp.Workbooks.Open(Rept & nomcla, , , , , , True, , , , True)
If oWk.ReadOnly Then
MsgBox "Le classeur est ouvert en lecture seule"
Set oWk = Nothing
Set xlapp = Nothing
Workbooks(nomcla).Close SaveChanges:=False
Exit Sub
End If
' *********
J'espère que cela marchera chez vous, chez moi petit test et c'est bon.
Salutations.
Le Pingou
Bonsoir,
J'ai copié le code à l'emplacement désigné. Si le fichier est ouvert, j'ai le message Le classeur est ouvert en lecture seule. Jusque là ça fonctionne, par contre le fichier semble s'ouvrir en lecture seule, et je ne vois plus le fichier qui était ouvert en écriture. Ensuite je ferme manuellement le fichier et j'ai toujours le message
Liste no chèque ...est verrouillée par un autre utilisateur...Et si je tente de rouler la macro à nouveau j'ai toujours ce message. Je dois donc fermer la session de mon ordi afin que le message disparaisse et que je puisse ré-ouvrir le fichier en écriture à nouveau. Il ne faudrait pas que la macro ferme le fichier si il est en utilisation car c'est un fichier qui peut-être utilisé par plusieurs personnes. Ce que je voudrais c'est simplement qu'il avise la personne qui roule la macro que le fichier est déjà en utilisation et de réessayer plus tard.
Merci beaucoup pour le temps que vous prenez à m'aider, je vous suis très reconnaissante.
J'ai copié le code à l'emplacement désigné. Si le fichier est ouvert, j'ai le message Le classeur est ouvert en lecture seule. Jusque là ça fonctionne, par contre le fichier semble s'ouvrir en lecture seule, et je ne vois plus le fichier qui était ouvert en écriture. Ensuite je ferme manuellement le fichier et j'ai toujours le message
Liste no chèque ...est verrouillée par un autre utilisateur...Et si je tente de rouler la macro à nouveau j'ai toujours ce message. Je dois donc fermer la session de mon ordi afin que le message disparaisse et que je puisse ré-ouvrir le fichier en écriture à nouveau. Il ne faudrait pas que la macro ferme le fichier si il est en utilisation car c'est un fichier qui peut-être utilisé par plusieurs personnes. Ce que je voudrais c'est simplement qu'il avise la personne qui roule la macro que le fichier est déjà en utilisation et de réessayer plus tard.
Merci beaucoup pour le temps que vous prenez à m'aider, je vous suis très reconnaissante.
Le Pingou
Messages postés
12227
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
6 janvier 2025
1 454
29 avril 2015 à 09:04
29 avril 2015 à 09:04
Bonjour,
Merci pour les informations.
Pouvez-vous me renvoyer la macro originale ?
Merci pour les informations.
Pouvez-vous me renvoyer la macro originale ?
Le Pingou
Messages postés
12227
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
6 janvier 2025
1 454
29 avril 2015 à 10:46
29 avril 2015 à 10:46
Bonjour,
Petit complément, ou se trouve la macro (nom du classeur) .......
et que signifie : "='Louis Groleau 2015-01-21.xlsmcode'!R2C7" ......
Salutations.
Le Pingou
Petit complément, ou se trouve la macro (nom du classeur) .......
et que signifie : "='Louis Groleau 2015-01-21.xlsmcode'!R2C7" ......
Salutations.
Le Pingou
Bonjour,
ActiveCell.FormulaR1C1 = "='Louis Groleau 2015-01-21.xlsmcode'!R2C7"
Ceci est une formule qui va chercher la donnée du Fichier Louis Groleau... Ligne 2 colonne 7 )qui est est le no de période.
ActiveCell.FormulaR1C1 = "='Louis Groleau 2015-01-21.xlsmcode'!R2C7"
J'ai mis des commentaires dans la macro afin de vous guider
Voici la macro originale et j'ai ajouté le code que vous m'avez fait parvenir
Sub DonnéesCheque()
'Inscription du nom de l'usager dans le fichier Louis Groleau sur onglet chèque en C295
[chèque!C295] = Application.UserName
' Message box pour entrer le Nom, no employé la période et le type de chèque
Dim Nom As String
Dim NoEmployé As String
Dim Période As String
Dim Chèque As String
Nom = InputBox("Inscrire Prénom et Nom Employé", "Saisie du Nom")
Range("B2") = Nom
NoEmployé = InputBox("Inscrire No Employé", "Saisie du NoEmployé")
Range("F2") = NoEmployé
Période = InputBox("Inscrire No Période 2015-?? ", "Saisie du Période")
Range("G2") = Période
Chèque = InputBox("Choisir 1 avec dépôt ou 2 sans dépôt", "Saisie du Chèque")
Range("H2") = Chèque
' On ouvre le fichier Liste no ch émis afin trouver la prochaine ligne vide
' et d'inscrire le nos chèque dans le fichier louis groleau et d'inscrire nos
' données dans le fichier Liste des no ch émis ... dans les bonnes cellules ceci avec
' des formules. Puis on sauve et ferme le fichier liste des numéros ch émis
Workbooks.Open "U:\Cheque Émis\Original\Nicole\Macro\Liste des numéros ch émis année fiscale 2015.xlsm"
Ici c'est le bloc que j'ai ajouté le code que vous m'avez donné
Dim xlapp, oWk
Set xlapp = CreateObject("Excel.Application")
nomcla = "Liste des numéros ch émis année fiscale 2015.xlsm"
Rept = "U:\Cheque Émis\Original\Nicole\Macro\" ' votre répertoire
Set oWk = xlapp.Workbooks.Open(Rept & nomcla, , , , , , True, , , , True)
If oWk.ReadOnly Then
MsgBox "Le classeur est ouvert en lecture seule"
Set oWk = Nothing
Set xlapp = Nothing
Workbooks(nomcla).Close SaveChanges:=False
Exit Sub
End If
Range("h12:i12").Select
Selection.Copy
Range("A1048576").End(xlUp).Offset(1, 0).Select
ActiveCell.Offset(0, 10).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
ActiveCell.Select
ActiveCell.Offset(0, -10).Select
ActiveCell.FormulaR1C1 = "=TODAY()"
ActiveCell.Offset(0, 1).Select
ActiveCell.FormulaR1C1 = "='Louis Groleau 2015-01-21.xlsmcode'!R2C7" ' Ici formule = louis groleau... ligne 2 colonne 7
ActiveCell.Offset(0, 1).Select
ActiveCell.FormulaR1C1 = "='Louis Groleau 2015-01-21.xlsmcode'!R2C6"
ActiveCell.Offset(0, 1).Select
ActiveCell.FormulaR1C1 = "='Louis Groleau 2015-01-21.xlsmcode'!R2C2"
ActiveCell.Offset(0, 4).Select
ActiveCell.FormulaR1C1 = _
"=IF('Louis Groleau 2015-01-21.xlsmcode'!R2C8=1,RC11+1,"""")"
ActiveCell.Offset(0, 1).Select
ActiveCell.FormulaR1C1 = _
"=IF('Louis Groleau 2015-01-21.xlsmcode'!R2C8=2,RC[3]+1,"""")"
ActiveCell.Offset(0, 1).Select
ActiveCell.FormulaR1C1 = "='Louis Groleau 2015-01-21.xlsmcode'!R1C13"
ActiveCell.Offset(0, 3).Select
ActiveCell.FormulaR1C1 = "=IF(RC[-5]="""",RC[-4],RC[-5])"
Selection.Copy
Windows("#0000 Louis Groleau 2015-01-21.xlsm").Activate
Range("I2:K2").Select
Selection.PasteSpecial Paste:=xlPasteAllMergingConditionalFormats, Operation _
:=xlNone, SkipBlanks:=False, Transpose:=False
Windows("Liste des numéros ch émis année fiscale 2015.xlsm").Activate
Range("A1048576").End(xlUp).Offset(0, 0).Select
ActiveCell.Range(Cells(1, "A"), Cells(1, "M")).Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
ActiveCell.Range(Cells(1, "K"), Cells(1, "M")).Select
Selection.ClearContents
Range("A13").Select
ActiveWorkbook.Save
ActiveWorkbook.Close
' On réactive le fichie Louis Gro... sélectionne la feuille chèque
' On vérifie si le nom de fichier existe déjà dans un répertoire qui sont indiqué dans
' des cellules spécifiques soit range B300, B301 et ensuite on enregistre le nouveau fichier
' On efface le bouton de macro
' On laisse le nouveau fichier ouvert pour que l'utilisateur puisse faire des changements
Windows("#0000 Louis Groleau 2015-01-21.xlsm").Activate
Sheets("chèque").Select
If Dir(Range("B300") & "\" & Range("b301") & ".xls") <> "" Then
If MsgBox(" ATTENTION ATTENTION ATTENTION FICHIER EXISTANT, OUI = ÉCRASER NON =VÉRIFIER NO DE PROJET ET RECOMMENCER ", vbYesNo) <> vbYes Then Exit Sub
Application.DisplayAlerts = False
End If
ActiveWorkbook.SaveAs (Range("B300") & "\" & Range("b301") & ".xls")
Sheets("code").Select
ActiveSheet.DrawingObjects.Delete
Range("D4").Select
End Sub
Encore une foi Merci
Nilec
ActiveCell.FormulaR1C1 = "='Louis Groleau 2015-01-21.xlsmcode'!R2C7"
Ceci est une formule qui va chercher la donnée du Fichier Louis Groleau... Ligne 2 colonne 7 )qui est est le no de période.
ActiveCell.FormulaR1C1 = "='Louis Groleau 2015-01-21.xlsmcode'!R2C7"
J'ai mis des commentaires dans la macro afin de vous guider
Voici la macro originale et j'ai ajouté le code que vous m'avez fait parvenir
Sub DonnéesCheque()
'Inscription du nom de l'usager dans le fichier Louis Groleau sur onglet chèque en C295
[chèque!C295] = Application.UserName
' Message box pour entrer le Nom, no employé la période et le type de chèque
Dim Nom As String
Dim NoEmployé As String
Dim Période As String
Dim Chèque As String
Nom = InputBox("Inscrire Prénom et Nom Employé", "Saisie du Nom")
Range("B2") = Nom
NoEmployé = InputBox("Inscrire No Employé", "Saisie du NoEmployé")
Range("F2") = NoEmployé
Période = InputBox("Inscrire No Période 2015-?? ", "Saisie du Période")
Range("G2") = Période
Chèque = InputBox("Choisir 1 avec dépôt ou 2 sans dépôt", "Saisie du Chèque")
Range("H2") = Chèque
' On ouvre le fichier Liste no ch émis afin trouver la prochaine ligne vide
' et d'inscrire le nos chèque dans le fichier louis groleau et d'inscrire nos
' données dans le fichier Liste des no ch émis ... dans les bonnes cellules ceci avec
' des formules. Puis on sauve et ferme le fichier liste des numéros ch émis
Workbooks.Open "U:\Cheque Émis\Original\Nicole\Macro\Liste des numéros ch émis année fiscale 2015.xlsm"
Ici c'est le bloc que j'ai ajouté le code que vous m'avez donné
Dim xlapp, oWk
Set xlapp = CreateObject("Excel.Application")
nomcla = "Liste des numéros ch émis année fiscale 2015.xlsm"
Rept = "U:\Cheque Émis\Original\Nicole\Macro\" ' votre répertoire
Set oWk = xlapp.Workbooks.Open(Rept & nomcla, , , , , , True, , , , True)
If oWk.ReadOnly Then
MsgBox "Le classeur est ouvert en lecture seule"
Set oWk = Nothing
Set xlapp = Nothing
Workbooks(nomcla).Close SaveChanges:=False
Exit Sub
End If
Range("h12:i12").Select
Selection.Copy
Range("A1048576").End(xlUp).Offset(1, 0).Select
ActiveCell.Offset(0, 10).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
ActiveCell.Select
ActiveCell.Offset(0, -10).Select
ActiveCell.FormulaR1C1 = "=TODAY()"
ActiveCell.Offset(0, 1).Select
ActiveCell.FormulaR1C1 = "='Louis Groleau 2015-01-21.xlsmcode'!R2C7" ' Ici formule = louis groleau... ligne 2 colonne 7
ActiveCell.Offset(0, 1).Select
ActiveCell.FormulaR1C1 = "='Louis Groleau 2015-01-21.xlsmcode'!R2C6"
ActiveCell.Offset(0, 1).Select
ActiveCell.FormulaR1C1 = "='Louis Groleau 2015-01-21.xlsmcode'!R2C2"
ActiveCell.Offset(0, 4).Select
ActiveCell.FormulaR1C1 = _
"=IF('Louis Groleau 2015-01-21.xlsmcode'!R2C8=1,RC11+1,"""")"
ActiveCell.Offset(0, 1).Select
ActiveCell.FormulaR1C1 = _
"=IF('Louis Groleau 2015-01-21.xlsmcode'!R2C8=2,RC[3]+1,"""")"
ActiveCell.Offset(0, 1).Select
ActiveCell.FormulaR1C1 = "='Louis Groleau 2015-01-21.xlsmcode'!R1C13"
ActiveCell.Offset(0, 3).Select
ActiveCell.FormulaR1C1 = "=IF(RC[-5]="""",RC[-4],RC[-5])"
Selection.Copy
Windows("#0000 Louis Groleau 2015-01-21.xlsm").Activate
Range("I2:K2").Select
Selection.PasteSpecial Paste:=xlPasteAllMergingConditionalFormats, Operation _
:=xlNone, SkipBlanks:=False, Transpose:=False
Windows("Liste des numéros ch émis année fiscale 2015.xlsm").Activate
Range("A1048576").End(xlUp).Offset(0, 0).Select
ActiveCell.Range(Cells(1, "A"), Cells(1, "M")).Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
ActiveCell.Range(Cells(1, "K"), Cells(1, "M")).Select
Selection.ClearContents
Range("A13").Select
ActiveWorkbook.Save
ActiveWorkbook.Close
' On réactive le fichie Louis Gro... sélectionne la feuille chèque
' On vérifie si le nom de fichier existe déjà dans un répertoire qui sont indiqué dans
' des cellules spécifiques soit range B300, B301 et ensuite on enregistre le nouveau fichier
' On efface le bouton de macro
' On laisse le nouveau fichier ouvert pour que l'utilisateur puisse faire des changements
Windows("#0000 Louis Groleau 2015-01-21.xlsm").Activate
Sheets("chèque").Select
If Dir(Range("B300") & "\" & Range("b301") & ".xls") <> "" Then
If MsgBox(" ATTENTION ATTENTION ATTENTION FICHIER EXISTANT, OUI = ÉCRASER NON =VÉRIFIER NO DE PROJET ET RECOMMENCER ", vbYesNo) <> vbYes Then Exit Sub
Application.DisplayAlerts = False
End If
ActiveWorkbook.SaveAs (Range("B300") & "\" & Range("b301") & ".xls")
Sheets("code").Select
ActiveSheet.DrawingObjects.Delete
Range("D4").Select
End Sub
Encore une foi Merci
Nilec
Le Pingou
Messages postés
12227
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
6 janvier 2025
1 454
Modifié par Le Pingou le 29/04/2015 à 16:45
Modifié par Le Pingou le 29/04/2015 à 16:45
Bonjour,
Merci pour le code.
Manque : dans quel classeur se trouve la macro (nom du classeur) ....... ??????
Donc le 'Louis Groleau 2015-01-21.xlsmcode'!R2C7" veut dire qu'il s'agit de la valeur de la cellule [$G$2] de la feuille ['Louis Groleau 2015-01-21.xlsmcode] du classeur ...[xxxxxxxxxxxxx.xlsm]
Et c'est le .xlsmcode qui m'a induit en erreur et fait hésiter car en général après le point (.) nous avons l'extension du classeur [xls, xlsx ou xlsm) et bien sur pas de (xlsmcode)
Note: le code transmis n'est pas introduit à la bonne place, il devait être juste après la ligne Range("H2") = Chèque
Salutations.
Le Pingou
Merci pour le code.
Manque : dans quel classeur se trouve la macro (nom du classeur) ....... ??????
Donc le 'Louis Groleau 2015-01-21.xlsmcode'!R2C7" veut dire qu'il s'agit de la valeur de la cellule [$G$2] de la feuille ['Louis Groleau 2015-01-21.xlsmcode] du classeur ...[xxxxxxxxxxxxx.xlsm]
Et c'est le .xlsmcode qui m'a induit en erreur et fait hésiter car en général après le point (.) nous avons l'extension du classeur [xls, xlsx ou xlsm) et bien sur pas de (xlsmcode)
Note: le code transmis n'est pas introduit à la bonne place, il devait être juste après la ligne Range("H2") = Chèque
Salutations.
Le Pingou
Bonjour,
La macro est dans le fichier Louis Groleau ... et oui désolé j'ai mis le code à la bonne place juste après la ligne Range("H2") = Chèque. C'est probablement en faisant le ménage de la macro et en inscrivant les commentaires que je n'ai pas remis à la bonne place. Mais dans la macro le code est à l'endroit ou vous m'avez dit de le mettre.
Merci
La macro est dans le fichier Louis Groleau ... et oui désolé j'ai mis le code à la bonne place juste après la ligne Range("H2") = Chèque. C'est probablement en faisant le ménage de la macro et en inscrivant les commentaires que je n'ai pas remis à la bonne place. Mais dans la macro le code est à l'endroit ou vous m'avez dit de le mettre.
Merci
Le Pingou
Messages postés
12227
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
6 janvier 2025
1 454
29 avril 2015 à 18:04
29 avril 2015 à 18:04
Bonjour,
Donc pour être juste le fichier c'est le classeur [Lou....xlsm] et ceci ['Louis Groleau 2015-01-21.xlsmcode'] est le nom d'une feuille Oui / Non
Désolé, mais la macro n'est pas à la bonne place elle se trouve après : Workbooks.Open "U:\Cheque Émis\Original\Nicole\Macro\Liste des numéros ch émis année fiscale 2015.xlsm"
Au passage j'essaie de comprendre votre code, mais c'est la galère... par exemple d'où sort ce nom
"#0000 Louis Groleau 2015-01-21.xlsm" dans la ligne Windows("#0000 Louis Groleau 2015-01-21.xlsm").Activate
Donc pour être juste le fichier c'est le classeur [Lou....xlsm] et ceci ['Louis Groleau 2015-01-21.xlsmcode'] est le nom d'une feuille Oui / Non
Désolé, mais la macro n'est pas à la bonne place elle se trouve après : Workbooks.Open "U:\Cheque Émis\Original\Nicole\Macro\Liste des numéros ch émis année fiscale 2015.xlsm"
Au passage j'essaie de comprendre votre code, mais c'est la galère... par exemple d'où sort ce nom
"#0000 Louis Groleau 2015-01-21.xlsm" dans la ligne Windows("#0000 Louis Groleau 2015-01-21.xlsm").Activate
1. Le fichier principal c'est Louis Groleau 2015-01-21.xlsm. La macro est dans ce fichier. Ce fichier contient onglet code et chèque.
2. Dans la macro j'ai mis à la bonne place ce que vous m'avez envoyé
juste après la ligne Range("H2") = ChèqueSub DonnéesCheque()
Voir le bout de macro
'Inscription du nom de l'usager dans le fichier Louis Groleau sur onglet chèque en C295
[chèque!C295] = Application.UserName
' Message box pour entrer le Nom, no employé la période et le type de chèque
Dim Nom As String
Dim NoEmployé As String
Dim Période As String
Dim Chèque As String
Nom = InputBox("Inscrire Prénom et Nom Employé", "Saisie du Nom")
Range("B2") = Nom
NoEmployé = InputBox("Inscrire No Employé", "Saisie du NoEmployé")
Range("F2") = NoEmployé
Période = InputBox("Inscrire No Période 2015-?? ", "Saisie du Période")
Range("G2") = Période
Chèque = InputBox("Choisir 1 avec dépôt ou 2 sans dépôt", "Saisie du Chèque")
Range("H2") = Chèque
'Pour vérifier que personne n'est dans le fichier Liste ch émis
Dim xlapp, oWk
Set xlapp = CreateObject("Excel.Application")
nomcla = "Liste des numéros ch émis année fiscale 2015.xlsm"
Rept = "U:\Cheque Émis\Original\Nicole\Macro\" ' votre répertoire
Set oWk = xlapp.Workbooks.Open(Rept & nomcla, , , , , , True, , , , True)
If oWk.ReadOnly Then
MsgBox "Le classeur est ouvert en lecture seule"
Set oWk = Nothing
Set xlapp = Nothing
Workbooks(nomcla).Close SaveChanges:=False
Exit Sub
End If
' On ouvre le fichier Liste no ch émis afin trouver la prochaine ligne vide
' et d'inscrire le nos chèque dans le fichier louis groleau et d'inscrire nos
' données dans le fichier Liste des no ch émis ... dans les bonnes cellules ceci avec
' des formules. Puis on sauve et ferme le fichier liste des numéros ch émis
Workbooks.Open "U:\Cheque Émis\Original\Nicole\Macro\Liste des numéros ch émis année fiscale 2015.xlsm"
Je vous explique ce que fait la macro :
La macro est dans le fichier #0000 Louis Groleau ...
Nous sommes dans l'onglet code
Il y a un bouton pour rouler la macro dans cette onglet
En cliquant sur le bouton macro, un Input Box apparaît
Pour remplir les champs dans le fichier #0000 Louis Groleau onglet code range B2 pour le nom
F2 pour no employé G2 no de période
Lorsque ses cases sont complété, la macro ouvre le fichier
U:\Cheque Émis\Original\Nicole\Macro\Liste des numéros ch émis année fiscale 2015.xlsm
Et s'est ce fichier qui ne doit pas être ouvert par un autre utilisateur lorsque je roule la macro
sinon nous avons le message qui indique que le fichier est en utilisation
C'est ici que j'aimerais ajouter un code dans la macro qui m'aviserais que le fichier est en utilisation de réessayer plus tard et de mettre fin à la macro
afin de ne pas entrer dans le débug,
Après l'ouverture du fichier Liste des numéros ... , dans la macro il y a des formules pour amener les données qui ont été inscrite
dans les cases du fichier #0000 Louis Groleau ... à la prochaine ligne disponible dans le fichier de Liste de numéro chèque...
Lorsque toutes les données ont été transcrite dans le fichier Liste de numéro chèque ..., on ferme et enregistre le fichier
Liste de numéro chèque ...
Windows("#0000 Louis Groleau 2015-01-21.xlsm").Activate
Ici on n'est dans le fichier #0000 Louis Groleau ... on s'électionne la feuille Chèque
Dans la feuille chèque au range B300 se retrouve le Chemin :
Et en B301 s'est une formule qui donne le no employé, le nom et le no de période
Donc la macro se trouve à sauvegarder le fichier #000 Louis Groleau... sous les données en B301
Il y a aussi une condition que si le fichier nommé en B301 existe déjà d'aviser et que on répond Non pour écraser
alors sortie de la macro ( pour ne pas entrer dans le débug )
Ensuite je sélectionne la feuille code je supprime le bouton de la macro et je selectionne la cellule D4
J'espère qu'avec ses explications, vous pourrez plus comprendre le travail de la macro.
Merci beaucoup
2. Dans la macro j'ai mis à la bonne place ce que vous m'avez envoyé
juste après la ligne Range("H2") = ChèqueSub DonnéesCheque()
Voir le bout de macro
'Inscription du nom de l'usager dans le fichier Louis Groleau sur onglet chèque en C295
[chèque!C295] = Application.UserName
' Message box pour entrer le Nom, no employé la période et le type de chèque
Dim Nom As String
Dim NoEmployé As String
Dim Période As String
Dim Chèque As String
Nom = InputBox("Inscrire Prénom et Nom Employé", "Saisie du Nom")
Range("B2") = Nom
NoEmployé = InputBox("Inscrire No Employé", "Saisie du NoEmployé")
Range("F2") = NoEmployé
Période = InputBox("Inscrire No Période 2015-?? ", "Saisie du Période")
Range("G2") = Période
Chèque = InputBox("Choisir 1 avec dépôt ou 2 sans dépôt", "Saisie du Chèque")
Range("H2") = Chèque
'Pour vérifier que personne n'est dans le fichier Liste ch émis
Dim xlapp, oWk
Set xlapp = CreateObject("Excel.Application")
nomcla = "Liste des numéros ch émis année fiscale 2015.xlsm"
Rept = "U:\Cheque Émis\Original\Nicole\Macro\" ' votre répertoire
Set oWk = xlapp.Workbooks.Open(Rept & nomcla, , , , , , True, , , , True)
If oWk.ReadOnly Then
MsgBox "Le classeur est ouvert en lecture seule"
Set oWk = Nothing
Set xlapp = Nothing
Workbooks(nomcla).Close SaveChanges:=False
Exit Sub
End If
' On ouvre le fichier Liste no ch émis afin trouver la prochaine ligne vide
' et d'inscrire le nos chèque dans le fichier louis groleau et d'inscrire nos
' données dans le fichier Liste des no ch émis ... dans les bonnes cellules ceci avec
' des formules. Puis on sauve et ferme le fichier liste des numéros ch émis
Workbooks.Open "U:\Cheque Émis\Original\Nicole\Macro\Liste des numéros ch émis année fiscale 2015.xlsm"
Je vous explique ce que fait la macro :
La macro est dans le fichier #0000 Louis Groleau ...
Nous sommes dans l'onglet code
Il y a un bouton pour rouler la macro dans cette onglet
En cliquant sur le bouton macro, un Input Box apparaît
Pour remplir les champs dans le fichier #0000 Louis Groleau onglet code range B2 pour le nom
F2 pour no employé G2 no de période
Lorsque ses cases sont complété, la macro ouvre le fichier
U:\Cheque Émis\Original\Nicole\Macro\Liste des numéros ch émis année fiscale 2015.xlsm
Et s'est ce fichier qui ne doit pas être ouvert par un autre utilisateur lorsque je roule la macro
sinon nous avons le message qui indique que le fichier est en utilisation
C'est ici que j'aimerais ajouter un code dans la macro qui m'aviserais que le fichier est en utilisation de réessayer plus tard et de mettre fin à la macro
afin de ne pas entrer dans le débug,
Après l'ouverture du fichier Liste des numéros ... , dans la macro il y a des formules pour amener les données qui ont été inscrite
dans les cases du fichier #0000 Louis Groleau ... à la prochaine ligne disponible dans le fichier de Liste de numéro chèque...
Lorsque toutes les données ont été transcrite dans le fichier Liste de numéro chèque ..., on ferme et enregistre le fichier
Liste de numéro chèque ...
Windows("#0000 Louis Groleau 2015-01-21.xlsm").Activate
Ici on n'est dans le fichier #0000 Louis Groleau ... on s'électionne la feuille Chèque
Dans la feuille chèque au range B300 se retrouve le Chemin :
Et en B301 s'est une formule qui donne le no employé, le nom et le no de période
Donc la macro se trouve à sauvegarder le fichier #000 Louis Groleau... sous les données en B301
Il y a aussi une condition que si le fichier nommé en B301 existe déjà d'aviser et que on répond Non pour écraser
alors sortie de la macro ( pour ne pas entrer dans le débug )
Ensuite je sélectionne la feuille code je supprime le bouton de la macro et je selectionne la cellule D4
J'espère qu'avec ses explications, vous pourrez plus comprendre le travail de la macro.
Merci beaucoup
Le Pingou
Messages postés
12227
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
6 janvier 2025
1 454
Modifié par Le Pingou le 29/04/2015 à 22:16
Modifié par Le Pingou le 29/04/2015 à 22:16
Bonjour,
Merci c'est plus clair comme cela.
Pour une bonne compréhension :
On parle de classeur et de feuille qui sont les termes utiliser pour Excel et non pas de fichier et d'onglet.
Pour la suite : le code que j'ai proposé ne convient pas car vous travailles certainement avec un classeur non partagé. Il faut utiliser une autre procédure, patience.
.
Salutations.
Le Pingou
Merci c'est plus clair comme cela.
Pour une bonne compréhension :
On parle de classeur et de feuille qui sont les termes utiliser pour Excel et non pas de fichier et d'onglet.
Pour la suite : le code que j'ai proposé ne convient pas car vous travailles certainement avec un classeur non partagé. Il faut utiliser une autre procédure, patience.
.
Salutations.
Le Pingou
Le Pingou
Messages postés
12227
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
6 janvier 2025
1 454
29 avril 2015 à 23:27
29 avril 2015 à 23:27
Bonjour,
Voici ma nouvelle proposition : la procédure qui suit à copier et coller dans le module qui contient déjà votre code.
Pour terminer vous supprimer cette ligne :
Voici ma nouvelle proposition : la procédure qui suit à copier et coller dans le module qui contient déjà votre code.
Function Cla_Ouvert(ByRef clateste As String) As Boolean Dim Fichier As Long On Error GoTo Erreur Fichier = FreeFile Open clateste For Input Lock Read As #Fichier Close #Fichier Cla_Ouvert = False Exit Function Erreur: Cla_Ouvert = True End FunctionEnsuite dans votre macro vous remplacer l'ancienne proposition par celle-ci :
nomcla = "Liste des numéros ch émis année fiscale 2015.xlsm" repert = "C:\Users\PJP\Desktop\" ' mettre votre répertoire If Cla_Ouvert(repert & nomcla) Then MsgBox "En court d'utilisation" Exit Sub Else MsgBox "classeur est disponible" Workbooks.Open repert & nomcla End If
Pour terminer vous supprimer cette ligne :
Workbooks.Open "U:\Cheque Émis\Original\Nicole\Macro\Liste des numéros ch émis année fiscale 2015.xlsm"
Bonsoir et Merci pour les codes. Par contre je ne sais pas ou placer la procédure Function. J'ai essayé a plusieurs place dans ma macro, mais ne trouve pas. Je n'ai jamais utilisé auparavant. Si vous voulez me guider, j'apprécierais. Je n'ai pas de formation j'ai appris en regardant sur le web et je regarde dans les livres pour trouver mes infos et comprendre. Je crois que j'ai fais des grands pas, mais j'ai encore beaucoup à apprendre.
Merci beaucoup pour votre aide
Merci beaucoup pour votre aide
Le Pingou
Messages postés
12227
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
6 janvier 2025
1 454
30 avril 2015 à 22:26
30 avril 2015 à 22:26
Bonjour,
Content pour vous.
Cependant ma remarque se basait sur le code que vous avez mis à disposition qui visiblement n'est pas identique à celui que vous utilisez. Le code est boiteux mais il fonctionne donc c'est le principal.
Content pour vous.
Cependant ma remarque se basait sur le code que vous avez mis à disposition qui visiblement n'est pas identique à celui que vous utilisez. Le code est boiteux mais il fonctionne donc c'est le principal.
30 avril 2015 à 14:20
Je ne sais pas comment vous remercier. Il y a des mois que je cherchais sur le Web mais sans succès. Tous fonctionne à merveille. Un très grand MERCI pour l'aide que vous m'avez apporter.
Concernant votre remarque, les résultats que je voulais dans ce classeur sont exactement ce que je souhaitais. J'avais déjà exécuté la macro auparavant.
Encore une fois merci,