Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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
 
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…