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

  1. #1
    419
    419 est déconnecté
    Membre du Club
    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
    Points : 52
    Points
    52
    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 948
    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 948
    Points : 5 174
    Points
    5 174
    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 du Club
    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
    Points : 52
    Points
    52
    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 du Club
    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
    Points : 52
    Points
    52
    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 du Club
    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
    Points : 52
    Points
    52
    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 du Club
    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
    Points : 52
    Points
    52
    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
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 674
    Points
    18 674
    Par défaut
    Bonjour !

    Faute d'orthographe ou de syntaxe n'est pas plus acceptée en informatique qu'en français !
    En réponse au premier post, la solution est de reprendre la même orthographe / syntaxe d'une feuille de calculs,
    le message étant clair quant à l'erreur sur l'objet Range.

    Sinon comme son nom l'indique pourtant bien, l'évènement Selection_Change
    se déclenche uniquement lors du changement de cellule active …

    _________________________________________________________________________________________________________
    Je suis Paris, Istanbul, Berlin, Nice, Bruxelles, Charlie, …

  8. #8
    419
    419 est déconnecté
    Membre du Club
    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
    Points : 52
    Points
    52
    Par défaut
    oui pour la syntaxe mais en l’occurrence, c'est le nom défini qui pose problème. Si je remets la référence de la cellule M22 ou M23, ça marche donc l'erreur de syntaxe est le nom défini qui l'est sur le classeur et non pas la feuille ce qui me semble être là ou ca bloque.

    Je ne sais tjs pas avancer dans mon pb..
    Merci pour la réponse néanmoins.

  9. #9
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 433
    Points
    12 433
    Par défaut
    Bonjour
    Lorsque je lis dans le code montré :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("ProvAUTRE:SommenonAFFECT")
    1) je me dis qu'il ne peut qu'invoquer une plage ainsi nommée (ProvAUTRE:SommenonAFFECT)
    2) existe-t-elle ?
    3) par quel code a-t-elle été ainsi nommée ?
    4) je le vérifierais par un simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    msgbox Range("ProvAUTRE:SommenonAFFECT").address
    et si erreur : je saurais qu'aucune plage n'a été nommée ProvAUTRE:SommenonAFFECT
    as-tu fait ce test tout bête et de premier réflexe ? Si non --->> fais-le. Rien qu'en le faisant, tu te réveilleras.

  10. #10
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 940
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 940
    Points : 28 938
    Points
    28 938
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    J'ai cru comprendre que tu tentes d'utiliser une cellule ou une plage nommée connue dans le classeur en utilisant un module feuille.
    Exemple d'un code se trouvant dans le module d'une feuille qui affiche la valeur d'une cellule nommée Tva qui fait référence à une cellule de la feuille nommée Param
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub Test()
     MsgBox Range("Tva").Value
    End Sub
    Ce code renvoie une erreur 1024 sauf si tu es dans le module de la feuille Param ou dans le module ThisWorkbook

    Pour accéder à une cellule ou plage de cellules nommée connue dans le classeur depuis n'importe quel module feuille,il faut utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MsgBox ThisWorkbook.Names("Tva").RefersToRange
    A-je bien compris ta question ?

  11. #11
    419
    419 est déconnecté
    Membre du Club
    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
    Points : 52
    Points
    52
    Par défaut
    Bonsoir,
    merci pour vos posts.
    Juste le sentiment que le novice n'est jamais compris par l'expert...

    Umparia,
    sauf erreur, un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Not Application.Intersect(Target, Range("m22:m23")) Is Nothing Then
    ne nécessite pas de définir le Range "M22:M23"

    C'est juste que j'ai défini M22 = ProvAUTRE et M23 = SommenonAFFECT.

    Philippe,
    c'est un peu ça..

    Je peux proposer autre chose ?
    Comment je fais pour remplacer le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Not Application.Intersect(Target, Range("m22:m23")) Is Nothing Then
    par celui-ci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Not Application.Intersect(Target, Range("ProvAUTRE:SommenonAFFECT")) Is Nothing Then
    sachant que les noms sont définis au niveau du classeur, afin de ne plus avoir à modifier les cellules du range si plus tard je modifie ma feuille.

    merci

  12. #12
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 433
    Points
    12 433
    Par défaut
    Tu mélange les genres, 419 ....****
    Si tu veux utiliser les noms, voilà un exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Range("A1:B2").Name = "titi"
       Range("D1:E3").Name = "bibi"
       MsgBox Application.Union(Range("titi"), Range("bibi")).Address
    Et en voilà un exemple d'utilisation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
      Dim toto As Range
      Set toto = Application.Union(Range("titi"), Range("bibi"))
      If Not Intersect(Target, toto) Is Nothing Then
        MsgBox "dedans"
      End If
    End Sub
    EDIT : **** -->> Pour bien comprendre :
    - un objet range utilise une adresse de cellule(s). Cette adresse est exprimée en chaîne de caractères --->> Range(adresse_de_cellule(s))
    - une plage nommée n'est pas une adresse de cellule(s), ni même le nom donné à une adresse de cellule(s)), mais un nom de baptême donné à un objet Range

    Le nom de baptême attribué à un objet Range constitue par ailleurs à lui seul également un objet (un objet Name et non un objet range***) et n'est en aucun cas une adresse en soi (il ne fait que se référer à une adresse)
    *** pour se référer à l'objet range correspondant à cet objet name, il est nécessaire de préciser Range(Name) (et c'est un objet et non une adresse).
    Ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    MsgBox Range("titi").Address '--->> adresse le l'objet Range nommé titi
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     MsgBox Range(Range("titi").Address).Address '  --->>adresse de l'objet range basé sur l'adresse de l'objet range nommé titi
    Retourneraient la même chose. La première syntaxe : directement (adresse de l'objet). La seconde syntaxe "ramenant" à la notation classique.

  13. #13
    419
    419 est déconnecté
    Membre du Club
    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
    Points : 52
    Points
    52
    Par défaut
    Umparia,
    merci pour l'explication détaillée.

    je pense avoir compris.
    Mais je pense aussi que ce n'est pas le problème que je rencontre.

    Si je fais dans mon code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    range("ProvAutre").select
    ou 
    Range("ProvAUTRE:SommenonAFFECT").select
    et bien la ou les cellules concernées sont bien sélectionnées.
    De plus, le code tel qu'indiqué (cf. premier post) marche.
    Il n'y a que quand je fais référence à la feuille via une autre macro dans une autre feuille que celà bloque. (cf. premier post aussi). L'autre macro ne fait que modifier une cellule lambda dans ma feuille "BASE" déclenchant de fait (workseet_change) l'autre macro qui bogue.

    J'ai défini les noms pour m'éviter d'avoir à modifier les références des cellules en cas d'ajout ou suppression de lignes dans ma feuille.
    J'ai auparavant changé 3 fois les références des cellules dans la macro pour être à jour avec mes changements. La définition des noms me règle ce souci.
    Mais m'en apporte un autre que je n'arrive tjs pas à régler.

  14. #14
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 940
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 940
    Points : 28 938
    Points
    28 938
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Juste pour ton information, la méthode SELECT de l'objet Range ne peut que renvoyer une erreur si la feuille où se trouve cette plage n'est pas active.
    Pour le surplus relire ma réponse par rapport aux plages nommées et le module feuille.

    J'ai défini les noms pour m'éviter d'avoir à modifier les références des cellules en cas d'ajout ou suppression de lignes dans ma feuille
    La propriété CurrentRegion de l'objet Range permet d'obtenir le même résultat (à condition bien entendu que la première cellule de la plage reste la même)

  15. #15
    419
    419 est déconnecté
    Membre du Club
    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
    Points : 52
    Points
    52
    Par défaut
    Bonsoir,

    Philippe,
    j'ai compris les .select si je ne suis pas sur la feuille active.
    Je donnais à titre d'exemple pour Umparia sur le nommage des plages.

    J'intègre ton premier post et sans doute une partie du pb vient de là..

    Mais sur ma première feuille "ENR", la macro est sur worksheet_calculate (donc pas sur thisworkbook ou module) quand la macro sur la deuxième feuille est sur worksheet_change de ma feuille "BASE".

    Je vais donner ma langue au chat et passer à autre chose..
    Merci

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

    Informations forums :
    Inscription : Août 2010
    Messages : 1 816
    Points : 2 954
    Points
    2 954
    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.

  17. #17
    419
    419 est déconnecté
    Membre du Club
    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
    Points : 52
    Points
    52
    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.

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

    Informations forums :
    Inscription : Août 2010
    Messages : 1 816
    Points : 2 954
    Points
    2 954
    Billets dans le blog
    10
    Par défaut
    Exact, je n'avais pas testé.
    Néanmoins, ton problème est bien dans le nommage commun à toutes les feuilles.
    Pour contourner ce souci, il suffit de sélectionner ta feuille base, de manière invisible à l'utilisateur, dans le code d'appel.
    Comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Dim ws As Worksheet
    Set ws = ActiveSheet
    Application.ScreenUpdating = False
    With Worksheets("base")
      .Select
      If ws.Range("i8").Value = 1 Then 'si CDD alors ..
        .Range("e20").Value = "OUI" ' préca = oui par défaut
      Else
        .Range("e20").Value = "NON" ' sinon préca = non par défaut
    End If
    End With
    ws.Select
    Application.ScreenUpdating = True
    EDIT : Je rejoins unparia (salutations l'ami) sur la syntaxe avec Union...

  19. #19
    419
    419 est déconnecté
    Membre du Club
    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
    Points : 52
    Points
    52
    Par défaut
    kweel,
    On est d'accord depuis le début que le nommage global pose problème.
    Mais ta proposition que j'arrive à cerner dans son principe est trop touchy pour une création de ma part en solo..

    En tout cas, posé rapidement, je n'ai a priori plus la problématique précédente.
    Je n'ai pas le temps ce soir ou demain de finaliser.
    Je reviendrais faire un retour dès que je peux m'y remettre.

    Merci pour ce/ces posts.

  20. #20
    419
    419 est déconnecté
    Membre du Club
    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
    Points : 52
    Points
    52
    Par défaut
    Hey long time

    j'ai réussi à avancer en appliquant les dernières recommandations. Merci pour celà.

    Autre souci qui se présente. Je mets parfois à jour les données sur mes feuilles (via Données / mise à jour données) mais forcément mon problème revient pour chaque cellule qui est mise à jour.. sur chaque feuille..

    J'aimerai donc pouvoir lancer une macro qui désactiverait toutes les macros pour éviter les erreurs bog. Mettre à jour mes liens puis réactiver les macros.
    Je ne vois pas comment le faire. Merci

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

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