Déclarer une variable 'Public'

Fchris

XLDnaute Occasionnel
:(Bonjour à tous,

J'ai un souci pour récupérer une variable dans des macros séparés. La variable en question (ici nommée File) est le nom d'un fichier qui est ouvert dans une première macro.

Voici le code en question :

Code:
Option Explicit
Public File As Variant, WB As Workbook

Sub CommandButton8_Click()

'ouverture du fichier

      
    File = Application.GetOpenFilename(filefilter:="Fichier Excel (*.xls),*.xls")
        If File = False Then
    MsgBox "Aucun Fichier Sélectionné", vbOKOnly + vbCritical, "Intégration non réalisée "
    Exit Sub
    
    Else
    Workbooks.Open Filename:=File
        End If

' Copie de la fiche dans le fichier de suivi

Set WB = ActiveWorkbook
    WB.Activate
    Sheets("Fiche").Select
    Sheets("Fiche").Copy After:=Workbooks("Suivi des Stagiaires.xls").Sheets("2007")
    Sheets("2007").Activate
    
    UserForm1.Show
            
End Sub

Je souhaite récupérer cette variable 'File' dans une macro Userform, mais cela ne fonctionne pas :

Code:
Option Explicit

Private Sub CommandButton2_Click()

UserForm1.Hide

Dim L, Col As Integer
Dim Nom, Prenom, NSS, Adresse, CP, Ville, Tel, Ecole, Diplome, Annee, Debut, Fin, Maitre, centre As Variant
Dim Save

'Définition des valeurs
    
    Sheets("Fiche").Select
    Nom = Cells(11, 2).Value
    Prenom = Cells(11, 11).Value
    NSS = Cells(13, 2).Value & Cells(13, 8).Value
    Adresse = Cells(17, 2).Value
    CP = Cells(19, 11).Value
    Ville = Cells(19, 2).Value
    Tel = Cells(15, 2).Value
    Ecole = Cells(27, 3).Value
    Diplome = Cells(27, 10).Value
    Annee = Cells(29, 10).Value
    Debut = Cells(31, 3).Value
    Fin = Cells(31, 6).Value
    Maitre = Cells(40, 3).Value
    centre = Cells(37, 3).Value

'On Trouve dernière L remplie

L = Sheets("2007").Range("A65536").End(xlUp).Row + 1 'Plus 1 = la dernière L vide !

' On complète le tableau

    With Sheets("2007")
        .Activate
        .Cells(L, 1) = Nom
        .Cells(L, 2) = Prenom
        .Cells(L, 3) = Adresse
        .Cells(L, 4) = CP
        .Cells(L, 5) = Ville
        .Cells(L, 6) = Tel
        .Cells(L, 7) = NSS
        .Cells(L, 8) = centre
        .Cells(L, 9) = Maitre
        .Cells(L, 10) = Ecole
        .Cells(L, 11) = Annee
        .Cells(L, 13) = Debut
        .Cells(L, 14) = Fin
    End With
    
' Suppression de la fiche stagiaire
    
    Sheets("Fiche").Select
    Application.DisplayAlerts = False
    ActiveWindow.SelectedSheets.Delete
    
MsgBox "Intégration réalisée avec succès"

[B][COLOR="DarkRed"]        With Windows(File)
        .Activate
        .Close[/COLOR]     [/B]   ==> J'ai tout le temps un message d'erreur ici VAriable non définie 
        End With

Windows("Suivi des Stagiaires.xls").Activate

UserForm2.Show
        
End Sub

Pouvez vous me dire comment puis-je procéder afin de récupérer le nom de fichier dans cette macro ?

Merci par avance

FChris
 

smotty

XLDnaute Occasionnel
Re : Déclarer une variable 'Public'

Salut FChris

1) tu devrais changer le nom de ta variable "File" qui peut poser problème de compilation dans certains cas car c'est un terme informatique.

2) petite astuce, utilise la propriété "Tag" du Userform. c'est assez pratique.

par ex:
Userform.tag= Variable

car la valeur d'une variable publique n'est utilisable que par le module en cours.
 

Fchris

XLDnaute Occasionnel
Re : Déclarer une variable 'Public'

Merci Pascal pour le lien, mais en lisant et relisant dans tous les sens, si je ne me trompe pas c'est exactement ce que j'ai fais et cela ne fonctionne pas chez moi...

