pb vba pour decrementer

S

scorp82

Guest
Boujour à tous
Alors voila mon ptit programme et j'ai un ptit souci car je n'arrive pas à decrementer une valeur en VBA :

Sub essai()
Application.ScreenUpdating = False
Range('I14').Copy
Sheets('Classement').Select
Range('C36').End(xlUp).Offset(1, 0).Select
selection.PasteSpecial Paste:=xlValues
Sheets('Journée').Select
Range('L14').Copy
Sheets('Classement').Select
Range('F36').End(xlUp).Offset(1, 0).Select
selection.PasteSpecial Paste:=xlValues
Sheets('Journée').Select
Range('O14').Copy
Sheets('Classement').Select
Range('I36').End(xlUp).Offset(1, 0).Select
selection.PasteSpecial Paste:=xlValues
Range('M37').End(xlUp).Offset(1, 0).Select
ActiveCell.FormulaR1C1 = _
'=IF(R[26]C[-10]=MAX(R[26]C[-10],R[26]C[-7],R[26]C[-4]),''1'',''-'')'
Range('N37').End(xlUp).Offset(1, 0).Select
ActiveCell.FormulaR1C1 = _
'=IF(R[26]C[-8]=MAX(R[26]C[-8],R[26]C[-5],R[26]C[-11]),''2'',''-'')'
Range('O37').End(xlUp).Offset(1, 0).Select
ActiveCell.FormulaR1C1 = _
'=IF(R[26]C[-6]=MAX(R[26]C[-6],R[26]C[-9],R[26]C[-12]),''3'',''-'')'
Application.ScreenUpdating = True
End Sub

Alors mon souci,c'est que les 26 (en gras plus) doivent passer à 25 lorsqu'on appui sur un bouton puis à 24,etc . . .Je pensais mettre une variable mais je comprend pas trop comment ca fonctionne.J'espere avoir ete clair.
Merci d'avance
 
S

scorp82

Guest
Bonjour le forum & bonjour Robert et merci pour ton aide,j'ai bien été voir ton lien,mais je debute et c'est pas très parlant pour moi :eek:
En fait je pense avoir compris le fonctionnement mais ca marche pas et je vois pas trop pourquoi?

Sub essai()
Dim a As Byte
a = 26

Application.ScreenUpdating = False
Range('I14').Copy
Sheets('Classement').Select
Range('C36').End(xlUp).Offset(1, 0).Select
selection.PasteSpecial Paste:=xlValues
Sheets('Journée').Select
Range('L14').Copy
Sheets('Classement').Select
Range('F36').End(xlUp).Offset(1, 0).Select
selection.PasteSpecial Paste:=xlValues
Sheets('Journée').Select
Range('O14').Copy
Sheets('Classement').Select
Range('I36').End(xlUp).Offset(1, 0).Select
selection.PasteSpecial Paste:=xlValues
Range('M37').End(xlUp).Offset(1, 0).Select
ActiveCell.FormulaR1C1 = _
'=IF(R[&a&]C[-10]=MAX(R[&a&]C[-10],R[&a&]C[-7],R[&a&]C[-4]),''1'',''-'')'
Range('N37').End(xlUp).Offset(1, 0).Select
ActiveCell.FormulaR1C1 = _
'=IF(R[&a&]C[-8]=MAX(R[&a&]C[-8],R[&a&]C[-5],R[&a&]C[-11]),''2'',''-'')'
Range('O37').End(xlUp).Offset(1, 0).Select
ActiveCell.FormulaR1C1 = _
'=IF(R[&a&]C[-6]=MAX(R[&a&]C[-6],R[&a&]C[-9],R[&a&]C[-12]),''3'',''-'')'
a = a - 1
Application.ScreenUpdating = True
End Sub

Donc j'ai rajouter tous se qui est en gras avec la variable sous la forme &a&.A mon avis je dois faire une erreur mais je vois pas ou?
Merci pour votre aide
 

adebrux

XLDnaute Occasionnel
Salut Scrop82,

Si j'ai bien compris, la décrémentation doit se faire à chaque clique sur un bouton...

Le probleme, c'est que j'ai du mal à saisir ce que tu cherche réellement à faire avec ton programme...

Il y a une autre solution, c'est une jolie petite boucle!!

Code:
for a = 26 to 1 step -1
Range('M37').End(xlUp).Offset(1, 0).Select
ActiveCell.FormulaR1C1 = _
'=IF(R[&a&]C[-10]=MAX(R[&a&]C[-10],R[&a&]C[-7],R[&a&]C[-4]),''1'',''-'')'
Range('N37').End(xlUp).Offset(1, 0).Select
ActiveCell.FormulaR1C1 = _
'=IF(R[&a&]C[-8]=MAX(R[&a&]C[-8],R[&a&]C[-5],R[&a&]C[-11]),''2'',''-'')'
Range('O37').End(xlUp).Offset(1, 0).Select
ActiveCell.FormulaR1C1 = _
'=IF(R[&a&]C[-6]=MAX(R[&a&]C[-6],R[&a&]C[-9],R[&a&]C[-12]),''3'',''-'')'
next a

Maisdans ce cas là, c pas coordoné à l'action sur un bouton

Peut être que si tu fournissait un fichier se serait plus simple
 
B

babelle

Guest
Bonjour,

ça marche pas car tu as oublié les guillemets :

Sub essai()
Dim a As Byte
a = 26
Application.ScreenUpdating = False
Range('I14').Copy
Sheets('Classement').Select
Range('C36').End(xlUp).Offset(1, 0).Select
selection.PasteSpecial Paste:=xlValues
Sheets('Journée').Select
Range('L14').Copy
Sheets('Classement').Select
Range('F36').End(xlUp).Offset(1, 0).Select
selection.PasteSpecial Paste:=xlValues
Sheets('Journée').Select
Range('O14').Copy
Sheets('Classement').Select
Range('I36').End(xlUp).Offset(1, 0).Select
selection.PasteSpecial Paste:=xlValues
Range('M37').End(xlUp).Offset(1, 0).Select
ActiveCell.FormulaR1C1 = _
'=IF(R[' & a & ']C[-10]=MAX(R[&a&]C[-10],R[&a&]C[-7],R[&a&]C[-4]),''1'',''-'')'
Range('N37').End(xlUp).Offset(1, 0).Select
ActiveCell.FormulaR1C1 = _
'=IF(R[' & a & ']C[-8]=MAX(R[&a&]C[-8],R[&a&]C[-5],R[&a&]C[-11]),''2'',''-'')'
Range('O37').End(xlUp).Offset(1, 0).Select
ActiveCell.FormulaR1C1 = _
'=IF(R[' & a & ']C[-6]=MAX(R[&a&]C[-6],R[&a&]C[-9],R[&a&]C[-12]),''3'',''-'')'
a = a - 1
Application.ScreenUpdating = True
End Sub


Voilà,

Bon courage,

Babelle
 
S

scorp82

Guest
Rebonjour et merci à babelle & adebrux & Robert mais vos solutions ne fonctionnent pas.Je vais joindre mon fichier pour vous aidez car j'ai essayé pas mal de choses mais sans succés et comme je maitrise pas trop le VBA :(
Merci de votre aide [file name=essai_20051103123304.zip size=32650]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/essai_20051103123304.zip[/file]
 

Pièces jointes

  • essai_20051103123304.zip
    31.9 KB · Affichages: 34

Robert

XLDnaute Barbatruc
Repose en paix
Bonjour Scorp, Babelle, Adebrux, boujour le forum,

En pièce jointe to fichier modifié. Tu avais corrigé sur une macro mais pas dans l'autre.

[file name=essai2_20051103172130.zip size=32665]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/essai2_20051103172130.zip[/file]
 

Pièces jointes

  • essai2_20051103172130.zip
    31.9 KB · Affichages: 44

Robert

XLDnaute Barbatruc
Repose en paix
Bonsoir le fil, bonsoir le forum,

Vraiment désolé Scorp mais je ne comprends absolument rien à ce que tu veux faire. Pourquoi la boucle ? Le code tel qu'il est fonctionne parfaitement mais j'ai l'impression que ce n'est pas cela que tu voudrais qu'il exécute et là c'est difficile de savoir ce que tu veux à ta place. Même avec tes explications je m'y perds. Désolé...
 
S

scorp82

Guest
bonjour à tous
Dsl de ne pas avoir ete clair mais je sais pas trop expliqué car c'est pas tres simple.Je vais essayer d'etre un peu + clair.
Donc ca c'est la premiere partie qui fonctionne tres bien donc y a pas à y toucher:
Sub essai()
Application.ScreenUpdating = False
Range('I14').Copy
Sheets('Classement').Select
Range('C36').End(xlUp).Offset(1, 0).Select
selection.PasteSpecial Paste:=xlValues
Sheets('Journée').Select
Range('L14').Copy
Sheets('Classement').Select
Range('F36').End(xlUp).Offset(1, 0).Select
selection.PasteSpecial Paste:=xlValues
Sheets('Journée').Select
Range('O14').Copy
Sheets('Classement').Select
Range('I36').End(xlUp).Offset(1, 0).Select
selection.PasteSpecial Paste:=xlValues


Et donc voila ou ca se corse:en fait je voudrais appliquer cette formule =SI(D5=MAX(D5;G5;J5);'1';'-') sur 3 colonnes lorsque j'appui sur le bouton.Ensuite quand je rappui dessus,il faudrait que la formule se remette mais sur les lignes du dessous.
J'espere avoir ete plus clair cette fois ci.
Et merci pour votre aide
 
