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

michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 314
 
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
Frenchie83 Messages postés 2240 Date d'inscription   Statut Membre Dernière intervention   338
 
Bonjour michel_m,

Excellent, merci pour l'info

Cdlt
0
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
michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 314
 
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
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
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
Frenchie83 Messages postés 2240 Date d'inscription   Statut Membre Dernière intervention   338
 
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
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
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
Frenchie83 Messages postés 2240 Date d'inscription   Statut Membre Dernière intervention   338
 
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
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
Frenchie83 Messages postés 2240 Date d'inscription   Statut Membre Dernière intervention   338
 
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
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