Adaptation code VBA Excel 07 pourExcel 97

libellule85

XLDnaute Accro
Bonsoir tout le monde,
Ne maitrisant pas beaucoup VBA j'ai trouvé sur le net un code pour liste déroulante en cascade que j'ai adapté et qui fonctionne parfaitement sous Excel 07 (code que je joins ci-dessous). Par contre j'ai essayé sous Excel 97 et celà ne fonctionne pas. Je me tourne donc vers vous pour savoir quels modifications je dois apporter pour que celui-ci fonctionne également sous Excel 97.

Sur la feuille Choix :
Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  If Target.Address = "$B$2" Then
    UserForm1.Show 0
  End If
End Sub

Et sur l'userform1 :
Code:
Private Sub UserForm_Initialize()
  Set f = Sheets("Listing")
  Set MonDico = CreateObject("Scripting.Dictionary")
  For Each c In Range(f.[A2], f.[A65000].End(xlUp))
    If c.Value <> "" Then MonDico.Item(c.Value) = c.Value
  Next c
  Me.ComboBox1.List = MonDico.items
  SendKeys "{F4}"
End Sub
Private Sub ComboBox1_Change()
  Set f = Sheets("Listing")
  i = 0
  Me.ComboBox2.Clear
  For Each c In Range(f.[A2], f.[A65000].End(xlUp))
   If c = Me.ComboBox1 Then
       Me.ComboBox2.AddItem
       Me.ComboBox2.List(i, 0) = c.Offset(, 1).Value
       Me.ComboBox2.List(i, 1) = c.Offset(0, 2).Value
       Me.ComboBox2.List(i, 2) = c.Offset(0, 3).Value
       Me.ComboBox2.List(i, 3) = c.Offset(0, 4).Value
       Me.ComboBox2.List(i, 4) = c.Offset(0, 5).Value
       Me.ComboBox2.List(i, 5) = c.Offset(0, 6).Value
       Me.ComboBox2.List(i, 6) = c.Offset(0, 7).Value
       Me.ComboBox2.List(i, 7) = c.Offset(0, 8).Value
       i = i + 1
   End If
  Next c
  Me.ComboBox2.SetFocus
  SendKeys "{F4}"
End Sub
Private Sub ComboBox2_Change()
   If Me.ComboBox2.ListIndex > -1 Then
     ActiveCell = Me.ComboBox1
     ActiveCell.Offset(2) = Me.ComboBox2
     ActiveCell.Offset(3) = Me.ComboBox2.Column(1)
     ActiveCell.Offset(4) = Me.ComboBox2.Column(2)
     ActiveCell.Offset(5) = Me.ComboBox2.Column(3)
     ActiveCell.Offset(6) = Me.ComboBox2.Column(4)
     ActiveCell.Offset(7) = Me.ComboBox2.Column(5)
     ActiveCell.Offset(8) = Me.ComboBox2.Column(6)
     End If
   Unload Me
End Sub

Merci pour votre aide
 

job75

XLDnaute Barbatruc
Re : Adaptation code VBA Excel 07 pourExcel 97

Bonsoir libellule85,

Normalement, sous Excel 97, il y a des fonctionnalités qui n'existent pas encore.

Leur présence provoque alors des erreurs de compilation.

Commencez donc par nous dire laquelle est rejetée.

Je penche pour l'objet "Scripting.Dictionary".

Auquel cas il faudra utiliser une autre méthode pour remplir la ComboBox.

A+
 

job75

XLDnaute Barbatruc
Re : Adaptation code VBA Excel 07 pourExcel 97

Re,

Sur Excel 97 essayez successivement :

Code:
Private Sub UserForm_Initialize()
  Dim f As Worksheet, MonDico As Object, c As Range
  Set f = Sheets("Listing")
  Set MonDico = CreateObject("Scripting.Dictionary")
  For Each c In f.Range("A2", f.[A65000].End(xlUp))
    If c.Value <> "" Then MonDico(c.Value) = c.Value
  Next c
  ComboBox1.List = MonDico.items
  SendKeys "{F4}"
End Sub
Puis, si ça ne marche pas :

Code:
Private Sub UserForm_Initialize()
  Dim f As Worksheet, c As Range
  Set f = Sheets("Listing")
  For Each c In f.Range("A2", f.[A65000].End(xlUp))
    If c.Value <> "" And Application.CountIf(f.Range("A2", c), c) = 1 _
      Then ComboBox1.AddItem c
  Next c
  SendKeys "{F4}"
End Sub
A+
 

job75

XLDnaute Barbatruc
Re : Adaptation code VBA Excel 07 pourExcel 97

Re,

L'erreur ne vient certainement pas de cette macro Initialize mais d'une des autres.

N'ouvrez pas l'UserForm mais placez vous sur la feuille de code de l'UserForm.

Puis Menu Débogage => Compiler VBAProject.

Quel expression se surligne en bleu avec l'erreur de compilation ?

A+
 

kiki29

XLDnaute Barbatruc
Re : Adaptation code VBA Excel 07 pourExcel 97

Salut,supprime le 0
dans
Code:
UserForm1.Show

Extrait de l'aide XL97
Un objet UserForm est toujours modal, il en résulte que l’utilisateur doit toujours répondre avant d’utiliser une autre partie de l’application. Aucun autre code ne s’exécutera tant que l’objet UserForm ne sera pas masqué ou déchargé.
 
Dernière édition: