Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Plus de retour en arrière ?

guy72

XLDnaute Impliqué
Bonjour,

Je n'ai plus de retour arrière.
Pouvez-vous me dire pourquoi ?

Exemple:
1) Prenez un nouveau classeur (EXCEL 2003 ou 2010).
2) Dessin --> Forme automatique --> Flèche pleine --> Flèche droite à entaille.
3) La mettre ou vous voulez, lui mettre le nom "Girouette".
4) En E5 mettre un point cardinal.
5) Copier le code suivant :

Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
RoseWind = Array("NNE", "NE", "ENE", "E", "ESE", "SE", "SSE", "S", "SSO", "SO", "OSO", "O", "ONO", "NO", "NNO", "N")
ActiveSheet.Shapes("Girouette").Rotation = 270 + 22.5 * WorksheetFunction.Match(Range("E5").Value, RoseWind, 0)
End Sub
6) Si vous voulez, vous pouvez changer le texte dans E5 pour faire tourner la flèche.

7) Mettre un texte dans une autre cellule (E17), faite "Entrée"
Maintenant, pouvez-vous supprimer le texte avec l'icône retour arrière ?
Moi je ne peux pas, sauf si je supprime le code pourquoi ?

Un exemple en pièce jointe
Merci de votre aide
Cordialement
Guy
 

Pièces jointes

  • Défaut.xls
    22 KB · Affichages: 100
G

Guest

Guest
Re : Plus de retour en arrière ?

Bonjour Guy,

D'abord la macro je l'écrirait comme ceci pour éviter les erreurs quand E5 vide ou texte farfelu etc.
Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim res As Variant
    RoseWind = Array("NNE", "NE", "ENE", "E", "ESE", "SE", "SSE", "S", "SSO", "SO", "OSO", "O", "ONO", "NO", "NNO", "N")
    res = Application.Match(Range("E5").Value, RoseWind, 0)
    If Not IsError(res) Then ActiveSheet.Shapes("Girouette").Rotation = 270 + 22.5 * res
End Sub

Ensuite c'est normal puisque tu lances la macro sur SelectionChange (Utile???) et que les macros vba vident le buffer des dernières actions. Donc quand tu rentres une données ailleurs, tu valides la sélection change, la macro est lancée, le buffer des dernières action vidé.

A+
 

guy72

XLDnaute Impliqué
Re : Plus de retour en arrière ?

Ensuite c'est normal puisque tu lances la macro sur SelectionChange (Utile???) et que les macros vba vident le buffer des dernières actions. Donc quand tu rentres une données ailleurs, tu valides la sélection change, la macro est lancée, le buffer des dernières action vidé.

Bonjour Hasco
Merci pour l'astuce.
Peut-on la lancer sur autre chose que " SelectionChange ?
Cordialement
 
G

Guest

Guest
Re : Plus de retour en arrière ?

re,

Il me semble en effet plus judicieux de le faire ailleurs:
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
   If Target.Address(0,0)="E5" then
        '....tes lignes de macro
   End if
End Sub

L'évènement WorkSheet_Change est lancé lorsque la valeur d'une cellule Change!

Il faut donc commencer par tester l'adresse de la cellule (Paramètre Target) qui a changé. Si c'est E5 alors on lance le truc

A+
 
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…