Problème code

Hyana -  
f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   -
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

  1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 831
     
    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                                                                 
    0
    1. Hyana
       
      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 ...
      0
      1. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717 > Hyana
         
        Bonjour 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
        0