Est-ce qu'il me manque une information ? J'ai changé le nom de ma variable de 'File' en 'Stag' pour éviter tout conflit, mais sans résultat.

Merci de votre aide.
 

PascalXLD

XLDnaute Barbatruc
Modérateur
Re : Déclarer une variable 'Public'

RE

Déjà la variable file doit ressembler à un truc du genre

c:\mesdocuments\....\classur1.xls

donc là c'est bizarre comme utilisation

Sinon tu as bien déclaré ta variable dans un MODULE ??

j'ai fiat un test et ça marche
 

Fchris

XLDnaute Occasionnel
Re : Déclarer une variable 'Public'

RE

Déjà la variable file doit ressembler à un truc du genre

c:\mesdocuments\....\classur1.xls

donc là c'est bizarre comme utilisation

Sinon tu as bien déclaré ta variable dans un MODULE ??

j'ai fiat un test et ça marche

Salut Pascal, désolé mais je n'ai pas pu répondre depuis hier. Alors pour en revenir à ma variable, elle est bien déclaré dans un module, mais le problème c'est que le nom de fichier n'est pas fixe et peut changer. C'est pourquoi je le récupère de cette façon :

Code:
    File = Application.GetOpenFilename(filefilter:="Fichier Excel (*.xls),*.xls")
        If File = False Then
    MsgBox "Aucun Fichier Sélectionné", vbOKOnly + vbCritical, "Intégration non réalisée "
    Exit Sub
    
    Else
    Workbooks.Open Filename:=File
        End If

Et c'est sans doute là qu'est le problème, je ne dois pas procéder de la bonne façon...

Encore merci de ton aide
 

PascalXLD

XLDnaute Barbatruc
Modérateur
Re : Déclarer une variable 'Public'

Re
essaies ainsi

Code:
 Sub CommandButton8_Click()

'ouverture du fichier

      
    MonFichier= Application.GetOpenFilename(filefilter:="Fichier Excel (*.xls),*.xls")
        If File = False Then
    MsgBox "Aucun Fichier Sélectionné", vbOKOnly + vbCritical, "Intégration non réalisée "
    Exit Sub
    
    Else
    Workbooks.Open Filename:=File
MonTableauFichier = Split(MonFichier, "\")
MonFichier = MonTableauFichier(UBound(MonTableauFichier))
        End If
Code:
     Workbooks(MonFichier).Close
 
Dernière édition:

Fchris

XLDnaute Occasionnel
Re : Déclarer une variable 'Public'

Ca ne fonctionne toujours pas Pascal.

J'ai redéfini les variables ainsi :

Code:
Option Explicit
Public MonFichier, MonTableauFichier As Variant, WB As Workbook

Puis refait le code selon tes consignes :

Code:
Sub CommandButton8_Click()

'ouverture du fichier

      
    MonFichier = Application.GetOpenFilename(filefilter:="Fichier Excel (*.xls),*.xls")
        If MonFichier = False Then
    MsgBox "Aucun Fichier Sélectionné", vbOKOnly + vbCritical, "Intégration non réalisée "
    Exit Sub
    
    Else
    Workbooks.Open Filename:=MonFichier
    MonTableauFichier = Split(MonFichier, "\")
    MonFichier = MonTableauFichier(UBound(MonTableauFichier))
        End If

Code:
        With Windows(MonFichier)
        .Activate
        .Close

Et là, j'ai toujours le message Variable non Définie. Je ne sais plus quoi faire :(
 

Fchris

XLDnaute Occasionnel
Re : Déclarer une variable 'Public'

Oh bon sang, Pascal, je suis vraiment désolé.

En fait, je n'avais pas fait gaffe, lorsque tu fais un bouton commande, il ne se créé pas dans un module, mais dans la feuille en elle-même. C'est en relisant ton post de toute à l'heure que j'ai tilté !! Du coup mes variables étaient déclarées dans la feuille et non pas dans un module. Je viens de les déplacer et tout fonctionne à merveille.

Quand je pense que je suis là dessus depuis plusieurs jours et que j'avais la solution juste devant les yeux, quel c..

Vraiment désolé de t'avoir fait perdre du temps, et encore merci beaucoup pour ton aide Pascal.

A très bientôt

Chris
 

Discussions similaires

Statistiques des forums

Discussions
312 392
Messages
2 088 004
Membres
103 693
dernier inscrit
vincs