Délimitation d'une plage Macro

Fermé
Tony27430 Messages postés 53 Date d'inscription dimanche 4 octobre 2015 Statut Membre Dernière intervention 30 janvier 2022 - Modifié le 18 févr. 2019 à 18:13
Tony27430 Messages postés 53 Date d'inscription dimanche 4 octobre 2015 Statut Membre Dernière intervention 30 janvier 2022 - 23 févr. 2019 à 20:41
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.
A voir également:

4 réponses

michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
Modifié le 23 févr. 2019 à 10:10
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 lundi 6 mai 2013 Statut Membre Dernière intervention 11 août 2023 337
23 févr. 2019 à 11:08
Bonjour michel_m,

Excellent, merci pour l'info

Cdlt
0
Tony27430 Messages postés 53 Date d'inscription dimanche 4 octobre 2015 Statut Membre Dernière intervention 30 janvier 2022
23 févr. 2019 à 14:19
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 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
Modifié le 23 févr. 2019 à 16:13
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 dimanche 4 octobre 2015 Statut Membre Dernière intervention 30 janvier 2022
23 févr. 2019 à 20:30
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 dimanche 4 octobre 2015 Statut Membre Dernière intervention 30 janvier 2022
23 févr. 2019 à 20:41
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 lundi 6 mai 2013 Statut Membre Dernière intervention 11 août 2023 337
21 févr. 2019 à 05:45
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
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 dimanche 4 octobre 2015 Statut Membre Dernière intervention 30 janvier 2022
21 févr. 2019 à 17:09
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 lundi 6 mai 2013 Statut Membre Dernière intervention 11 août 2023 337
22 févr. 2019 à 07:13
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 dimanche 4 octobre 2015 Statut Membre Dernière intervention 30 janvier 2022
22 févr. 2019 à 17:46
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 lundi 6 mai 2013 Statut Membre Dernière intervention 11 août 2023 337
23 févr. 2019 à 06:55
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 dimanche 4 octobre 2015 Statut Membre Dernière intervention 30 janvier 2022
23 févr. 2019 à 14:17
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