Problème code

Fermé
Hyana - Modifié par baladur13 le 24/06/2016 à 09:44
f894009 Messages postés 17206 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 22 novembre 2024 - 24 juin 2016 à 13:22
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.
A voir également:

1 réponse

jordane45 Messages postés 38346 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 décembre 2024 4 717
Modifié par jordane45 le 24/06/2016 à 09:53
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
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
f894009 Messages postés 17206 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 22 novembre 2024 1 711 > Hyana
24 juin 2016 à 13:22
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