Formulaire en VBA

Bonjour,

Je suis débutant en VBA et franchement motivé pour apprendre ce langage ^^.

Pour mon travail, je me suis lancé dans un projet qui me dépasse un peu...Désolé si je ne suis pas très clair....

Je vous expose mes problèmes petit à petit afin de comprendre au mieux la façon de faire.

Le but final est d'avoir une sorte de formulaire qui regroupe des informations qui me servirons à créer et/ou remplir des tableaux dans un classeur à plusieurs feuilles. (En PJ l'image "mon plan")

Il y a plusieurs points que je dois configurer mais d'abord commençons par celui qui me donne du mal.

D'après mon fichier "Mon plan", je suis en train d'essayer de paramétrer le point 6 (En jaune).

Le but de ce bouton est de lancer une procédure de vérification d'un classeur dont le chemin est en fonction du nom inscrit dans une TextBox de mon formulaire. (Ex: si j'inscrit le code "Lefichier01" dans la textbox "code_clipper_p1" alors le chemin est : G:\Data\Liste Récap mapping\" & Code_clipper_p1 & ".xlsx")

Pour cette partie je pense que ce que j'ai bricolé fonctionne.

Seulement le but est de tester... C'est à dire que je voudrais savoir si dans le classeur que je veux tester, il y a en cellule B1 l'inscription "OK" (Dans ce cas, "Dispo" apparaît dans le label "Ok / Vide" . Si cette inscription n'y est pas alors "Vide" apparaît dans le label "Ok / Vide")

Donc, dans ma logique, j'imagine un code VBA qui ferait ça :

(De préférence, j'aimerai que cette étape de "test" soit cachée comme si elle se faisait en arrière plan)

1 - Cliquer sur le bouton "Fiche Récap" entraîne l'ouverture du classeur correspondant au code inscrit dans "Code clipper"

2- Exécute la procédure "Private Sub Inspect_Fichier" qui va chercher si "OK" est inscrit et traduire par "Dispo" ou " Vide dans un champ spécifique du "Formulaire".

3-Fermer le classeur.

Alors actuellement, j'arrive à ouvrir le classeur que je veux en fonction du code.(Et je suis assez fière de moi lol)

Mais je bloque sur l'étape de recherche du terme "OK" et ce qui s'en suis ....

Et je n'arrive pas à fermer unique le classeur testé ... (le code Workbooks.Close ferme mon classeur de travail et non le classeur testé)

Voici mon programme, enfin, une ébauche très légère.....

Private Sub Inspect_Fichier() 'Ce qui me permet de savoir si le terme "ok" est présent ou pas.

Dim Chemin0 As String

Chemin0 = "G:\Data\Liste Récap mapping\" & Code_clipper_p1 & ".xlsx"

If Chemin0 = "Tableau!Cells(1, 2).Value" = OK Then

Dispo_Vide.Caption = "Dispo"

Else

Ok_Vide.Caption = "Vide"

End If

End Sub

Private Sub Bouton_Vérif_Click()

Dim Chemin1 As String

Chemin1 = "G:\Data\Liste Récap mapping\" & Code_clipper_p1.Value & ".xlsx"

Application.Workbooks.Open Chemin1

Inspect_Fichier

Workbooks.Close Chemin1

End Sub

Merci d'avance de prendre de votre temps pour m'expliquer comment et pourquoi je doit faire tels ou tels choses. Car je désire vraiment comprendre et apprendre et non pas avoir juste une solution. ^^

Encore merci

mon plan

Bonjour,

Personne ne peut m'aider ? ^^

Merci

Bonjour,

Tu devrais transmettre le classeur en argument à Inspect_Fichier()

Par exemple :

Option Explicit
Private Sub Bouton_Vérif_Click()
Dim Classeur As Workbook
Dim Chemin As String
  Chemin = "G:\Data\Liste Récap mapping\" & Code_clipper_p1.Value & ".xlsx"
  Set Classeur = Workbooks.Open(Chemin)
  Call Inspect_Fichier(Classeur)
  Classeur.Close False
End Sub
Private Sub Inspect_Fichier(ClasseurTest As Workbook)
Dim Tableau As Range
  Set Tableau = ClasseurTest.Worksheets(1).Range("Tableau")
  If Tableau.Cells(1, 2).Value = "Ok" Then
    Dispo_Vide.Caption = "Dispo"
    Ok_Vide.Caption = ""
  Else
    Ok_Vide.Caption = "Vide"
    Dispo_Vide.Caption = ""
  End If
End Sub

Bonjour et Merci Patrice33740,

J'ai compris un peu le raisonnement mais j'ai une erreur :

Private Sub Inspect_Fichier(ClasseurTest As Workbook)

Dim Tableau As Range

Set Tableau = ClasseurTest.Worksheets(1).Range("Tableau")

If Tableau.Cells(1, 2).Value = "Ok" Then

Dispo_Vide.Caption = "Dispo"

Else

Dispo_Vide.Caption = "Vide"

End If

End Sub

Je pense que c'est le nom du classeur qui ne convient pas car "Classeur.test" n'est pas le nom du fichier en question.

Je travail sur une solution mais si tu as une idée, je regarderai quand je ne pourrais plus avancer ... ^^

Merci beaucoup.

Petite question : Quelle est la différence entre "Private Sub Inspect_Fichier(Classeur As Workbook)" et "Dim Classeur As Workbook" ?

Pourquoi es-ce que l'un est dans le "titre" Private sub et l'autre dans "le code" d'un Private Sub ?

Merci de m'éclairer ^^

Petite question : Quelle est la différence entre "Private Sub Inspect_Fichier(Classeur As Workbook)" et "Dim Classeur As Workbook" ?

dans la procédure Bouton_Vérif_Click :

Dim Classeur As Workbook

Déclare une variable de type classeur (As Workbook) qui s'appelle Classeur dans cette procédure.

Set Classeur = Workbooks.Open(Chemin) 

Affecte le nouveau classeur, qui vient d'être ouvert, à la variable nommée Classeur

Call Inspect_Fichier(Classeur)

Appelle la procédure Inspect_Fichier en lui transmettant les références du classeur nommé Classeur (dans Bouton_Vérif_Click.)

Cette ligne :

Private Sub Inspect_Fichier(ClasseurTest As Workbook)

Sub Inspect_Fichier déclare la procédure nommé Inspect_Fichier

Private défini cette procédure comme privée, c'est à dire de portée limitée au module qui la contient.

(ClasseurTest As Workbook) défini et déclare le(s) argument(s) à transmettre à la procédure, dans ce cas le classeur (As Workbook) dont les références ont été transmise par l'appel, qui s'appellera (dans cette procédure) ClasseurTest.

Si cette ligne ne fonctionne pas :

Set Tableau = ClasseurTest.Worksheets(1).Range("Tableau")

C'est qu'il n'a pas de tableau structuré ou de plage nommée qui s'appelle Tableau dans le fichier ouvert !

Si tu veux simplement tester la cellule B1 de la première feuille du classeur ouvert, Inspect_Fichier est plus simple :

Private Sub Inspect_Fichier(ClasseurTest As Workbook)
  If ClasseurTest.Worksheets(1).Range("B1").Value = "Ok" Then
    Dispo_Vide.Caption = "Dispo"
    Ok_Vide.Caption = ""
  Else
    Ok_Vide.Caption = "Vide"
    Dispo_Vide.Caption = ""
  End If
End Sub

Merci beaucoup Patrice33740 !

Effectivement "Tableau" est le nom de la feuille et non pas une plage ou un tableau défini dans le classeur.

Merci aussi pour tes explications je commence à mieux comprendre le langage VBA et ça commence à me plaire aussi ^^.

Si ça ne dérange pas, je vais garder ce post ouvert car j'ai d'autres idée en têtes pour continuer mon formulaire et je pense avoir encore besoin d'aide dans les prochains jours. ^^

Merci encore, je vais pouvoir avancer et continuer de découvrir les possibilité que m'offre VBA !

Bonne journée et à bientôt

Bonjour,

Merci pour ton aide.

Suite à des nouvelles contraintes pour mon projet je dois revoir intégralement la structure de mon formulaire et classeur......

Je clôture donc ce post et je pense réapparaître dans un autre très bientôt ^^.

Merci encore et bonne journée

Rechercher des sujets similaires à "formulaire vba"