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 :

Noms définis et Worksheet_Change(ByVal Target As Range [XL-2013]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    419
    419 est déconnecté
    Membre confirmé
    Homme Profil pro
    Portage Salarial
    Inscrit en
    Mars 2005
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Portage Salarial
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2005
    Messages : 82
    Par défaut Noms définis et Worksheet_Change(ByVal Target As Range
    Bonsoir,
    Dans un fichier de plusieurs feuilles,
    j'ai des noms définis sans référence à une feuille (Définir nom / référence = !M21 par exemple pour ProvAUTRE)

    Dans la feuille base j'ai une macro qui utilise les noms définis sur un Worksheet_Change(ByVal Target As Range)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    Private Sub Worksheet_Change(ByVal Target As Range)
     
     ' permet la modification des cellules H11 et i11 pour la provision de fin contrat selon les cellules M19,20 et 21
    If Not Application.Intersect(Target, Range("m14:m15")) Is Nothing Then 'ces cellules déterminent la valeur de la cellule M19
      ActiveSheet.Unprotect 'dévérouille la feuille pour modifier les range dessous
        Application.EnableEvents = False 'permet de bloquer les évènements tant que la macro n'est pas finie
          Range("h11").Value = "PROVISION JOUR(S) FIN DE CONTRAT"
          Range("i11").Value = Range("ProvDAYRATE").Value
        Application.EnableEvents = True 'réactive les évènements
    Else
         If Not Application.Intersect(Target, Range("ProvAUTRE:SommenonAFFECT")) Is Nothing Then 'modification de M22 ou 23 qui ont la priorité
       ActiveSheet.Unprotect 'dévérouille la feuille pour modifier les range dessous
            Application.EnableEvents = False
             If Range("SommenonAFFECT").Value <> 0 Then
                Range("h11").Value = "MONTANT NON AFFECTé"
                Range("i11").Value = Range("SommenonAFFECT").Value
            Else
                If Range("ProvAUTRE").Value <> 0 Then
                    Range("h11").Value = "PROVISION AUTRE FIN DE CONTRAT"
                    Range("i11").Value = Range("ProvAUTRE").Value
                Else 'si l'un ou l'autre est remis à 0 alors on revient à la provision classique daily rate
                    Range("h11").Value = "PROVISION JOUR(S) FIN DE CONTRAT"
                    Range("i11").Value = Range("ProvDAYRATE").Value
                End If
            End If
            Application.EnableEvents = True
       ActiveSheet.Protect 'vérouille la feuille
     End If
    End If
    end sub
    Dans une autre feuille, j'ai une case à option et selon le résultat, je viens changer un des paramètres (Cf. code ci-dessous) sur de la feuille BASE mais j'ai une erreur "méthode Range de l'objet Worksheet a échoué sur la macro précédente ligne 11.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    If Range("i8").Value = 1 Then 'si CDD alors ..
    Worksheets("base").Range("e20").Value = "OUI" ' préca = oui par défaut
     
    Else
     
    Worksheets("base").Range("e20").Value = "NON" ' sinon préca = non par défaut
     
    End If
    Je comprends a priori pourquoi cela bloque mais y trouver une solutions car avant d'avoir défini les noms pour les Range concernés, j'avais les références des cellules dans les Range et cela fonctionnait.

    Merci pour votre retour

  2. #2
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 974
    Par défaut
    Bonjour,
    J'arrive pas à comprendre ta requête mais j'ai parti du principe que tu as un classeur à plusieurs onglets et un macro et selon un critère il va choisir l'un des onglets
    Si c'est le cas il est conseillé d'utilisé un combobox remplie avec les nom des onglets et une fois tu fais un choix tu envoie le nom de l'onglet vers une cellule de l'onglet (RESULTAT)
    et dans ton code tu commence par définir l'onglet source comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set Sh = ThisWorkbook.Sheets(ThisWorkbook.Sheets("RESULTAT").Range("A2").Text)
    Si ma réponse et hors sujet je n'ai que te souhaiter la bonne continuation et bonne journée

  3. #3
    419
    419 est déconnecté
    Membre confirmé
    Homme Profil pro
    Portage Salarial
    Inscrit en
    Mars 2005
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Portage Salarial
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2005
    Messages : 82
    Par défaut
    Bonjour,
    merci pour la réponse qui est un peu hors sujet mais pas de soucis.

    J'ai plusieurs feuilles en effet et sur certaines feuilles j'ai la première macro permettant une mise à jour de datas si certains Ranges sont modifiés.
    J'avais au départ des références de cellule (range("g39").value) mais lorsque je modifiais mes feuilles, il fallait que je modifie les références des cellules dans la macro donc je suis passé en référence relative (range("ProvAUTRE").value en ayant préalablement défini le nom ProvAUTRE par exemple).

    En faisant celà, une feuille sur laquelle j'ai mais deuxième macro renvoie l'erreur indiquée..

  4. #4
    419
    419 est déconnecté
    Membre confirmé
    Homme Profil pro
    Portage Salarial
    Inscrit en
    Mars 2005
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Portage Salarial
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2005
    Messages : 82
    Par défaut
    Re,
    je réessaye de m'expliquer.
    En plus de faire du Up, celà permet peut être de mieux comprendre et d'avoir la réponse à mon problème.

    Une feuille "ENR" a des liens avec ma feuille "BASE".
    Exemple : je choisis un option OUI/NON dans la feuille "ENR" et celà va automatiquement afficher OUI ou NON sur la feuille BASE dans une cellule lambda qui n'a rien à voir avec la macro et les cellules de la macro qui pose pb.

    Dans ma feuille "BASE", j'ai une macro qui fonctionne sur Worksheet_change (code ci-dessous (mon premier post)).
    Cette macro utilise des noms définis pour les Range.

    Ces noms définis le sont de la manière suivante : Nom / référence = !G39 (pour la cellule G39 par exemple)
    Au lieu de : Nom / référence = 'base'!G39
    Car celà me permet d'appliquer sur plusieurs feuilles ces noms définis.

    Depuis que j'ai fait celà (les noms définis pour remplacer les valeurs relatives des Range), j'ai le message d'erreur qui s'affiche (cf. mon post) lorsque j'interviens sur ma feuille "ENR" comme évoqué en début de post.

    En pratique, la macro s'enclenche (logique) mais elle n'arrive pas à lire ce que les Range signifient à la ligne 11 qui est la première ligne d'action de la macro, la première condition n'étant pas remplie a priori..

    Du coup, je ne sais pas quoi faire.
    Lorsque les Range correspondait à des cellules précises, tout était ok.
    Merci

  5. #5
    419
    419 est déconnecté
    Membre confirmé
    Homme Profil pro
    Portage Salarial
    Inscrit en
    Mars 2005
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Portage Salarial
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2005
    Messages : 82
    Par défaut
    Re,
    c'est la première fois que je me parle autant à moi même !!

    Bon j'ai changé mon workseet_change pour un selectionchange.

    Celà me permet de ne plus avoir le problème rencontré mais par contre la mise à jour de ma feuille "BASE" ne se fait correctement que lorsque je suis sur les cellules concernées par le selectionchange, que je les modifie et que je re-clique dessus pour que ma feuille se mette à jour.
    Je vais tenter de mettre un calcul automatique pour que lorsque je change une cellule, la mise à jour se fasse.

    Je me (vous) tiens au courant !!!!!

  6. #6
    419
    419 est déconnecté
    Membre confirmé
    Homme Profil pro
    Portage Salarial
    Inscrit en
    Mars 2005
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Portage Salarial
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2005
    Messages : 82
    Par défaut
    Bonsoir à tout le monde ! enfin surtout à toi qui lit ces lignes!! j'espère.

    Bon en selection_change, je disais que ça marche.
    Mais pas parfait.

    J'ai tenté de faire de l'actualisation ou autre mais forcément celà ne fonctionne qu'en changement de ma sélection.

    Je n'ai donc toujours pas trouvé comment faire.

    Si quelq'un d'autre me lit

  7. #7
    Membre Expert
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 817
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 817
    Billets dans le blog
    10
    Par défaut
    Bonjour,

    Ta réponse est dans ton intervention suivante :

    Citation Envoyé par 419 Voir le message
    Re,
    je réessaye de m'expliquer.
    .....
    Ces noms définis le sont de la manière suivante : Nom / référence = !G39 (pour la cellule G39 par exemple)
    Au lieu de : Nom / référence = 'base'!G39
    Car celà me permet d'appliquer sur plusieurs feuilles ces noms définis.
    Le fait d'avoir défini ce nom sur TOUTES tes feuilles fait que VBA ne sait pas à laquelle tu t'adresses dans ton WorkSheet_Change...

    Donc, dans l'événement Change de ta WorkSheet "Base", remplace :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("ProvAUTRE:SommenonAFFECT")
    par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.Range("ProvAUTRE:SommenonAFFECT")
    Me représente alors la feuille base.

  8. #8
    419
    419 est déconnecté
    Membre confirmé
    Homme Profil pro
    Portage Salarial
    Inscrit en
    Mars 2005
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Portage Salarial
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2005
    Messages : 82
    Par défaut
    Merci pour le retour mais

    J'ai essayé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
         If Not Application.Intersect(Target, Me.Range("ProvAUTRE:SommenonAFFECT")) Is Nothing Then 'modification de M22 ou 23 qui ont la priorité
    Et cela me renvoie la même erreur.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 08/10/2015, 11h55
  2. [XL-2007] Ajouter une "Target" à Private Sub Worksheet_Change(ByVal Target As Range)
    Par 'OTM' dans le forum Macros et VBA Excel
    Réponses: 36
    Dernier message: 19/12/2014, 14h21
  3. [Toutes versions] Private Sub Worksheet_Change(ByVal Target As Range) et protection
    Par Giantrick dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 07/01/2013, 10h21
  4. [XL-2007] petit soucis avec un Private Sub Worksheet_Change(ByVal Target As Range)
    Par dris974 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 28/03/2011, 12h57

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