Une petite macro ...

Résolu
Bonjour,

En cherchant sur le forum, j'essaye de construire un peu de VBA pour mon fichier excel.
Je vous explique mon problème :
Lorsque la valeur d'une cellule de la colonne B est égale à "NEW" alors on ecrit dans la meme ligne mais à la colonne K la formule SI(NBCAR(Jx)<>16;"";Jx) (x étant la veur de ma ligne) et ceci à chaque modification de la valeur d'une cellule de la colone B.
J'ai déja glané quelques bouts de codes comme suivant :

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Cel As Range
For Each Cel In Target
If Not Application.Intersect(Target, Range("B1:B250")) Is Nothing Then
Select Case Cel.Value
If Cel.Value = "NEW" Then ... ?

End Select
End If
Next Cel
End Sub

Je n'arrive pas à finir.
Quelqu'un pourrait-il m'aider ? Merci.

1 réponse

  • Votes
  • Date
  • Date décroissante
  1. Bonjour,

    Private Sub Worksheet_Change(ByVal Target As Range)
        Dim Cel As Range
        'cellules colonne B
        If Not Application.Intersect(Target, Range("B1:B250")) Is Nothing And Target.Count = 1 Then
            'test en majuscule: permet maj et min dans la saisie
            If UCase(Target.Value) = "NEW" Then
                'ligne
                lig = Target.Row
                ' les "" de la formule, Chr(34)--->" pour la chaine formule
                rien = ""
                Range("K" & Target.Row).FormulaLocal = "=SI(NBCAR(J" & lig & ")<>16;" & Chr(34) & rien & Chr(34) & ";J" & lig & ")"
            End If
    
        End If
    End Sub
    


    Bonne suite
    1. Merci !!

      Ca marche nickel.
    2. Bonjour, nouveau jour, nouveau problème ... Et si je dois ajouter une autre action pour une autre colonne, j'ai essayé ca :

      Private Sub Worksheet_Change(ByVal Target As Range)
      'cellules colonne B
      If Not Application.Intersect(Target, Range("B1:B250")) Is Nothing And Target.Count = 1 Then
      If UCase(Target.Value) = "NEW" Then
      'ligne
      lig = Target.Row
      rien = ""
      Range("K" & Target.Row).FormulaLocal = "=SI(NBCAR(J" & lig & ")<>16;" & Chr(34) & rien & Chr(34) & ";J" & lig & ")"
      End If

      End If
      If Not Application.Intersect(Target, Range("u1:u250")) Is Nothing And Target.Count = 1 Then
      If UCase(Target.Value) = "m²" Then
      'ligne
      lig1 = Target.Row
      Range("T" & Target.Row).FormulaLocal = "=PRODUIT(V" & lig1 & ":W" & lig1 & ")"
      End If

      End If
      End Sub
      mais ca ne marche pas ...:-(
    3. il faut juste que j'enlève le Ucase et ça fonctionne ! Merci