Problème code

Bonjour,

un ami m'a crée un code VBA pour excel. Celui ci marche bien sur sa version d'Excel (2007) mais pas sur la mienne (2016). Et nous ne trouvons pas pourquoi ...

En fait j'ai 2 cases, une case taux de sélection et une case nombre de mâles. Mon souhait est que lorsque je tape un chiffre dans taux de sélection le chiffre associé apparaisse dans nombre de mâles et inversement lorsque je tape un chiffre dans nombre de mâles le chiffre associé apparaisse dans taux de sélection.

Voici le code proposé :

Private Sub Worksheet_Change(ByVal Target As Range)
 If Not Application.Intersect(Target, Range("C4")) Is Nothing Then
    For i = 11 To 21
      If Target.Value = Cells(i, 4).Value Then
        Cells(4, 6).Value = Cells(i, 5).Value
        Exit For
      End If
    Next i
 End If

 If Not Application.Intersect(Target, Range("F4")) Is Nothing Then
    For i = 11 To 21
      If Target.Value = Range("E" & i).Value Then
        Range("C4").Value = Range("D" & i).Value
      End If
    Next i
 End If
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  If Not Application.Intersect(Target, Range("C4")) Is Nothing Then
    For i = 11 To 21
      If Target.Value = Range("D" & i).Value Then
        Range("F4").Value = Range("E" & i).Value
        Exit For
      End If
    Next i
 End If

 If Not Application.Intersect(Target, Range("F4")) Is Nothing Then
    For i = 11 To 21
      If Target.Value = Range("E" & i).Value Then
        Range("C4").Value = Range("D" & i).Value
      End If
    Next i
 End If
End Sub


EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici : ICI

Merci d'y penser dans tes prochains messages.

1 réponse

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

    Quand tu dis que ça ne fonctionne pas... c'est à dire ...?
    Il y a un message d'erreur ??

    Sinon... peux tu essayer d'executer ce code en mode pas à pas pour voir ce qui s'y passe et également jetter un oeil à tes variables (voir les valeurs qu'elles ont...).

    Regarde ici : https://www.commentcamarche.net/contents/1381-debogage
    ou ici https://silkyroad.developpez.com/VBA/DebuterMacros/#LII-C-4

    Il te faudra placer un point d'arrêt dans ta macro :
    https://silkyroad.developpez.com/VBA/DebuterMacros/#LII-B-3-d

    Cordialement, 
    Jordane                                                                 
    1. Bonjour, oui désolée je n'ai pas précisé. Une fenêtre apparait sur mon feuillet excel en me mettant erreur d'exécution 28 espace pile insuffisant. Quand je mets débogage, il me souligne en jaune cette ligne de code :

      If Not Application.Intersect(Target, Range("C4")) Is Nothing Then

      Néanmoins, je en comprends pas pourquoi ...
    2. @HyanaBonjour a vous tous,

      Surprenant que chez vous cela marche avec 2007, car pas possible vous devriez avoir la meme erreur. Le probleme est que vous provoquer des appels sans fin des procedures quand vous modifiez/selectionnez les cellules C4 et/ou F4. Il faut bloquer les evenements excel

      Private Sub Worksheet_Change(ByVal Target As Range)
          On Error GoTo fin
       If Not Application.Intersect(Target, Range("C4")) Is Nothing Then
          Application.EnableEvents = False
          For i = 11 To 21
            If Target.Value = Cells(i, 4).Value Then
              Cells(4, 6).Value = Cells(i, 5).Value
              Exit For
            End If
          Next i
       ElseIf Not Application.Intersect(Target, Range("F4")) Is Nothing Then
          Application.EnableEvents = False
          For i = 11 To 21
            If Target.Value = Range("E" & i).Value Then
              Range("C4").Value = Range("D" & i).Value
              Exit For
            End If
          Next i
       End If
      fin:
           Application.EnableEvents = True
           On Error GoTo 0
      End Sub
      
      Private Sub Worksheet_SelectionChange(ByVal Target As Range)
          On Error GoTo fin
        If Not Application.Intersect(Target, Range("C4")) Is Nothing Then
          Application.EnableEvents = False
          For i = 11 To 21
            If Target.Value = Range("D" & i).Value Then
                  Range("F4").Value = Range("E" & i).Value
                  Exit For
            End If
          Next i
       ElseIf Not Application.Intersect(Target, Range("F4")) Is Nothing Then
          Application.EnableEvents = False
          For i = 11 To 21
            If Target.Value = Range("E" & i).Value Then
                  Range("C4").Value = Range("D" & i).Value
                  Exit For
            End If
          Next i
       End If
      fin:
           Application.EnableEvents = True
           On Error GoTo 0
      End Sub