Vous utilisez un navigateur obsolète. Il se peut que ce site ou d'autres sites Web ne s'affichent pas correctement. Vous devez le mettre à jour ou utiliser un navigateur alternatif.
Boostez vos compétences Excel avec notre communauté !
Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force.
Apprenez, échangez, progressez – et tout ça gratuitement !
👉 Inscrivez-vous maintenant !
je voudrais a partir d'une cellule B1, que lorsque je modifie la valeur de cette cellule les èvenement suivant se passe :
-Effacer la cellule B2, les colonnes (h9:h48),(I9:I48),(j9:j48),(k9;k49),(u9:u48), je voudrais un message avant me demandent de confirmer mon choix.
-Enregistrer le classeur sous un nom spécifique et a un endroi déterminé avec la valeur de la cellule B1(B1 est une date) (ex: véhicule octobre 2008)dans le dossier voiture). Là aussi je voudrais un message me demandant l'enregistrement de ce nouveau dossier
If Not Intersect(Target, Cells(1, 2)) Is Nothing Then :
Le code est correct, c'est plutôt son intégration dans la macro qui pose problème.
Dans ta première demande, cette ligne était intégrée à une procédure évènementielle dans laquelle Target est déclarée en tant que plage correspondant à la plage sélectionnée.
Effectivement, quand j'ai copié ce code dans la macro liée à ton bouton, Target n'est pas déclaré comme objet, et bloque forcément.
Correction :
Code:
Private Sub CommandButton1_Click()
Dim r As Byte
Dim NomFichier$
If Not Intersect([color=red]ActiveCell[/color], Cells(1, 2)) Is Nothing Then
r = MsgBox("Voulez vous lancer l'effacement ?", vbYesNo, "Effacement ?")
If r = 6 Then
Union(Cells(2, 2), Range(Cells(9, 8), Cells(48, 11)), Range(Cells(9, 21), Cells(48, 21)), Cells(49, 11)).ClearContents
If IsDate(Cells(1, 2)) Then
NomFichier = "C:\MesDocuments\FichierAuto\" & Format(CDate(Cells(1, 2)), "mmmm") & " - " & CStr(Year(Cells(1, 2))) & ".xls"
Else: Exit Sub
End If
r = MsgBox("Voulez vous enregister le classeur sous le nom : " & NomFichier, vbYesNo, "Effacement ?")
If r = 6 Then ActiveWorkbook.SaveAs (NomFichier)
End If
End If
End Sub
Le reste de ta demande : "De plus, pourrait tu modifier le code, si c'est possible, il serais bien que le bouton
Lorsqu'on appuis, permette la saisie en B1
Quand on rappuis, bloc la saisie en b1 et lance la macro"
->
Pas de problème particulier pour aller directement en saisie dans la cellule B1. Toutefois, précises ta pensée quand tu dis "bloque la saisie".
"Pourrait tu aussi donnée 2 noms au bouton quand écriture autorisé un "A", quand interdite un "I""
Là, j'avoue que je ne comprend pas ce que tu veux.
- quels noms ?
- quand l'écriture est-elle autorisée ?
- quand est-elle interdite ?
A première vue, je prévois l'utilisation d'un bouton Toggle, mais avant de me lancer, j'aimerais plus de précisions :
Chacune de tes demandes apporte un élément qui m'est inconnu. Ce n'est pas pratique pour avoir une vue d'ensemble de ton projet. J'ai l'impression de fonctionner en aveugle et de me cogner régulièrement aux murs.
N'hésite à retranscrire ton projet sous forme littérale.
Exemple :
1. j'ouvre le classeur
2. je sélectionne la feuille "A"
3. je sélectionne la cellule B1
4. je vérifie la valeur inscrite en B1
...4.1 si c'est une date, alors on lance la macro 1
...4.2 si ce n'est pas une date :
.......... 4.2.1 efface la cellule B1
...........4.2.2 affiche un message "Erreur de saisie, voulez vous recommencer ?"
....................4.2.2.1 Oui = retour au point 3
....................4.2.2.2 Non = sort de la macro
Etc....
Avec une telle trame, c'est très facile de programmer.
L'idée principale étant que, dès maintenant, tu dois savoir précisément ce que tout ce que tu veux.
Pas d'improvisation au fil de la saisie.
Conseil : représentes toi la macro avec un logigramme.
Je te laisse y réfléchir, je repasserai en soirée pour continuer.
A +
Kotov
merci de ta patience.
je vais essayé d'etre limpide
Le classeur est ouvert, la feuille se prénom commande
Un bouton pernet l'écriture dans la cellule B1 et a l'ouverture du classeur un "I" pour interdit est inscrit sur le bouton (donc on ne peut pas écrire dans la cellule B1).
1. On click sur le bouton
..1.1 Un "A" pour autorisé remplaçe le I de départ
..1.2 Au peut modifier la valeur de la cellule B1 (la valeur de la cellule B1 est mmmm aaaa (ex :Octobre 2008)
..1.3 Le mois de la cellule B1 s'ecrit avec la 1ère lettre en majuscule (ex : Octobre...)
..1.4 Il faudrait qu'on soit obligé de réutiliser le bouton
2. On rappuis sur le bouton
..2.1 Un message dit vous voulez effacer les données
....2.2.1. Si oui,
.......2.2.2.1 Les données de la cellule B2, des colonnes H, I, J, K,L,M,N,O,P,Q,R,S,T, U, des lignes 9 à 48 s'effacent.
.......2.2.2.2 Un message demande si on veut enregistrer le classeur sur le nom "facture + B1" (Ex: Facture Octobre 2008)
.........2.2.2.2.1 Si oui, le dossier doit s 'enregistrer dans le dossier suivant C:\users\pj\facture\
.........2.2.2.2.2 Si non, rien la boite de dialogue se ferme
....2.2.2. Si non, rien la boite de dialogue se ferme et la boite de dialogue de l'enregistrement ne s'ouvre pas.
Pour finir sache que la feuille commande est protégé sans mots de passe.
Voila, j'espère avoir été assé claire, dans le cas contraire, je me tiens à ta disposition
Re CJ,
Merci d'avoir fait cet effort de clarté.
C'est une perte de temps au départ, mais le projet avance bien plus vite si le commanditaire et le développeur sont sur "la même longueur d'onde"
Voici un fichier qui doit correspondre à tes besoins :
Début de processus :
1. En arrivant sur la feuille protégée "commande", la saisie est autorisée via un bouton à bascule (Toogle). Le bouton est vert, avec la lettre "A"
2. Cliques sur le bouton. Il reste en position enfoncée, passe en couleur rouge avec la mention "I"
3. Apparition d'un formulaire de saisie de date.
4. L'utilisateur sélectionne un mois et une année (aucun risque d'erreur d'orthographe, de majuscule oubliée : la saisie est formatée)
...4.1 : si l'utilisateur oublie de saisir le mois et/ou l'année : message d'erreur et nouvelle possibilité offerte à l'utilisateur
...4.2 : si la saisie est correcte :
.........4.2.1 : la feuille "commande" est déprotégée, la cellule B1 prend la valeur Mois Année, la feuille est de nouveau protégée.
.........4.2.2 : le formulaire de saisie disparait
.........4.2.3 : message pour l'effacement des cellules pré déterminées
..................4.2.3.1 : si Oui -> déprotection de la feuille, effacement, reprotection
..................4.2.3.2 : si Non -> aucune action
.........4.2.4 : message pour l'enregistrement de ton fichier (chemin + valeur cellule B1)
..................4.2.3.1 : si Oui -> enregistrement
..................4.2.3.2 : si Non -> aucune action
.........4.2.5 : le bouton bascule repasse en vert avec la lettre A
Fin de processus
A noter : dans le fichier joint, le chemin d'enregistrement est "C:\" de manière à ne pas bloquer les autres forumeurs qui souhaitent tester le fichier.
Tu devras simplement remplacer le chemin "C:\" par "C:\users\pj\facture\" (l'endroit est indiqué dans la macro)
Pour info, ce fichier fonctionne avec des macros dans le module de la feuille "commande", dans le Module1, mais également dans le formulaire UsfMois (en double-cliquant sur le bouton "OK").
le fichier marche superbement bien.
Je te remercie profondement du temps que tu y as consacré.
j'ai juste une petite demande, si c'est possible, pour la cerise sur le gateau. Serait il possible qu'au niveau des années, l'incrémentation se façe automatiquement.
Par exemple,
pour 2008 on aurait dans la listebox l'année 2008 et 2009
Pour 2009, 2009 et 2010
Si ce n'est pas possible ce n'est pas grave du tout, le travail que tu as réalisé à répondu à 100% a mes souhaits
Encore merci
Il te suffit de remplacer la macro UserForm_Initialize() de l'UsfSaisie par celle-ci :
(Accès au module : double-clic sur UsfSaisie, puis double-clic sur le formulaire)
Code:
Sub UserForm_Initialize()
With cbxMois
.AddItem "Janvier"
.AddItem "Février"
.AddItem "Mars"
.AddItem "Avril"
.AddItem "Mai"
.AddItem "Juin"
.AddItem "Juillet"
.AddItem "Août"
.AddItem "Septembre"
.AddItem "Octobre"
.AddItem "Novembre"
.AddItem "Décembre"
End With
With cbxAnnée
[color=blue].AddItem CStr(Year(Date))
.AddItem CStr(Year(Date + 365))[/color]
End With
End Sub
Traduction :
With cbxAnnée -> Dans la combobox (menu déroulant) Année
.AddItem CStr(Year(Date)) -> ajoute un item correspondant à l'année en cours
.AddItem CStr(Year(Date + 365)) ->ajoute un item correspondant à l'année prochaine (date + 365 jours) Tu peux obtenir l'année dernière avec Year(Date - 365).
->Avantage : la mise à jour sera automatique. Au 1er janvier prochain, 2008-2009 seront remplacés par 2009-2010
End With -> fin de travail sur la combobox
Sub UserForm_Initialize()
With cbxMois
For i= 1 to 12
.AddItem StrConv(Format(30*i,"mmmm"), vbProperCase)
Next
End With
With cbxAnnée
.AddItem CStr(Year(Date))
.AddItem CStr(Year(Date + 365))
End With
End Sub
- Navigue sans publicité - Accède à Cléa, notre assistante IA experte Excel... et pas que... - Profite de fonctionnalités exclusives Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel. Je deviens Supporter XLD