XL 2010 (resolu) Créer une private sub

chvalet

XLDnaute Junior
Bonjour

Dans le fichier joint, je souhaiterais dans la feuille listing que
Tant que la colonne A n'est pas vide
et que lorsque je remplis la colonne G d'un nombre (entre 0 et 4),
qu' automatiquement la colonne H se remplisse grâce à la formule suivante =SI(Gx="";"?";SI(Gx=0;"20sec";""))

quelqu'un aurait il une idée pour construire cette private sub dans la feuille listing?

merci
Chvalet
 

Pièces jointes

  • private sub-remplir automatique une cellule-v01.xlsm
    17 KB · Affichages: 20

Staple1600

XLDnaute Barbatruc
Bonjour le fil, le forum

Une solution possible
VB:
Private Sub Worksheet_Change(ByVal T As Range)
If T.Column = 7 Then
T.Offset(, 1) = Application.Rept("20sec", T < 1)
End If
End Sub

NB: Avec ce code, on n'utilise pas les formules existantes dans ton fichier.
Donc supprimer les formules en colonne H avant de tester le code VBA.

EDITION: Une version qui circonscrit la plage de cellules sur laquelle s'applique la sub
VB:
Private Sub Worksheet_Change(ByVal T As Range)
If Not Intersect(T, Range("G3:G42")) Is Nothing Then
T.Offset(, 1) = Application.Rept("20sec", T < 1)
End If
End Sub
 
Dernière édition:

fanfan38

XLDnaute Barbatruc
Bonjour chvalet et le forum
une solution

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
' Macro permettant le calcul de la pénalité mixité
If Target.Column <> 7 Then Exit Sub
If Target.Row < 3 Then Exit Sub
' Cstr pour faire la difference entre 0 et rien
Select Case CStr(Cells(Target.Row, 7).Value)
  Case Is = "0"
    Cells(Target.Row, 8).Value = "20sec"
  Case Is = "1"
  Case Is = "2"
  Case Is = "3"
  Case Is = "4"
  Case Else
    Cells(Target.Row, 8).Value = "?"
End Select
End Sub
A+ François
 

chvalet

XLDnaute Junior
Bonjour à tous

et merci pour vos réponses.
Voici mes tests

Staple1600 reponse 1

Quand je mets 0 = 20s => ok
si je mets "" => 20s au lieu de ? => pas bon
si je mets 1/2/3/4 => "" ok

Staple1600 reponse 2
Quand je mets 0 = 20s => ok
si je mets "" => 20s au lieu de ? => pas bon
si je mets 1/2/3/4 => "" ok


François reponse 1
si je mets un "" = ? => ok
si je mets 0 = 20s = => ok
si je mets 1 2 3 ou 4 ca ne fonctionne pas

encore merci
Chvalet
 

Staple1600

XLDnaute Barbatruc
Re

chvalet
La formule dans ton fichier exemple était
=SI(G3="";"?";SI(G3<1;"20sec";""))

Donc j'ai respecté la condition <1

Quand au ? pour moi, il n'apporte pas grand chose donc, je n'en suis pas occupé
(En effet qu'une cellule contienne ? ou soit vide, l'information renvoyée signifie la même chose : rien)
 

Staple1600

XLDnaute Barbatruc
Re

Et comme ceci, c'est mieux?
VB:
Private Sub Worksheet_Change(ByVal T As Range)
If Not Intersect(T, Range("G3:G42")) Is Nothing Then
T.Offset(, 1) = Application.Rept("?", T = "") & Application.Rept("20sec", T <> "" And T < 1)
End If
End Sub
 

chvalet

XLDnaute Junior
re Bonjour

par rapport à la sub de François, je viens de comprendre le fonctionnement ;)
et je me suis permis de la modifier , il y a certainement plus rapide et plus "propre" que ce que j'ai fait et plus long que celle de JM

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
' Macro permettant le calcul de la pénalité mixité
   If Target.Column <> 7 Then Exit Sub
     If Target.Row < 3 Then Exit Sub
        ' Cstr pour faire la difference entre 0 et rien
       Select Case CStr(Cells(Target.Row, 7).Value)
          Case Is = "0"
            Cells(Target.Row, 8).Value = "20sec"
          Case Is = "1"
            Cells(Target.Row, 8).Value = ""
          Case Is = "2"
             Cells(Target.Row, 8).Value = ""
          Case Is = "3"
            Cells(Target.Row, 8).Value = ""
          Case Is = "4"
           Cells(Target.Row, 8).Value = ""
       Case Else
         Cells(Target.Row, 8).Value = "?"
       End Select
End Sub

encore merci à tous pour votre aide

Chvalet
 

Staple1600

XLDnaute Barbatruc
Re

@chvalet
Puisque tu as compris le code de Francois
Voici une version plus courte de son code que tu devrais aussi comprendre.
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
' Macro permettant le calcul de la pénalité mixité
   If Target.Column <> 7 Then Exit Sub
     If Target.Row < 3 Then Exit Sub
    Select Case Cells(Target.Row, 7)
        Case Is = "": Cells(Target.Row, 8) = "?"
        Case 0: Cells(Target.Row, 8) = "20sec"
        Case 1 To 4: Cells(Target.Row, 8) = ""
    End Select
End Sub
 

Statistiques des forums

Discussions
312 177
Messages
2 085 972
Membres
103 073
dernier inscrit
MSCHOE16