Délimitation d'une plage Macro

Tony27430 Messages postés 53 Date d'inscription   Statut Membre Dernière intervention   -  
Tony27430 Messages postés 53 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

J'ai réalisé une macro suivante:
Private Sub Worksheet_Change(ByVal Target As Range)
'Désactive l'évènement
Application.EnableEvents = False
'modification dans la cellule C5
i = 5
While Cells(i, 3).Value <> ""
i = i + 1
Wend
Cells(i, 3).Value = Range("G11").Value
'Réactive l'évènement
Application.EnableEvents = True
End Sub

Je veux que le renvoi de la valeur de "G11" me soit renvoyé jusuq' a la cellule C17,
Soit i+i+1 (maximum 17 Fois), ce qui remplira ma colonne qui est délimité par (i=5 et i, 3 sans limite de fin)

Merci des infos de chacun.

4 réponses

  1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    Bonjour Tony, Frenchie

    Frenchie, excuse l'incruste :o)

    si on l'arrête avant qu'elle termine son cycle, elle ne fonctionnera plus,

    Effectivement, il vaut mieux dans ce cas ,>utiliser une astuce avec une variable "Flag" (ou autre nom) booléenne de type Static

    Option Explicit
    '---------------------------------------------
    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Lig As Byte
    Static Flag As Boolean

    If Target.Address = "$G$11" Then
    'Désactive l'évènement
    Flag = False
    'modification dans la cellule C5
    Lig = 5
    While Cells(i, 3).Value <> ""
    Lig = Lig + 1
    If Lig > 17 Then Exit Sub
    'Exit Sub 'test sortie accidentelle lors d'essais
    Wend
    Cells(Lig, 3).Value = Range("G11").Value
    'Réactive l'évènement
    Flag = True
    End If
    End Sub


    1
    1. Frenchie83 Messages postés 2254 Statut Membre 339
       
      Bonjour michel_m,

      Excellent, merci pour l'info

      Cdlt
      0
    2. Tony27430 Messages postés 53 Date d'inscription   Statut Membre Dernière intervention  
       
      Merci de ton complement d'info, mais avec la variable "FLAG", je n'est plus de renvoi de la valeur de "G11"

      Merci de ton retour
      0
    3. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
       
      Imagine toi que j'ai testé ma bidouille avec succès avant de proposer quelque chose. donc, bosse un peu ou sois plus précis dans ta demande

      Bon WE
      0
    4. Tony27430 Messages postés 53 Date d'inscription   Statut Membre Dernière intervention  
       
      Pour être plus précis, dans ta macro, tu es en défaut sur cette ligne:
      While Cells(i, 3).Value <> "", il refuse le "i", qui doit selon ta variable "Flag" être nommée "Lig".
      Après correction de While Cells(i, 3).Value <> "", par While Cells(Lig, 3).Value <> "",
      Je n'est pas de renvoie de la valeur de "G11", et aucune erreur.
      Le but de cette macro étant le renvoi de chaque nouvelle valeur de "G11", en C5 et ainsi de suite.
      Je ne sais pas sous quel logiciel tu as testé, mais sur Microsooft Excel 2010 ta variable bloque le renvoi de la valeur.
      Merci de ton retour...
      0
    5. Tony27430 Messages postés 53 Date d'inscription   Statut Membre Dernière intervention  
       
      Pour complémenter mon retour ci-dessus.
      Cette macro fonction, mais pas de gestion d'erreur. Mais au moins il renvoi la valeur en C5 et ainsi de suite.
      Merci de vos retours,
      Private Sub Worksheet_Change(ByVal Target As Range)
      'If Target.Address = "$G$11" Then
      'Désactive l'évènement
      Application.EnableEvents = False
      'modification dans la cellule C5
      i = 5
      While Cells(i, 3).Value <> ""
      i = i + 1
      If i > 17 Then Exit Sub
      Wend
      Cells(i, 3).Value = Range("G11").Value
      'Réactive l'évènement
      Application.EnableEvents = True
      'End If
      End Sub

      J'ai été obliger de passé en commentaires, If Target…. et End If
      Sans cette manip plus de renvoi de valeur.

      Merci
      0
  2. Frenchie83 Messages postés 2254 Statut Membre 339
     
    Bonjour,

    En attendant un peu plus de précisions

    Si c'est pour recopier 17 fois
     Range(Cells(i, 3), Cells(i + 17, 3)).Value = Range("G11").Value


    Si cela doit s'arrêter à C17
    Range(Cells(i, 3), Cells(17, 3)).Value = Range("G11").Value


    et là, je ne comprends pas
    ce qui remplira ma colonne qui est délimité par (i=5 et i, 3 sans limite de fin)


    Cdlt
    0
    1. Tony27430
       
      Bonjour,

      Merci pour ton retour, je vais essayé dans la soirée, je ne manquerai pas de te faire un retour.
      Pour confirmé, la macro complète modifié selon tes infos elle devra être faite comme ça:

      Private Sub Worksheet_Change(ByVal Target As Range)
      'Désactive l'évènement
      Application.EnableEvents = False
      'modification dans la cellule C5
      i = 5
      While Cells(i, 3).Value <> ""
      i = i + 1
      Wend
      Range(Cells(i, 3), Cells(17, 3)).Value = Range("G11").Value
      'Réactive l'évènement
      Application.EnableEvents = True
      End Sub

      Merci de ta confirmation si possible;

      Pour répondre à question concernant:
      "ce qui remplira ma colonne qui est délimité par (i=5 et i, 3 sans limite de fin)",

      L'objectif final du projet est le suivant:
      Chaque mois la valeur de "G11" est modifié, la première valeur de "G11" doit-être renvoyé en C5, lors de nouvelle valeur en "G11" elle doit-être renvoyé en "C6" sans effacé "C5", et ainsi de suite jusqu'à "C17" "MAXIMUM", ce qui n'est pas le cas avec ma macro initiale. J’espère avoir été plus clair,sur l'expression (i=5 et i, 3 sans limite de fin). Je pense qu'avec ton retour cela devrait fonctionné.......
      je reviens vers toi dès la fin des essais.
      Merci encore de ton retour.
      0
    2. Tony27430 Messages postés 53 Date d'inscription   Statut Membre Dernière intervention  
       
      Re,

      Comme convenu je reviens vers toi, j'ai teste la ligne:
      Range(Cells(i, 3), Cells(17, 3)).Value = Range("G11").Value,
      Il s'arrête bien en "C17", mais en recopiant la même valeur.
      Je veux: que chaque nouvelle valeur en "G11", soit affecté à la colonne "C". (C5, C6, C7...jusqu'à "C17"...
      On limite bien avec la ligne "RANGE" en "C17", peut-être une mauvaise position de "i=i+1"..
      Merci de tes infos….
      0
  3. Frenchie83 Messages postés 2254 Statut Membre 339
     
    Bonjour,

    Et comme ceci

    Private Sub Worksheet_Change(ByVal Target As Range)
        If Target.Address = "$G$11" Then
            'Désactive l'évènement
            Application.EnableEvents = False
            'modification dans la cellule C5
            i = 5
            While Cells(i, 3).Value <> ""
                i = i + 1
                If i > 17 Then Exit Sub
            Wend
            Cells(i, 3).Value = Range("G11").Value
            'Réactive l'évènement
            Application.EnableEvents = True
        End If
    End Sub
    


    Cdlt
    0
    1. Tony27430 Messages postés 53 Date d'inscription   Statut Membre Dernière intervention  
       
      Re,

      ok ca fonctionne, par contre j'ai été obliger de modifier légèrement, sinon pas de renvoi.
      Regarde les modif de la macro que j'ai mis en place.

      Private Sub Worksheet_Change(ByVal Target As Range)
      'Désactive l'évènement
      Application.EnableEvents = False
      'modification dans la cellule C5
      i = 5
      While Cells(i, 3).Value <> ""
      i = i + 1
      If i > 17 Then Exit Sub
      Wend
      Cells(i, 3).Value = Range("G11").Value
      'Réactive l'évènement
      Application.EnableEvents = True
      End Sub
      Merci,

      Sinon, en cas d'erreur pas moyen de rectifié sans fermer excel et de rouvrir, pas possible de construire une macro de réinitialisation.
      Je passe par "Executer/Reinitialiser", mais c'est pas bon.
      Obligation de fermer et de rouvrir excel.

      Merci encore de tes infos.
      0
  4. Frenchie83 Messages postés 2254 Statut Membre 339
     
    Bonjour,
    Regarde les modif de la macro que j'ai mis en place. Vous avez retiré la ligne qui empêchait d'exécuter le test si la cellule sélectionnée était différente de G11, cela signifie donc qu'à chaque modification de la feuille, qu'importe la cellule, la macro sera exécutée.

    Sinon, en cas d'erreur pas moyen de rectifié sans fermer excel et de rouvrir, pas possible de construire une macro de réinitialisation.
    Je passe par "Executer/Reinitialiser", mais c'est pas bon.
    Obligation de fermer et de rouvrir excel.

    Oui, la macro étant dans le module de la feuille et n'agissant que sur un changement de valeurs, si l'on fait une modif (après avoir mis un point d'arrêt ou lors d'un déroulement en pas à pas) et si on l'arrête avant qu'elle termine son cycle, elle ne fonctionnera plus, d'ou la nécessité de quitter et ré-ouvrir Excel.

    Cdlt
    0
    1. Tony27430 Messages postés 53 Date d'inscription   Statut Membre Dernière intervention  
       
      Bonjour,

      Je viens de reprendre la macro avec : If Target.Address = "$G$11" Then,
      Avec cette condition le renvoi ne se fait plus.
      J'ai donc mis cette condition en commentaire, et là le renvoi est Ok.
      Voilà pour l'info.

      Merci
      0