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
Configuration: Windows Vista / Firefox 3.5.8

2 réponses

  1. 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
    1. 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
    2. 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
    3. 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
      1. 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
      2. 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
  2. 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
    1. loulou
       
      Bonjour,

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

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