Aide Macro

Le
Christophe
Bonjour :

EN L4, j’ai des un menu déroulant qui modifie le contenu de N4 grâce =
à
la formule suivante:
=IF(L4="","ABSENT",IF(COUNTIF(L4,"*-PV")=0,"PRESENT",IF(COUNTIF(L4,"*=
-
PV")=1,"REPRESENTE")))

Je souhaiterais une macro (Private_Sub) qui modifie le contenu de
P4, S4, V4, Y4, AB4, etc. avec le même contenu que N4 (c.a.d.
ABSENT, PRESENT, REPRESENTE ou VIDE) et ceci uniquement lorsque pour
P4 la plage Q4 :Q34 est vide, lorsque pour S4 la plage T4 :T34 est
vide, lorsque pour V4 le range W4 :W34 est vide, etc.

Ce qui est vrai pour N4 doit aussi s’appliquer aux cellules de la
plage N4 :N34.

Au cas ou vous auriez besoin du projet, il est téléchargeable depuis
http://www.trippypatterns.com/VOTES%20AG%20v7.xlsm

Merci par avance pour votre aide.

Christophe
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Christophe
Le #23320451
Re-Bonsoir,

Ci-dessous un début de solution qui m'avait été proposée par Jacky et
que j'ai légèrement modifiée; Malheureusement, elle ne fonctionne
plus probablement compte tenu du fait qu'il y a des formules en N4 et
dans les autres cellules de la plage N4:N34. Cette macro ne prenait
pas en compte le fait que les cellules de la colonne n+1 (Q4:Q34,
T4:T34, W4:W34, etc.) doivent être vides.

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
If Not Intersect([H4:H34], Target) Is Nothing Then
If Target.Value = "PRESENT" Then
For i = 16 To 465 Step 3
Cells(Target.Row, i) = "PRESENT" 'ClearContents
Next

End If
End If
If Target.Count > 1 Then Exit Sub
If Not Intersect([H4:H34], Target) Is Nothing Then
If Target.Value = "ABSENT" Then
For i = 16 To 465 Step 3
Cells(Target.Row, i) = "ABSENT" 'ClearContents
Next

End If
End If
If Not Intersect([H4:H34], Target) Is Nothing Then
If Target.Value = "REPRESENTE" Then
For i = 16 To 465 Step 3
Cells(Target.Row, i) = "REPRESENTE" 'ClearContents
Next

End If
End If
End Sub

Merci.

Christophe
MichD
Le #23321791
Bonjour,

A ) Si tu publies un fichier, prends le temps d'enlever la protection
B ) La formulation n'est pas évidente
C ) La procédure devrait modifier la colonne AB si la condition est remplie
Cela est impossible dans ta feuille, car la colonne est protégée!

à partir de ce que j'ai compris, je te propose ceci :
'---------------------------------------
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Rg As Range, C As Range, X As Long
Set Rg = Intersect(Range("L4:L34"), Target)
If Not Rg Is Nothing Then
Application.EnableEvents = False
For Each C In Rg
X = C.Row
If IsEmpty(Range("Q" & X)) Then
Range("P" & X) = C.Value
Else
Range("P" & X) = ""
End If
If IsEmpty(Range("T" & X)) Then
Range("S" & X) = C.Value
Else
Range("S" & X) = ""
End If
If IsEmpty(Range("W" & X)) Then
Range("V" & X) = C.Value
Else
Range("V" & X) = ""
End If
If IsEmpty(Range("X" & X)) Then
Range("Y" & X) = C.Value
Else
Range("Y" & X) = ""
End If
If IsEmpty(Range("AA" & X)) Then
Range("AB4" & X) = C.Value
Else
Range("AB4" & X) = ""
End If
Next
Application.EnableEvents = True
End If
End Sub
'---------------------------------------


MichD
--------------------------------------------
Christophe
Le #23322921
Bonjour,

MichD merci d'avoir passé du temps à essayer de comprendre ma
problématique.

J'ai testé ta macro sur mon projet sans obtenir de résultat. Je l'ai
même essayé sur une feuille vide dans laquelle je tape en L4 "PRESENT"
sans obtenir plus de résultat.

J'ai publié à nouveau le projet en http://www.trippypatterns.com/VOTES
AG v7bis.xlsm
le mot de passe est MichD

Je vais essayer d'expliquer un peu mieux par l'exemple.

J'essaye de mette au point une petite application excel pour gérer la
feuille de présence et les votes à l'occasion d'une Assemblée Gén érale
de Copropriétaires.

Lorsque le COPROPRIETAIRE1 arrive à l'AG je rentre son nom dans la
feuille de présence grâce au menu déroulant se trouvant sur la plage
[L4:L34] en selectionnant COPROPRIETAIRE1 dans L4.
Grâce à la formule en N4, j'obtiens "PRESENT"

Il faudrait que grâce à une macro Private Sub Worksheet_Change
"PRESENT" s'inscrive également en P4,S4, V4, Y4, AB4, ..., QU4,. En
fait,dans toutes les colonnes EMARGEMENT de P4 à QU4 toutes les 3
colonnes.

Maintenant, imagine que le COPROPRIETAIRE1 a le pouvoir du
COPROPRIETAIRE 3.
Je rentre COPROPRIETAIE1-PV en L6. Dans la cellule N6, j'obtiens
"REPRESENTE"

Il faudrait que grâce à une macro Private Sub Worksheet_Change
"REPRESENTE" s'inscrive également en P4,S4, V4, Y4, AB4, ..., QU4,.

Enfin, imaginons que l'AG commence. Le COPROPRIETAIRE1 vote "POUR"
la RESOLUTION1 en Q4 et le COPROPRIETARE3 vote également "POUR" la
RESOLUTION1 en Q6.

Maintenant lsupposons que le COPROPRIETAIRE5 arrive en retard à l'AG.
Je rentre COPROPRIETAIRE5 en L8. Il apparait comme "PRESENT" sur la
feuille d'Emmargement en N8. Il faudrait que grâce à une macro Private
Sub Worksheet_Change "PRESENT" s'inscrive également en S4, V4, Y4,
AB4, ..., QU4,.mais qu'en revanche P4 reste "ABSENT" parce qu'il
n'était pas là pour voter la RESOLUTION1. (la plage (Q4:Q34] n'est pas
vide, il y a déjà eu des votes avant son arrivé). En l'occurence si
les votes pour la résolution 1 n'ont pas débuté, il pourra être per mis
d'enregister le vote du COPROPRIETAIRE5 pour la RESOLUTION1 en
premièrement entrant manuellement PRESENT à la place de ABSENT en P8
et POUR ou CONTRE etc. en Q8.

J'espère que cet exemple illustrera un peu mieux mon propos.

Remerciements et sincères salutations.

Christophe



On Apr 30, 1:30 pm, "MichD"
Bonjour,

A ) Si tu publies un fichier, prends le temps d'enlever la protection
B ) La formulation n'est pas évidente
C ) La procédure devrait modifier la colonne AB si la condition est rem plie
     Cela est impossible dans ta feuille, car la colonne est prot égée!

à partir de ce que j'ai compris, je te propose ceci :
'---------------------------------------
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Rg As Range, C As Range, X As Long
Set Rg = Intersect(Range("L4:L34"), Target)
If Not Rg Is Nothing Then
    Application.EnableEvents = False
    For Each C In Rg
        X = C.Row
        If IsEmpty(Range("Q" & X)) Then
            Range("P" & X) = C.Value
        Else
            Range("P" & X) = ""
        End If
        If IsEmpty(Range("T" & X)) Then
            Range("S" & X) = C.Value
        Else
            Range("S" & X) = ""
        End If
        If IsEmpty(Range("W" & X)) Then
            Range("V" & X) = C.Value
        Else
            Range("V" & X) = ""
        End If
        If IsEmpty(Range("X" & X)) Then
            Range("Y" & X) = C.Value
        Else
            Range("Y" & X) = ""
        End If
        If IsEmpty(Range("AA" & X)) Then
            Range("AB4" & X) = C.Value
        Else
            Range("AB4" & X) = ""
        End If
    Next
    Application.EnableEvents = True
End If
End Sub
'---------------------------------------

MichD
--------------------------------------------
MichD
Le #23324431
============================ Maintenant lsupposons que le COPROPRIETAIRE5 arrive en retard à l'AG.
Je rentre COPROPRIETAIRE5 en L8. Il apparait comme "PRESENT" sur la
feuille d'Emmargement en N8. Il faudrait que grâce à une macro Private
Sub Worksheet_Change "PRESENT" s'inscrive également en S4, V4, Y4,
AB4, ..., QU4,.mais qu'en revanche P4 reste "ABSENT" parce qu'il
n'était pas là pour voter la RESOLUTION1. (la plage (Q4:Q34] n'est pas
vide, il y a déjà eu des votes avant son arrivé). En l'occurence si
les votes pour la résolution 1 n'ont pas débuté, il pourra être permis
d'enregister le vote du COPROPRIETAIRE5 pour la RESOLUTION1 en
premièrement entrant manuellement PRESENT à la place de ABSENT en P8
et POUR ou CONTRE etc. en Q8.
============================
Ce qui précède, c'est du chinois pour moi!

| Supposons que le COPROPRIETAIRE5 arrive en retard à l'AG
***Comment fait-on pour le savoir dans ton application. Où c'est écrit dans
ton application ? l'adresse de la cellule ?

| Je rentre COPROPRIETAIRE5 en L8. Il apparait comme "PRESENT" sur la
| feuille d'Emmargement en N8. Il faudrait que grâce à une macro Private
| Sub Worksheet_Change "PRESENT" s'inscrive également en S4, V4, Y4,
| AB4, ..., QU4,.mais qu'en revanche P4 reste "ABSENT" parce qu'il
| n'était pas là pour voter la RESOLUTION1.

***Du Chinois au carré !

Ce que ton application représente ce n'est pas mes oignons...
Ce que ça prend pour programmer ce sont des conditions bien définies
et compréhensibles et en langage Excel cela s'exprime par des valeurs
que peuvent prendre diverses cellules.

Je laisse à d'autres le soin de déchiffrer tout ça.

Bon travail.


MichD
--------------------------------------------
Christophe
Le #23325021
Bonjour,

Merci d'avoir essayé une fois encore. J'ai pourtant autant que
possible essayé d'être explicite. Il me semble notamment avoir
clairement indiqué les adresses des cellules excel et leurs valeurs.
Dommage.

æ„Ÿè°¢æ‚¨å¯¹æˆ‘çš„æ±‰è¯­æ °´å¹³çš„问候。

Christophe


On May 1, 12:56 pm, "MichD"
======================== =====
Maintenant lsupposons que le COPROPRIETAIRE5 arrive en retard à l'AG .
Je rentre COPROPRIETAIRE5 en L8.  Il apparait comme "PRESENT" sur la
feuille d'Emmargement en N8. Il faudrait que grâce à une macro Private
Sub Worksheet_Change "PRESENT" s'inscrive également en S4, V4, Y4,
AB4, ..., QU4,.mais qu'en revanche P4 reste "ABSENT" parce qu'il
n'était pas là pour voter la RESOLUTION1. (la plage (Q4:Q34] n' est pas
vide, il y a déjà eu des votes avant son arrivé).  En l'occurence si
les votes pour la résolution 1 n'ont pas débuté, il pourra être permis
d'enregister le vote du COPROPRIETAIRE5 pour la RESOLUTION1 en
premièrement entrant manuellement PRESENT à la place de ABSENT en P8
et POUR ou CONTRE etc. en Q8.
======================== =====

Ce qui précède, c'est du chinois pour moi!

| Supposons que le COPROPRIETAIRE5 arrive en retard à l'AG
***Comment fait-on pour le savoir dans ton application. Où c'est à ©crit dans
      ton application ? l'adresse de la cellule ?

| Je rentre COPROPRIETAIRE5 en L8.  Il apparait comme "PRESENT" sur la
| feuille d'Emmargement en N8. Il faudrait que grâce à une macr o Private
| Sub Worksheet_Change "PRESENT" s'inscrive également en S4, V4, Y4,
| AB4, ..., QU4,.mais qu'en revanche P4 reste "ABSENT" parce qu'il
| n'était pas là pour voter la RESOLUTION1.

***Du Chinois au carré !

Ce que ton application représente ce n'est pas mes oignons...
Ce que ça prend pour programmer ce sont des conditions bien déf inies
et compréhensibles et en langage Excel cela s'exprime par des valeur s
que peuvent prendre diverses cellules.

Je laisse à d'autres le soin de déchiffrer tout ça.

Bon travail.

MichD
--------------------------------------------
Christophe
Le #23325311
Bonjour:

La Macro ci-dessous légèrement modifiée fonctionne sauf que ce n'est
pas les valeurs des cellules dans le Range ("L4:L34") qui sont à
copier mais celles du Range ("N4:N34")
donc a priori à la place de
Set Rg = Intersect(Range("L4:L34"), Target)
il faudrait
Set Rg = Intersect(Range("N4:N34"), Target)
mais ca ne fonctionne pas car chaque valeur des cellules du Range
("N4:N34") est le résultat d'une formule dépendant de la valeur saisie
dans la cellule correspondante dans le Range ("L4:L34").

Est ce que la fonction Worksheet_Change fonctionne lorsque la
modification de la valeur de la cellule est le résultat d'une formule
et non pas d'une entrée directe?


Private Sub Worksheet_Change(ByVal Target As Range)
Dim Rg As Range, C As Range, X As Long
Set Rg = Intersect(Range("L4:L34"), Target)
If Not Rg Is Nothing Then
Application.EnableEvents = False
For Each C In Rg
X = C.Row
If Application.WorksheetFunction.CountA(Range("Q4:Q34")) = 0
Then
Range("P" & X) = C.Value
Else
Range("P" & X) = ""
End If
If Application.WorksheetFunction.CountA(Range("T4:T34")) = 0
Then
Range("S" & X) = C.Value
Else
Range("S" & X) = ""
End If
If Application.WorksheetFunction.CountA(Range("W4:W34")) = 0
Then
Range("V" & X) = C.Value
Else
Range("V" & X) = ""
End If
If Application.WorksheetFunction.CountA(Range("X4:X34")) = 0
Then
Range("Y" & X) = C.Value
Else
Range("Y" & X) = ""
End If
If Application.WorksheetFunction.CountA(Range("AA4:AA34")) = 0
Then
Range("AB4" & X) = C.Value
Else
Range("AB4" & X) = ""
End If
Next
Application.EnableEvents = True
End If
End Sub


Merci d'avance.

Christophe
Modeste
Le #23325571
Bonsour®

"Christophe" a écrit

感谢您对我的汉语水平的问候。




بالنسبة لي الصينى الخاص إلى العبرية

http://gadgetwe.com/fr/2010/language-translator-windows-gadget/
Jacquouille
Le #23326761
... On n'est jamais trop aidé -))

Jadis, au début de mes brèves études, j'avais un prof qui me disait qu'un
problème insurmontable, s'il était bien énoncé, était à moitié résolu.
Au nom de cette vertu, je demande donc au monde entier et au reste de
l'Univers, de bien formuler sa question, afin de ne point trop jouer avec le
nerf du répondeur dont la boule de cristal s'use à une vitesse V '



Jacquouille

" Le vin est au repas ce que le parfum est à la femme."
"Modeste" a écrit dans le message de groupe de discussion :
4dbdb33c$0$6012$

Bonsour®

"Christophe" a écrit

感谢您对我的汉语水平的问候。




بالنسبة لي الصينى الخاص إلى العبرية

http://gadgetwe.com/fr/2010/language-translator-windows-gadget/
MichD
Le #23327301
Tu modifies seulement ceci dans la macro :

Tu conserves : Set Rg = Intersect(Range("L4:L34"), Target)
Tu remplaces dans toutes les occurrences de la procédure :
C.value par C.Offset(, 2).Value


MichD
--------------------------------------------
Christophe
Le #23327291
Bonjour:

J'ai pris mon dictionnaire Chinois-Français / Français-Chinois et ai
enfin réussi à modifier la macro de MichD (voir ci-dessous) pour
obtenir le résultat que je recherchais.

Il me reste un problème à résoudre. La macro est écrite pour les
colonnes P, S, V, X, AB
je dois le faire jusqu'à la colonne QU.

Comment réecrire la macro en utilisant une notion du genre For i = 16
To 465 Step 3 ?

Merci.

Christophe

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Rg As Range, C As Range, X As Long
Set Rg = Intersect(Range("L4:L34"), Target)
If Not Rg Is Nothing Then
Application.EnableEvents = False
For Each C In Rg
X = C.Row
If Application.WorksheetFunction.CountA(Range("Q4:Q34")) = 0
Then
Range("P" & X) = C.Offset(0, 2).Value
Else
Range("P" & X) = ""
End If
If Application.WorksheetFunction.CountA(Range("T4:T34")) = 0
Then
Range("S" & X) = C.Offset(0, 2).Value
Else
Range("S" & X) = ""
End If
If Application.WorksheetFunction.CountA(Range("W4:W34")) = 0
Then
Range("V" & X) = C.Offset(0, 2).Value
Else
Range("V" & X) = ""
End If
If Application.WorksheetFunction.CountA(Range("X4:X34")) = 0
Then
Range("Y" & X) = C.Offset(0, 2).Value
Else
Range("Y" & X) = ""
End If
If Application.WorksheetFunction.CountA(Range("AA4:AA34")) = 0
Then
Range("AB" & X) = C.Offset(0, 2).Value
Else
Range("AB" & X) = ""
End If
Next
Application.EnableEvents = True
End If
End Sub
Publicité
Poster une réponse
Anonyme