Pb Changement de version d'Excel avec un affichage

2015-1158 Messages postés 34 Statut Membre -  
Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

J'ai codé un VBA assez long sur Excel2000. Je vous montre la partie qui plante.

Explication du code:

1) On clique sur le bouton (ActivX)
2) Ca ouvre un fichier Excel Annexe ainsi qu'un userform
3) L'userform se prérempli en cherchant les infos dans le excel annexe.
4) Userform.Show 0 (On laisse le userform en suspend)
5) On ferme le fichier excel annexe.
6) Résultat il me reste le fichier excel principal sur lequel on voit ouvert l'userform prérempli à partir d'un excel annexe.

Sur mon PC avec le Excel2000 tout fonctionne nickel !
Puis j'ouvre le fichier sur Excel2017 avec un autre PC. Il ouvre l'userform mais dès qu'il ferme l'excel annexe il ferme automatiquement l'userform avec. Pourtant le code n'a pas changé. J'en ai déduis que le Excel2017 ne reconnaissait pas le "Userform.Show 0", j'ai essayé avec " Userform.Show False" "Userform.Show vbModeless".

Rien à faire.

Voici l'extrait du code:
Private Sub CB10_Click()
CB = CB10.Caption
If Cells(10, 2) = "Demande" Then
Workbooks.Open Filename:="A:\163_MATERIEL\MATÉRIEL-PARCS\Bungalows\Planification_Bungalows_VBA\Chantier\" + ActiveSheet.name + ".xlsm"
Fichier = ActiveWorkbook.ActiveSheet.Cells(CB + 11, 2)
ChDir ThisWorkbook.Path & "\"
If Fichier <> False Then
UserForm1.Show 0
Else
End If
UserForm31.Show 0
ActiveWorkbook.Save
ActiveWorkbook.Close False
ElseIf Cells(10, 2) = "Retour" Then
Workbooks.Open Filename:="A:\163_MATERIEL\MATÉRIEL-PARCS\Bungalows\Planification_Bungalows_VBA\Chantier\" + ActiveSheet.name + ".xlsm"
UserForm61.Show 0
ActiveWorkbook.Save
ActiveWorkbook.Close False
End If
End Sub


Merci pour votre aide

2 réponses

  1. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 784
     
    Bonjour,

    1) "Userform.Show 0", " Userform.Show False" et "Userform.Show vbModeless" c'est pareil !
    2) Si l'usf appartient au fichier ouvert, il est normal qu'il se ferme lorsqu'on ferme de fichier, il faut mettre tous les usf dans le fichier qui contient la macro.
    0
    1. 2015-1158 Messages postés 34 Statut Membre
       
      Merci pour la réponse.
      1) Oui je m'en doutais.
      2) l'USF appartient au excel principal par contre les réponses lorsque l'USF s'autoconplete appartiennent au excel annexe. Mais le hic c'est que avec EXCEL2000 tout fonctionne, le fichier annexe se ferme et mon UF reste ouvert avec les données. Mais sur EXCEL2017 ca ferme tout. Je pense que c'est un problème d'outils entre les deux versions
      0
    2. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 784
       
      A ma connaissance, la dernière version d'Excel est la 2016 et la prochaine la 2018, je n'ai jamais entendu parler de la 2017.

      Effectivement avec 2016 j'ai le même comportement, la solution :

      Dim uf1 as UserForm1
      
      '....
      Set uf1 = UserForm1
      Workbooks.Open Filename:="A:\163....."
      '....
      uf1.Show 0
      0
    3. 2015-1158
       
      Salut merci pour la réponse, j'ai essayé de déclarer dans la procedure de mon bouton ActivX l'userform comme tu m'as dis. Mais ca ne marche pas:

      Dim UserForm31 As UserForm
      Dim UserForm61 As UserForm
      Dim UserForm1 As UserForm
      Dim uf31 As UserForm
      Dim uf61 As UserForm
      Dim uf1 As UserForm
      Set uf31 = UserForm31
      Set uf1 = UserForm1
      Set uf61 = UserForm61
          CB = CB10.Caption
          If Cells(10, 2) = "Demande" Then
              Workbooks.Open Filename:="A:\163_MATERIEL\MATÉRIEL-PARCS\Bungalows\Planification_Bungalows_VBA\Chantier\" + ActiveSheet.name + ".xlsm"
              Fichier = ActiveWorkbook.ActiveSheet.Cells(CB + 11, 2)
              ChDir ThisWorkbook.Path & "\"
              If Fichier <> False Then
                  uf1.Show 0
              Else
              End If
              uf31.Show 0
              ActiveWorkbook.Save
              ActiveWorkbook.Close False
          ElseIf Cells(10, 2) = "Retour" Then
              Workbooks.Open Filename:="A:\163_MATERIEL\MATÉRIEL-PARCS\Bungalows\Planification_Bungalows_VBA\Chantier\" + ActiveSheet.name + ".xlsm"
              uf61.Show 0
              ActiveWorkbook.Save
              ActiveWorkbook.Close False
          End If
      End Sub
      
      
      
      
      0
    4. 2015-1158
       
      Erreur d'incompatibilité 91, variable ou objet bloc non définit i
      0
    5. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
       
      Bonjour tout le monde,

      essayez ceci:
      Sub test()
          Dim UserForm31 As UserForm
          Dim UserForm61 As UserForm
          Dim UserForm1 As UserForm
          Dim uf31 As UserForm
          Dim uf61 As UserForm
          Dim uf1 As UserForm
          
          Set uf31 = UserForm31
          Set uf1 = UserForm1
          Set uf61 = UserForm61
          CB = CB10.Caption
          If Cells(10, 2) = "Demande" Then
              Nom_Fichier = ActiveSheet.Name + ".xlsm"
              Workbooks.Open Filename:="A:\163_MATERIEL\MATÉRIEL-PARCS\Bungalows\Planification_Bungalows_VBA\Chantier\" + Nom_Fichier
              Fichier = ActiveSheet.Cells(CB + 11, 2)
              ChDir ThisWorkbook.Path & "\"
              If Fichier <> False Then
                  uf1.Show 0
              End If
              uf31.Show 0
              Workbooks(Nom_Fichier).Close True
          ElseIf Cells(10, 2) = "Retour" Then
              Workbooks.Open Filename:="A:\163_MATERIEL\MATÉRIEL-PARCS\Bungalows\Planification_Bungalows_VBA\Chantier\" + Nom_Fichier
              uf61.Show 0
              Workbooks(Nom_Fichier).Close True
          End If
      End Sub
      0
  2. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 784
     
    Re,

    Au lieu de
    Dim UserForm31 As UserForm
    Dim UserForm61 As UserForm
    Dim UserForm1 As UserForm
    Dim uf31 As UserForm
    Dim uf61 As UserForm
    Dim uf1 As UserForm
    Set uf31 = UserForm31
    Set uf1 = UserForm1
    Set uf61 = UserForm61

    Essayer simplement :
    Dim uf31 As UserForm31
    Dim uf61 As UserForm61
    Dim uf1 As UserForm1
    Set uf31 = UserForm31
    Set uf1 = UserForm1
    Set uf61 = UserForm61

    A condition que les UserForm61, UserForm1 et UserForm31 soient déjà intégrés au fichier, chez moi ça fonctionne correctement (comme dans mon post précédent !)

    0