Rajout dans une macro ?

loulou -  
Gord21 Messages postés 928 Statut Membre -
Bonjour,
voilà mon problème :
j'ai une application déjà bien finalisée, mais il me manque un petit quelque chose que j'arrive pas à mettre.
j'ai une colonne de A2: A41 avec le rang occupé par les noms
une colonne en B:B41 avec les noms sous forme de liste
une zone combinée qui me permet de sélectionner un nom qui apparait en E17 (pour m'assurer que je ne me suis pas trompé)
ET................une colonne de S2:S41 dans laquelle je voudrais incrémenter +1 à chaque fois que je sélectionne un nom
par ex qd pierre est sélectionné il y aurait 1
si je le sélectionne une 2e fois, il y aurait 2..............;toujours dans la colonne S2:S41, mais au nouveau rang qui est le sien (il apparait dans la cellule E14)

les noms ne gardent pas toujours leur même place; ils évoluent !
voiçi le code que j'ai écrit, mais où puisje mettre le code pour cette incrémentation et comment l'écrire ,


Style = vbOKCancel + vbDefaultButton1
Msg = "Vous allez actualiser le classement de : " & Range("E17")
Title = "Attention ne cliquez qu'une seule fois !"
Réponse = MsgBox(Msg, Style, Title)
If Réponse = vbCancel Then
End
End If
If Réponse = vbOK Then
End If
For Each cell In Range("B2:B41")
If cell.Value = Range("E17") Then
cell.Select
ActiveCell.Offset(0, 1).Select
ActiveCell = Range("E16")
End If
Next
Range("G11").Select
End Sub

mon code fonctionne très bien autrement

merci merci de l'aide
A voir également:

2 réponses

Gord21 Messages postés 928 Statut Membre 289
 
Bonsoir,

Une première une remarque, tu peux remplacer :
cell.Select 
ActiveCell.Offset(0, 1).Select 
ActiveCell = Range("E16") 

par :
cell.Offset(0, 1).Value = Range("E16") .Value

(le Value est optionnel mais plus explicit)

Ce qui donne dans ton cas :
For Each cell In Range("B2:B41") 
   If cell.Value = Range("E17") Then 
      cell.Offset(0, 1).Value = Range("E16") .Value
      Range("S"& cell.Row).Value=Range("S"& cell.Row).Value+1
   End If 
Next


@+
0
loulou
 
Bonsoir,
tout d'abord merci d'avoir répondu
ensuite j'essaye et je te tiens au courant !
c'est idiot mais je bloquais la dessus
je te donne la réponse demain

a+
0
loulou
 
re bonsoir

tout fonctionne parfaitement!
maintenant un autre problème : je voudrais classer par ordre croissant les colonnes B,C ET Q (à la place de S).
la 1ère clé est la colonne C
j'ai écrit le code mais je n'arrive pas ) placer le tri (en même temps) des 3 colonnes

Style = vbOKCancel + vbExclamation
Msg = "Vous allez reclasser tout le groupe ! avez-vous bien actualisé les classements de " & Range("E19")
Title = "Attention !"
Réponse = MsgBox(Msg, Style, Title)
If Réponse = vbCancel Then
End
End If
If Réponse = vbOK Then
End If
Range("B2:C37").Select
Selection.Sort Key1:=Range("C2"), Order1:=xlDescending, Key2:=Range("B2") _
, Order2:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:= _
False, Orientation:=xlTopToBottom
Range("E14").Select
ActiveCell.FormulaR1C1 = "40"
Range("I14").Select
ActiveCell.FormulaR1C1 = "40"
Range("I15").Select
Range("G11").Select
End Sub

peux tu m'aider encore sur ce point ? Merci
0
loulou
 
j'ai essayé de changer le code pour effectuer le tri de la colonne Q comme pour les colonnes B et C, mais ça bloque encore.
peux-tu me donner un coup de main, STP

Style = vbOKCancel + vbExclamation
Msg = "Vous allez reclasser tout le groupe ! avez-vous bien actualisé les classements de " & Range("E19")
Title = "Attention !"
Réponse = MsgBox(Msg, Style, Title)
If Réponse = vbCancel Then
End
End If
If Réponse = vbOK Then
End If
Range("B2:C37,Q2:Q37").Select
Selection.Sort Key1:=Range("C2"), Order1:=xlDescending, Key2:=Range("B2") _
, Order2:=xlAscending, Key3:=Range("Q2"), Order3:=xlAscending, _
Header:=xlGuess, OrderCustom:=1, MatchCase:=
False, Orientation:=xlTopToBottom
Range("E14").Select
ActiveCell.FormulaR1C1 = "40"
Range("I14").Select
ActiveCell.FormulaR1C1 = "40"
Range("I15").Select
Range("G11").Select
End Sub

ça bloque au niveau de selection.sort................jusqu'à xltopbottom
je ne comprends pas pourquoi ?
merci d'avance
0
Gord21 Messages postés 928 Statut Membre 289 > loulou
 
Bonjour,
Tu ne peux pas trier des plages séparées. Il faudrait trier les colonnes B à Q en même temps.
Pour contourner ce problème, tu peux recopier les valeurs des colonnes B, C et Q dans un onglet temporaire puis faire le tri et ramener les valeurs triées dans l'onglet d'origine.

Si tu n'y arrives pas, dis le moi, je n'ai pas le temps maintenant mais je pourrais t'écrire le code plus tard.
@+
0
loulou > Gord21 Messages postés 928 Statut Membre
 
Bonjour,
OK je veux bien merci
mais le fait de recopier dans un onglet, puis recopier encore.............ça ne me tente pas trop
il faut voir ce que tu me proposes.
merci en tout cas de l'aide, j'attends ta réponse

@+
0
Gord21 Messages postés 928 Statut Membre 289
 
Bonsoir,
J'avais pensé à quelque chose comme ça :
Sub Trier()
'
Dim Style, Msg, Title
Dim Reponse
Dim cellule As Range
Dim F_source As Worksheet
Dim F_Temp As Worksheet
'
Set F_source = ActiveSheet
Style = vbOKCancel + vbExclamation
Msg = "Vous allez reclasser tout le groupe ! avez-vous bien actualisé les classements de " & Range("E19")
Title = "Attention !"
Reponse = MsgBox(Msg, Style, Title)
'
If Reponse = vbCancel Then
   End
End If
'
If Reponse = vbOK Then
End If
'
' Création d'une feuille temporaire
Set F_Temp = Sheets.Add
'
' Copie des valeurs
F_source.Range("B2:C37").Copy
F_Temp.Range("A1").PasteSpecial _
   Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
F_source.Range("Q2:Q37").Copy
F_Temp.Range("C1").PasteSpecial _
   Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
'
' Tri des données
F_Temp.Range("A1").CurrentRegion.Sort _
   Key1:=Range("B1"), Order1:=xlDescending, _
   Key2:=Range("A1"), Order2:=xlAscending, _
   Key3:=Range("C1"), Order3:=xlAscending, _
   Header:=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
'
' Remise en place des valeurs
F_Temp.Range("A1:B36").Copy
F_source.Range("B2").PasteSpecial _
   Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
F_Temp.Range("C1:C36").Copy
F_source.Range("Q2").PasteSpecial _
   Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
'
' Effacement de la feuille temporaire
Application.DisplayAlerts = False
F_Temp.Delete
Application.DisplayAlerts = True
'
F_source.Activate
Range("E14").Select
ActiveCell.FormulaR1C1 = "40"
Range("I14").Select
ActiveCell.FormulaR1C1 = "40"
Range("I15").Select
Range("G11").Select
'
End Sub
0
loulou
 
Bonjour,

OK j'essaye et je te remercie de l'aide apportée
@+
0
loulou > loulou
 
Ok ça marche en changeant quelques petites choses pour adapter à mon travail

merci pour tout
0
Gord21 Messages postés 928 Statut Membre 289 > loulou
 
De rien, n'hésite pas.
0