IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Impossible d'annuler la saisie


Sujet :

Macros et VBA Excel

  1. #1
    Rédacteur
    Avatar de Yoshidu62
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 294
    Par défaut Impossible d'annuler la saisie
    Bonjour à tous, dans un classeur Excel j'utilise le code suivant que j'ai récupéré sur le net, je n'en suis pas l'auteur et je n'y connais rien en VBA .

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
      Set champ = Range("C19:CA1000")
        If Not Intersect(champ, Target) Is Nothing Then
          champ.FormatConditions.Delete
          If Target.Count = 1 Then
            Union(Intersect(Target.EntireRow, champ), Intersect(Target.EntireColumn, champ)).FormatConditions.Add Type:=xlExpression, Formula1:="VRAI"
            Union(Intersect(Target.EntireRow, champ), Intersect(Target.EntireColumn, champ)).FormatConditions(1).Interior.ColorIndex = 36
            Union(Intersect(Target.EntireRow, champ), Intersect(Target.EntireColumn, champ)).FormatConditions(1).Font.ColorIndex = black
            'Target.FormatConditions(1).Font.Bold = True
          End If
        End If
    End Sub
    Ce code fait exactement ce que je souhaite c'est-à-dire qu'il met en surbrillance la cellule sur laquelle je me trouve ainsi que la colonne complète et la ligne complète de la dite cellule.

    Ceci me permet de mieux visualiser où je me situe dans un tableau chargé de données.

    J'en viens maintenant à mon problème, en effet, je viens de remarquer que lorsque j'édite la valeur dans une cellule, je peux annuler, via ctrl+z ou la petite flèche bleue en haut à droite, la saisie que je suis en train de faire.

    Mais si je valide la saisie (via Entrée ou en quittant la cellule) et bien je ne peux plus annuler, impossible de faire ctrl+z ou la petite flèche bleue (qui d'ailleurs est grisée).

    J'ai testé dans un fichier sans le code VBA et tout fonctionne très bien, mais dès que j'ajoute le morceau de code et bien là je ne peux plus faire d'annulation suite à des saisies ou modification.

    Je précise également que c'est le seul morceau de code VBA qu'il y a dans mon fichier Excel.

    Avez-vous une idée sur comment régler ce problème ? Qu'est-ce qui pose problème dans le code VBA ?

    D'avance merci à tous !
    VIM un éditeur pour la VIe : http://www.vim.org

    Ubuntu, une distribution Linux pour tous : http://www.ubuntu.com/

    Mon espace perso : http://ngressier.developpez.com

  2. #2
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2012
    Messages : 38
    Par défaut
    Bonjour,

    Je crois que ce n'est pas le code qui pose problème mais plutôt la fonction ctrl+z.

    Elle ne peut pas annuler une instruction vba, mais uniquement une action réalisée depuis l'interface utilisateur excel d'après ce que j'ai compris.. moi aussi j'en suis frustré

    J'espère me tromper et que quelqu'un va bientôt nous donner une solution ! car ça m'interesse.

  3. #3
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut heu
    Bonjour
    Il y a une solution toute simple :
    1 variable range et 1 string
    dim oldcel
    dim oldvaleur

    Dans ta fonction qui fait le travail, tu mets
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     if oldcel<>target then 
    set oldcel=target
    oldvaleur=target.value
    Ensuite dans ta fonction "annuler" tu mets
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    oldcel .value=oldvaleur
    Voilà en gros le schéma.

    Si tu n'y arrives pas je t'aiderai
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  4. #4
    Rédacteur
    Avatar de Yoshidu62
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 294
    Par défaut
    Si je comprends bien là tu me proposes de créer une fonction VBA pour faire l'annulation ?

    N'est-il pas possible d'utiliser "simplement" ou plutôt "naturellement" la fonction d'annulation via CTRL+Z ?

    Le problème ne vient pas du code VBA que j'utilise ? Moi je pensais qu'il y aurait juste une petite modif à faire dans ce code

    Qu'est-ce qui m'empêche d'utiliser le CTRL+Z ? C'est, comme ce que suppose KekeStreet, le fait que j'utilise du VBA ?

    Merci.
    VIM un éditeur pour la VIe : http://www.vim.org

    Ubuntu, une distribution Linux pour tous : http://www.ubuntu.com/

    Mon espace perso : http://ngressier.developpez.com

  5. #5
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    Bonjour

    Non je crois qu'une modification faite par vba ctrl+Z ne marche pas.
    Au plaisir
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  6. #6
    Rédacteur
    Avatar de Yoshidu62
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 294
    Par défaut
    Ok, dans ce cas je vais tourner mon problème autrement, est-ce qu'il est possible de faire l'équivalent de ce que fait le code VBA mais sans utiliser de code VBA ? Par exemple via la mise en forme conditionnelle ?

    J'ai déjà essayer avec la MFC mais je ne vois pas comment utiliser la notion de "cellule active"...
    VIM un éditeur pour la VIe : http://www.vim.org

    Ubuntu, une distribution Linux pour tous : http://www.ubuntu.com/

    Mon espace perso : http://ngressier.developpez.com

  7. #7
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    Non une mise en forme conditionnelle te fera ce que tu veux après une action, mais elle ne te permettra pas d'annuler.

    La seule et unique possibilité dans ton cas, c'est de passer par une fonction en vba.

    Un principe parmi plein d'autres possibilités:

    A l'activation de ton sheet tu génères un tableau avec un range précis ou intégral, et au sheet sélection change, tu entres les données ainsi que l'adresse de la cellule dans un autre tableau à 2 colonnes. La colonne 2 servira à mettre l'adresse de la cellule qui a été modifiée.

    Dans un bouton, ou un item dans le menu contextuel, tu actionnes une macro qui prend le dernier item du tableau2 et récupère la valeur dans le tableau1 et le réinscrit dans la cellule. L'adresse étant dans la 2eme colonne du tableau2.

    Au plaisir
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  8. #8
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Par défaut
    Bonjour,

    Citation Envoyé par patricktoulon Voir le message
    Non une mise en forme conditionnelle te fera ce que tu veux après une action, mais elle ne te permettra pas d'annuler.

    La seule et unique possibilité dans ton cas, c'est de passer par une fonction en vba.
    Je te trouve bien sur de toi.
    Si une MFC est possible, il ne s'agit pas de code VBA. Donc, toute action de l'utilisateur pourra être annulée.
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  9. #9
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2012
    Messages : 38
    Par défaut
    Oui mais dans tous les cas il n'y a pas de MFC possible (du moins à ma connaissance) car microsoft n'a pas jugé utile d'implémenter une fonction dans l’environnement graphique pour récupérer les coordonnées de la sélection active.

    Ce qui est vraiment dommage...

  10. #10
    Invité de passage
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 1
    Par défaut
    Désolé j'arrive après la bataille mais ça peu toujours servir (je n'ai pas eu l'occasion de tester dans excel 2007. ça marche très bien dans le 2010)

    pour la mise en surbrillance avec la MFC la ligne qui correspond à la cellule sélectionnée, en conservant la possibilité d'annuler :

    -Sélectionner le champ ou ça doit s'appliquer
    -Format/Mise en forme Conditionnelle
    -Condition : =LIGNE()=CELLULE("ligne")
    -Choisir le format désiré

    -Dans le VBA de la feuille :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
      Calculate
    End Sub
    Microsoft à oublié certaine chose (comme la possibilité de désélectionner une cellule lors d'une sélection multiple), mais il y a bien la fonction CELLULE pour avoir les coordonnées de la cellule active.

Discussions similaires

  1. Réponses: 2
    Dernier message: 30/05/2008, 09h39
  2. Réponses: 16
    Dernier message: 30/01/2008, 15h11
  3. annuler la saisie dans un champs
    Par _developpeur_ dans le forum Access
    Réponses: 2
    Dernier message: 18/12/2006, 12h34
  4. [VB6] Comment faire pour annuler la saisie dans un combobox ??
    Par Lucas42 dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 14/06/2006, 15h16
  5. Réponses: 1
    Dernier message: 01/02/2006, 22h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo