OVH Cloud OVH Cloud

Recopie de formule

33 réponses
Avatar
albert
Bonjour

Dans la feuil1 la liste des 650 membres par ordre alphabétique et dans la
colonne BZ la formule qui somme leur présences aux activités.
(=somme(C3:BX3)
Lorsqu'on supprime un membre (une ligne), Excel ré-ajuste automatiquement
les formules de la colonne BZ. Aucun problème.
Lorsqu'on ajoute un membre (ajouter une ligne) la ligne insérée ne contient
pas la formule dans la colonne BZ, quand il a plusieurs ajouts, on utilise
la poignée de la cellule BZ3 t on la tire jusqu'au dernier membre (environ
650 variable) pour mettre à jour.

Y a t'il une commande qui pourrait faire ça.

Merci de vos suggestions

--
albertri-at-videotron.ca.invalid

10 réponses

1 2 3 4
Avatar
Gloops
albert a écrit, le 06/11/2011 22:29 :
Rebonjour

"albert" a écrit dans le message de groupe de discussion :
j96pr5$op0$

Ma macro fonctionne bien tant qu'on n'ajoute/supprime des membres, mais
la macro repart toujours de BK641
et non pas sur la dernière ligne des membres
comment rendre 641 variable
Albert



Quelque chose comme
ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row

Étant entendu que Rows s'adresse à ActiveSheet (pris par commodité pour
une certaine feuille), mais qu'on peut gagner à partir de
ActiveSheet.UsedRange (encore que ... dans le cas de End(xlUp), la
différence ne sera peut-être pas criante).

Il peut parfois être intéressant de faire la remontée dans une autr e
colonne (en changeant le deuxième argument de Cells), si il n'y a rien
dans la dernière ligne de la première colonne.
Avatar
albert
Bonjour
Merci pour l'offre
"Jacky" a écrit dans le message de groupe de discussion :
j98da5$hfa$

Selon le but recherché, cela peut être automatisé
Si tu le souhaites, un brouillon du classeur avec les résultats souhaités
sur
http://www.cijoint.fr

J'ai déposé un fichier réduit à 22 rencontres et 23 membres sur Cijoint
http://www.cijoint.fr/cjlink.php?file=cj201111/cijI5RrJ6j.xlsm

Je ne suis pas celui qui gère les présences, je ne suis que celui qui a
développé le logiciel pour aider à la compilation de la liste papier.
Ensuite avec l'aide de Charabeuh, en 2008, vers une procédure automatisée
sans liste papier, qui fonctionne bien.

Au début de chaque saison (septembre à mai) il faut faire un nouveau
calendrier, lignes 1 et 2. Et mettre à jour la liste des membres.
Nous avons eu des problèmes cette année, avec les insertions les formules
n'ont pas été mises à jours et il y eu discordances dans les diverses
sources de données.

Je voulais juste faire une macro pour mettre à jour les formules de la
colonne AB et de la ligne 36 du fichier exemple réduit.

Je suis un peu effrayé d'utiliser "Private Sub Worksheet_Change" car les
personnes gérant la liste ont peu de connaissance informatique, et en mon
absence ne saurait quoi faire.

Private Sub Worksheet_Change fonctionne bien, mais lors de la réduction du
fichier, j'ai dû faire une erreur la formule dans AB23, car pour la corriger
il a fallu le désactiver.

Merci

--
albertri-at-videotron.ca.invalid
Avatar
albert
Merci Gloops

je garde ceci en mémoire
regarde le fichier exemple sur
http://www.cijoint.fr/cjlink.php?file=cj201111/cijI5RrJ6j.xlsm

Albert

"Gloops" a écrit dans le message de groupe de discussion :
j98ioe$d7$

albert a écrit, le 06/11/2011 22:29 :
Rebonjour

"albert" a écrit dans le message de groupe de discussion :
j96pr5$op0$

Ma macro fonctionne bien tant qu'on n'ajoute/supprime des membres, mais
la macro repart toujours de BK641
et non pas sur la dernière ligne des membres
comment rendre 641 variable
Albert



Quelque chose comme
ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row

Étant entendu que Rows s'adresse à ActiveSheet (pris par commodité pour
une certaine feuille), mais qu'on peut gagner à partir de
ActiveSheet.UsedRange (encore que ... dans le cas de End(xlUp), la
différence ne sera peut-être pas criante).

Il peut parfois être intéressant de faire la remontée dans une autre
colonne (en changeant le deuxième argument de Cells), si il n'y a rien
dans la dernière ligne de la première colonne.
Avatar
albert
Rebonjour
"albert" a écrit dans le message de groupe de discussion :
j9915g$8qv$

J'ai déposé un fichier réduit à 22 rencontres et 23 membres sur Cijoint
http://www.cijoint.fr/cjlink.php?file=cj201111/cijI5RrJ6j.xlsm

Je suis un peu effrayé d'utiliser "Private Sub Worksheet_Change" car les
personnes gérant la liste ont peu de connaissances informatiques, et j'ai eu
moi-même de la difficulté à faire les corrections requises après la
réduction
du fichier, il m'a fallu désactiver la macro, la formule dans AB36 est
devenue la recopie de AA36.
----------------------------------------------------------
Ce que j'ai essayé de faire avec le générateur de macro est décrit ici.
Dans le fichier courant il y a plus de 600 membres et 59 rencontres cette
année.

1- Trouver le nombre de lignes de la plage Membres B3 XLdown à B? ,
trouver la valeur de (row.count ??), il y a toujours des cellules vides
entre le dernier membre et Visiteurs.

2- trouver la colonne avec les formules sous la cellule "Total" en partant
de la ligne 3 et recopier jusqu'à (row.count), =somme(C3: Colonne(Total-1),
=somme(C4:Colonne(Total-1), jusqu'à la cellule = à Row.count

3- trouver la ligne dans la colonne "B" contenant le mot "Rencontres" et
recopier ou générer les formules de la colonne "C" à la colonne Total - 1,
donc =sommeC3;C(row.count), =somme(D3;D(row.count), etc..

Je vous remercie de votre attention.

--
albertri-at-videotron.ca.invalid
Avatar
Jacky
RE...
A la vue de la structure de ton classeur et afin de ne pas compliquer inutilement les calculs en cours et ceux
à venir, il serait judicieux de séparer les visiteurs des membres sur une autre feuille.
Cela ne parait essentiel, qu'en penses-tu ?
--
Salutations
JJ


"albert" a écrit dans le message de news: j99q8b$eg0$
Rebonjour
"albert" a écrit dans le message de groupe de discussion :
j9915g$8qv$

J'ai déposé un fichier réduit à 22 rencontres et 23 membres sur Cijoint
http://www.cijoint.fr/cjlink.php?file=cj201111/cijI5RrJ6j.xlsm

Je suis un peu effrayé d'utiliser "Private Sub Worksheet_Change" car les
personnes gérant la liste ont peu de connaissances informatiques, et j'ai eu
moi-même de la difficulté à faire les corrections requises après la réduction
du fichier, il m'a fallu désactiver la macro, la formule dans AB36 est devenue la recopie de AA36.
----------------------------------------------------------
Ce que j'ai essayé de faire avec le générateur de macro est décrit ici.
Dans le fichier courant il y a plus de 600 membres et 59 rencontres cette année.

1- Trouver le nombre de lignes de la plage Membres B3 XLdown à B? , trouver la valeur de (row.count ??),
il y a toujours des cellules vides entre le dernier membre et Visiteurs.

2- trouver la colonne avec les formules sous la cellule "Total" en partant
de la ligne 3 et recopier jusqu'à (row.count), =somme(C3: Colonne(Total-1), =somme(C4:Colonne(Total-1),
jusqu'à la cellule = à Row.count

3- trouver la ligne dans la colonne "B" contenant le mot "Rencontres" et recopier ou générer les formules de
la colonne "C" à la colonne Total - 1, donc =sommeC3;C(row.count), =somme(D3;D(row.count), etc..

Je vous remercie de votre attention.

--
albertri-at-videotron.ca.invalid



Avatar
albert
Bonjour
"Jacky" a écrit dans le message de groupe de discussion :
j9b63d$c98$

<RE...
<A la vue de la structure de ton classeur et afin de ne pas compliquer
inutilement les calculs en cours et ceux
<à venir, il serait judicieux de séparer les visiteurs des membres sur une
autre feuille.
<Cela ne parait essentiel, qu'en penses-tu ?

Lors du filtrage, il est important que les visiteurs soient sur la même
feuille.

En voulant rendre simple avec une macro j'ai tout compliqué à vouloir trop
faire.
Je remarque dans l'exemple réduit, que des formules ont été ajoutées dans la
plage AB26:AB35, il n'y en pas dans l'original.

Tout ce que je désirais alors, c'est un moyen d'éviter de tirer la poignée
pour 650 lignes.
Isabelle m'a fourni une partie de la réponse en faisant Ctrl+B sur la plage.

Il me reste à trouver une façon de calculer le nombre de lignes de la plage
AB3:AB? pour qu'elle corresponde à la plage B3:B23 de l'exemple.

Merci

--
albertri-at-videotron.ca.invalid
Avatar
Jacky
Re..
Il me reste à trouver une façon de calculer le nombre de lignes de la plage AB3:AB?


'----------------
Test ceci
'-----------------
Sub jj()
Dim LaColonne As Long, LaLigne As Long
LaLigne = Application.Match("VISITEURS", [b:b], 0) - 2
LaColonne = Application.Match("TOTAL", [2:2], 0)
MsgBox Range(Cells(3, LaColonne), Cells(LaLigne, LaColonne)).Address
MsgBox Application.Sum(Range(Cells(3, LaColonne), Cells(LaLigne, LaColonne)))
'ou
Set plage = Range(Cells(3, LaColonne), Cells(LaLigne, LaColonne))
MsgBox plage.Address
MsgBox Application.Sum(plage)
End Sub
'---------------------
--
Salutations
JJ


"albert" a écrit dans le message de news: j9bfvi$72k$
Bonjour
"Jacky" a écrit dans le message de groupe de discussion : j9b63d$c98$

<RE...
<A la vue de la structure de ton classeur et afin de ne pas compliquer inutilement les calculs en cours et
ceux
<à venir, il serait judicieux de séparer les visiteurs des membres sur une autre feuille.
<Cela ne parait essentiel, qu'en penses-tu ?

Lors du filtrage, il est important que les visiteurs soient sur la même feuille.

En voulant rendre simple avec une macro j'ai tout compliqué à vouloir trop faire.
Je remarque dans l'exemple réduit, que des formules ont été ajoutées dans la plage AB26:AB35, il n'y en pas
dans l'original.

Tout ce que je désirais alors, c'est un moyen d'éviter de tirer la poignée pour 650 lignes.
Isabelle m'a fourni une partie de la réponse en faisant Ctrl+B sur la plage.

Il me reste à trouver une façon de calculer le nombre de lignes de la plage AB3:AB? pour qu'elle corresponde
à la plage B3:B23 de l'exemple.

Merci

--
albertri-at-videotron.ca.invalid

Avatar
albert
Merci Jacky
Je regarde cela immédiatement, mais en attendant j'avais presque résolu le
problème en nommant les plages.
L'ajout/suppression de Lignes/colonnes à l'intérieur de la plage
fonctionnait bien, mais l'ajout au bas de la plage ne fonctionnait pas.
Voici ce que j'ai fait

Sub MJformules()
'
' MJformules Macro
'
' Touche de raccourci du clavier: Ctrl+z
'
Range("A1").Select
Application.Goto Reference:="IndividuTotal"
Selection.FillDown
Application.Goto Reference:="RencontresTotal"
Selection.FillRight
Range("A1").Select
End Sub


J'étudie votre code,


--
albertri-at-videotron.ca.invalid
Avatar
albert
Bonsoir

"Jacky" a écrit dans le message de groupe de discussion :
j9bptm$3cp$
'----------------
Test ceci
'-----------------
J'ai modifié votre "Sub jj()" voir texte ci-bas, tout va à merveille.
Une petite question, j'ai voulu nommer ma version "Sub jj2" mais quand je
faisais Alt+F8 je ne pouvais que récréer JJ2 et cela ouvrait un nouveau
module, je l'ai finalement renommé "Sub Dejj()" sans problème?

'---------------
Sub Dejj()
' Macro pour mettre à jour les formules qui comptabilisent les présences,
' après les ajouts/suppressions de membres.
' Création de base par Jacky de EXCEL 8 novembre 2011 (jar)
Dim LaColonne As Long, LaLigne As Long
LaLigne = Application.Match("VISITEURS", [b:b], 0) - 2
LaColonne = Application.Match("TOTAL", [2:2], 0)
' MsgBox Range(Cells(3, LaColonne), Cells(LaLigne, LaColonne)).Address
' MsgBox Application.Sum(Range(Cells(3, LaColonne), Cells(LaLigne,
LaColonne)))
' Range(Cells(3, LaColonne), Cells(LaLigne, LaColonne)).Select
' Selection.FillDown
' LaLigne = Application.Match("Rencontres", [b:b], 0)
' MsgBox Range(Cells(3, LaColonne), Cells(LaLigne, LaColonne)).Address
' ou
Set Plage = Range(Cells(3, LaColonne), Cells(LaLigne, LaColonne))
Range(Cells(3, LaColonne), Cells(LaLigne, LaColonne)).Select
Selection.FillDown
' MsgBox plage.Address
' MsgBox Application.Sum(plage)
LaLigne = Application.Match("Rencontres", [b:b], 0)
LaColonne = Application.Match("TOTAL", [2:2], 0) - 2
' MsgBox Range(Cells(LaLigne, 2), Cells(LaLigne, LaColonne)).Address
Range(Cells(LaLigne, 2), Cells(LaLigne, LaColonne)).Select
Range(Cells(LaLigne, 3), Cells(LaLigne, LaColonne)).Select
Selection.FillRight
Range("A1").Select
End Sub
'-----------------

Un grand merci


--
albertri-at-videotron.ca.invalid
Avatar
Jacky
Re..
tout va à merveille.


Alors c'est bien ;o))

Cependant, ceci ("select" inutile)
Range(Cells(3, LaColonne), Cells(LaLigne, LaColonne)).Select
Selection.FillDown


peut être remplacé par
Range(Cells(3, LaColonne), Cells(LaLigne, LaColonne)).FillDown
idem pour cette ligne
Range(Cells(LaLigne, 3), Cells(LaLigne, LaColonne)).Select
Selection.FillRight


et ceci est inutile
Range(Cells(LaLigne, 2), Cells(LaLigne, LaColonne)).Select



Je n'éprouve aucune difficulté à renommée une procédure.
néanmoins dans ton classeur exemple, il y a une procédure (test_commentaire()) qui se trouve dans le module de
la feuille.
Bien que cela n'entrave pas son fonctionnement, à la maintenance cela peut induire en erreur.


--
Salutations
JJ


"albert" a écrit dans le message de news: j9ckhr$8au$
Bonsoir

"Jacky" a écrit dans le message de groupe de discussion : j9bptm$3cp$
'----------------
Test ceci
'-----------------
J'ai modifié votre "Sub jj()" voir texte ci-bas, tout va à merveille.
Une petite question, j'ai voulu nommer ma version "Sub jj2" mais quand je faisais Alt+F8 je ne pouvais que
récréer JJ2 et cela ouvrait un nouveau module, je l'ai finalement renommé "Sub Dejj()" sans problème?

'---------------
Sub Dejj()
' Macro pour mettre à jour les formules qui comptabilisent les présences,
' après les ajouts/suppressions de membres.
' Création de base par Jacky de EXCEL 8 novembre 2011 (jar)
Dim LaColonne As Long, LaLigne As Long
LaLigne = Application.Match("VISITEURS", [b:b], 0) - 2
LaColonne = Application.Match("TOTAL", [2:2], 0)
' MsgBox Range(Cells(3, LaColonne), Cells(LaLigne, LaColonne)).Address
' MsgBox Application.Sum(Range(Cells(3, LaColonne), Cells(LaLigne, LaColonne)))
' Range(Cells(3, LaColonne), Cells(LaLigne, LaColonne)).Select
' Selection.FillDown
' LaLigne = Application.Match("Rencontres", [b:b], 0)
' MsgBox Range(Cells(3, LaColonne), Cells(LaLigne, LaColonne)).Address
' ou
Set Plage = Range(Cells(3, LaColonne), Cells(LaLigne, LaColonne))
Range(Cells(3, LaColonne), Cells(LaLigne, LaColonne)).Select
Selection.FillDown
' MsgBox plage.Address
' MsgBox Application.Sum(plage)
LaLigne = Application.Match("Rencontres", [b:b], 0)
LaColonne = Application.Match("TOTAL", [2:2], 0) - 2
' MsgBox Range(Cells(LaLigne, 2), Cells(LaLigne, LaColonne)).Address
Range(Cells(LaLigne, 2), Cells(LaLigne, LaColonne)).Select
Range(Cells(LaLigne, 3), Cells(LaLigne, LaColonne)).Select
Selection.FillRight
Range("A1").Select
End Sub
'-----------------

Un grand merci


--
albertri-at-videotron.ca.invalid
1 2 3 4