A voir également:
- Débutant en VBA je ne peux finir ma macro
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Macro word - Guide
- Macro logiciel - Télécharger - Organisation
- Macro recorder - Télécharger - Confidentialité
- Vba attendre 1 seconde ✓ - Forum VB / VBA
4 réponses
purrofixe
Messages postés
490
Date d'inscription
dimanche 14 mars 2004
Statut
Membre
Dernière intervention
12 septembre 2007
94
19 janv. 2005 à 17:03
19 janv. 2005 à 17:03
Bonjour jeanpierreco,
J'ai testé votre macro et il semble qu'il manque une instruction (en gras).
'si les cellules plage "E6:E15" sont des dates
Cells(cell.Row, cell.Column).Select
ActiveCell.Offset(0, -1).Select (ou Activate, à voir)
Bonne journée.
Salutations
Jean-Pierre
J'ai testé votre macro et il semble qu'il manque une instruction (en gras).
'si les cellules plage "E6:E15" sont des dates
Cells(cell.Row, cell.Column).Select
ActiveCell.Offset(0, -1).Select (ou Activate, à voir)
Bonne journée.
Salutations
Jean-Pierre
Bonsoir Jeanpierreco,
Dans ta deuxième boucle, tu travailles sur "cell", et non pas sur ActiveCell. Remplace "ActiveCell" par "cell" tout court. Ça suffit pour corriger ton problème.
Puisque tu te mets à VBA, ta première boucle est un bon exercice.
Sinon, tu peux te passer de VBA pour colorer tes cellules.
Je suppose que ta cellule "E3" (ou L3C5) contient : =AUJOURDHUI().
En Excel pur (sans VBA) tu peux utiliser la mise en forme conditionnelle.
On y accède en faisant : Format / Mise en forme conditionnelle.
Sélectionne ta plage de cellules, puis vas-y.
- Dans la lucarne de gauche, tu dis que si la valeur de ta cellule "est supérieure à "
- Dans la lucarne de droite, tu dis : =L3C5 (en notation L1C1 par exemple).
Ensuite, le bouton Format te permet de choisir une mise en forme (police, motif, couleur). Tu peux mettre jusqu'à 3 conditions.
Essaie ça, c'est pratique.
Armojax.
Dans ta deuxième boucle, tu travailles sur "cell", et non pas sur ActiveCell. Remplace "ActiveCell" par "cell" tout court. Ça suffit pour corriger ton problème.
Puisque tu te mets à VBA, ta première boucle est un bon exercice.
Sinon, tu peux te passer de VBA pour colorer tes cellules.
Je suppose que ta cellule "E3" (ou L3C5) contient : =AUJOURDHUI().
En Excel pur (sans VBA) tu peux utiliser la mise en forme conditionnelle.
On y accède en faisant : Format / Mise en forme conditionnelle.
Sélectionne ta plage de cellules, puis vas-y.
- Dans la lucarne de gauche, tu dis que si la valeur de ta cellule "est supérieure à "
- Dans la lucarne de droite, tu dis : =L3C5 (en notation L1C1 par exemple).
Ensuite, le bouton Format te permet de choisir une mise en forme (police, motif, couleur). Tu peux mettre jusqu'à 3 conditions.
Essaie ça, c'est pratique.
Armojax.
Bonjour,
Merci Armojax de tes conseils, J'ai pratiquement fini toutes mes macros sur le classeur.
J'ai un dernier détail que je n'arrive pas à résoudre. Dans la portion de code ci-dessous comment mettre un gestionnaire d'erreur pour indiquer à l'utilisateur de rentrer une date au format valide au cas où la saisie dans la cellule serait autre qu'une date.
Je fais le pas à pas détaillé en mettant un gestionnaire d'erreur mais la cellule en erreur est ignorée et la MSGBOX n'apparait pas.
plage1 = Worksheets("feuil1").Range("E6:E15")
For Each cell In plage1
If IsDate(cell) = True Then
cell.Activate
'si les cellules plage "E6:E15" sont des dates
ActiveCell.Offset(0, -1).Activate
'selectionner la cellule tout de suite à gauche et la supprimer
Selection.ClearContents
End If
Next cell
End Sub
Merci Armojax de tes conseils, J'ai pratiquement fini toutes mes macros sur le classeur.
J'ai un dernier détail que je n'arrive pas à résoudre. Dans la portion de code ci-dessous comment mettre un gestionnaire d'erreur pour indiquer à l'utilisateur de rentrer une date au format valide au cas où la saisie dans la cellule serait autre qu'une date.
Je fais le pas à pas détaillé en mettant un gestionnaire d'erreur mais la cellule en erreur est ignorée et la MSGBOX n'apparait pas.
plage1 = Worksheets("feuil1").Range("E6:E15")
For Each cell In plage1
If IsDate(cell) = True Then
cell.Activate
'si les cellules plage "E6:E15" sont des dates
ActiveCell.Offset(0, -1).Activate
'selectionner la cellule tout de suite à gauche et la supprimer
Selection.ClearContents
End If
Next cell
End Sub
purrofixe
Messages postés
490
Date d'inscription
dimanche 14 mars 2004
Statut
Membre
Dernière intervention
12 septembre 2007
94
>
jeanpierreco
20 janv. 2005 à 17:03
20 janv. 2005 à 17:03
Bonjour jeanpierreco,
Je me suis mal expliqué dans mon premier courriel, toutes mes excuses.
Je suis content de constaté que tout fonctionne avec la méthode Activate, et ceci malgré mon erreur.
Bravo.
Salutations
Jean-Pierre
Je me suis mal expliqué dans mon premier courriel, toutes mes excuses.
Je suis content de constaté que tout fonctionne avec la méthode Activate, et ceci malgré mon erreur.
Bravo.
Salutations
Jean-Pierre
Bonsoir jeanpierreco,
Je te propose le code ci-dessous :
- La fonction "IsDate" renvoie une valeur VRAI ou FAUX. Donc tu peux écrire "If IsDate() ... then" sans tester la valeur : =True.
- Ensuite, il est la plupart du temps possible de travailler sur un objet sans l'activer au préalable. On peut parfaitement aller chercher des données d'une plage d'un classeur non actif, sans rien activer ni sélecter auparavant.
- Quand on fait "Enregistrer une macro", pour qu'Excel mémorise les actions qu'on fait à la main, on passe son temps à sélectionner quelque chose, puis on fait une action. Au moment de la sélection, Excel ne sait pas ce qu'on va faire (mettre en gras ? couper ? colorer ?). Il note donc qu'on a sélectionné l'objet. Puis, dans la commande suivante, il fait : Selection.Action.
En général, on peut remplacer :
par
C'est un peu comme si on disait : "Je sélectionne Gilbert", puis "Bonjour la sélection". Non, on dit "Bonjour Gilbert".
D'où la simplification du code : on vire les activate, selection, select. Ça marche tout aussi bien.
- Pour ta gestion d'erreur, je propose du simpliste. Dans le cas où la cellule ne contient pas une date (cas Else), j'affiche un petit message contenant la valeur de la cellule, et je la sélectionne pour rendre visible l'endroit. On peut aussi la mettre en rouge, etc. Et je sors de la boucle.
Bien sûr, on a d'autres solutions. ..
Bonne soirée.
Armojax.
Je te propose le code ci-dessous :
Sub Macro() Dim plage1 As Range Set plage1 = Worksheets("feuil1").Range("E6:E15") For Each cell In plage1 If IsDate(cell) Then cell.Offset(0, -1).ClearContents Else cell.select MsgBox cell.Value & " : format de date non valide" Exit Sub End If Next cell End Sub
- La fonction "IsDate" renvoie une valeur VRAI ou FAUX. Donc tu peux écrire "If IsDate() ... then" sans tester la valeur : =True.
- Ensuite, il est la plupart du temps possible de travailler sur un objet sans l'activer au préalable. On peut parfaitement aller chercher des données d'une plage d'un classeur non actif, sans rien activer ni sélecter auparavant.
- Quand on fait "Enregistrer une macro", pour qu'Excel mémorise les actions qu'on fait à la main, on passe son temps à sélectionner quelque chose, puis on fait une action. Au moment de la sélection, Excel ne sait pas ce qu'on va faire (mettre en gras ? couper ? colorer ?). Il note donc qu'on a sélectionné l'objet. Puis, dans la commande suivante, il fait : Selection.Action.
En général, on peut remplacer :
Select toto Selection.Action
par
toto.Action
C'est un peu comme si on disait : "Je sélectionne Gilbert", puis "Bonjour la sélection". Non, on dit "Bonjour Gilbert".
D'où la simplification du code : on vire les activate, selection, select. Ça marche tout aussi bien.
- Pour ta gestion d'erreur, je propose du simpliste. Dans le cas où la cellule ne contient pas une date (cas Else), j'affiche un petit message contenant la valeur de la cellule, et je la sélectionne pour rendre visible l'endroit. On peut aussi la mettre en rouge, etc. Et je sors de la boucle.
Bien sûr, on a d'autres solutions. ..
Bonne soirée.
Armojax.
purrofixe
Messages postés
490
Date d'inscription
dimanche 14 mars 2004
Statut
Membre
Dernière intervention
12 septembre 2007
94
19 janv. 2005 à 16:07
19 janv. 2005 à 16:07
Bonjour jeanpierreco,
Pour sélectionner une cellule, utiliser la méthode Activate (Select pour une plage)
D'où : ActiveCell.Offset(0, -1).Activate
Bonne journée
Salutations
Jean-Pierre
Pour sélectionner une cellule, utiliser la méthode Activate (Select pour une plage)
D'où : ActiveCell.Offset(0, -1).Activate
Bonne journée
Salutations
Jean-Pierre
purrofixe
Messages postés
490
Date d'inscription
dimanche 14 mars 2004
Statut
Membre
Dernière intervention
12 septembre 2007
94
>
Armojax
19 janv. 2005 à 20:49
19 janv. 2005 à 20:49
Bonsoir,
Merci.
Salutations
Jean-Pierre
Merci.
Salutations
Jean-Pierre