S

scorp82

Guest
re
Donc voila la seconde partie qui me pose probleme:

Range('M37').End(xlUp).Offset(1, 0).Select
ActiveCell.FormulaR1C1 = _
'=IF(R[25]C[-10]=MAX(R[25]C[-10],R[25]C[-7],R[25]C[-4]),''FANF'',''-'')'
Range('N37').End(xlUp).Offset(1, 0).Select
ActiveCell.FormulaR1C1 = _
'=IF(R[25]C[-8]=MAX(R[25]C[-8],R[25]C[-5],R[25]C[-11]),''BIDYBREAK'',''-'')'
Range('O37').End(xlUp).Offset(1, 0).Select
ActiveCell.FormulaR1C1 = _
'=IF(R[25]C[-6]=MAX(R[25]C[-6],R[25]C[-9],R[25]C[-12]),''L'ANGLAIS'',''-'')'
Application.ScreenUpdating = True
End Sub

Donc j'ai remarqué que lorsque je vais changer de ligne il n'y a que les R[25] qui vont changer et devenir R[24] puis apres un autre appui va devenir R[23],etc . . .
Donc je sais pas trop comment faire,mettre une variable(du type R[a] )?Donc à chaque appui,il faudrait que la valeur diminue,donc si quelqu'un pouvait me donner un coup de main.
Merci par avance
 

Robert

XLDnaute Barbatruc
Repose en paix
Bonjour Scrop, bonjour le forum,

Je pense avoir enfin compris... Essaie cette macro :


Public Sub copcol()
Dim Jo As Worksheet 'déclare la variable Jo
Dim Cl As Worksheet 'déclare la variable Cl
Dim li As Integer 'déclare la variable li

Set Jo = Sheets('journée') 'définit la variable Jo
Set Cl = Sheets('Classement') 'définit la variable Cl
li = Cl.Range('C37').End(xlUp).Offset(1, 0).Row 'définit la variable li

Cl.Range('C' & li).Value = Jo.Range('I14').Value 'Total 1
Cl.Range('F' & li).Value = Jo.Range('L14').Value 'Total 2
Cl.Range('I' & li).Value = Jo.Range('O14').Value 'total 3

Cl.Range('M' & li).Formula = '=IF(C37=MAX(C37,F37,I37),''FANF'',''-'')' 'formule colonne M
Cl.Range('N' & li).Formula = '=IF(F37=MAX(C37,F37,I37),''BIDYBREAK'',''-'')' 'formule colonne N
Cl.Range('O' & li).Formula = '=IF(I37=MAX(C37,F37,I37),''L'ANGLAIS'',''-'')' 'formule colonne O

End Sub
 
S

scorp82

Guest
bonjour robert bonjour le forum
Merci beaucoup Robert, c'est exactement ca que je voulais, mais il a toujours un ptit probleme(je suis chiant),c'est qu'il ne garde pas l'historique. Je m'explique si à J14 Bidybreak est leader et qu'a J15 L'anglais est leader, alors il va remettre à J14 L'Anglais en leader,alors qu'en théorie c'etait Bidybreak.J'espere avoir été assez clair.
Et merci beaucoup pour votre et merci d'avance.
 

Robert

XLDnaute Barbatruc
Repose en paix
Bonjour Scorp, bonjour le forum,

Mais non Scorp tu n'est pas chiant du tout... Juste un peu casse cou... Loule.

Le problème c'est que tu es en plein dans ton délire où tout est clair mais, encore une fois, malgré tes explications, je ne comprends pas ce que tu veux dire. Essaye de penser les choses pour quelqu'un complètement externe à ton projet, une grosse buse inculte comme moi et là peut-être, j'arriverai à comprender ce que tu veux.
 
S

scorp82

Guest
Bonjour le forum,bonjour Robert
Donc je vais te montrer par images ce que je voudrais,ca sera peut etre plus simple:

Donc ca c'est ce que je voudrais,les points jaunes correspondent au resultats logiques et montrent la correspondance entre les resultats des leaders.

Et voila donc le resultat avec ton programme:

Donc comme je te l'expliquais dans le message precedent,ton programme ne garde pas l'historique,si l'on regarde les 3 derniers leaders on devrait avoir L'ANGLAIS puis FANF puis L'ANGLAIS,mais dans ton programme on retrouve L'ANGLAIS 3 fois leader sur les 3 dernieres journée alors qu'en réalité,il ne l'a ete que deux fois.J'espere que c'est plus clair cette fois ci,mais c'est pas tres evident à expliquer.
Si tu ne vois pas trop les images voila les deux liens:
 

Discussions similaires

Statistiques des forums

Discussions
312 963
Messages
2 093 998
Membres
105 906
dernier inscrit
aifa