Choix classeur actif vba

Résolu/Fermé
sylvia - 2 avril 2008 à 15:57
 Utilisateur anonyme - 3 avril 2008 à 14:23
Bonjour,

je travaille en vba sous excel et c'est tout nouveau pour moi.

je cherche une solution à mon petit pb désespérement :

j'ai un classeur acif sur lequel j'ai un userform que je dois précharger de certaines données détenues dans un autre classeur actif lui aussi.

je ne sais pas comment faiire pour dire que c'est du deuxième classeur actif que l'info doit être récupérée.
je crois savoir que pour envoyer dans un textbox par ex faut faire :
textbox.text = worksheets("feul1").Range("h8").value

mais mon pb de sélection de classeur actif reste entier.

merci pour votre aide

2 réponses

Utilisateur anonyme
3 avril 2008 à 14:23
Bonjour,

Pour répondre à sylvia

Le traitement s'effectue ici sur 2 classeurs, or chaque instruction
doit toujours pointer sur le bon classeur.

Sub Test()

    ' Varaible objet d'un classeur
    Dim WB_Principal As Workbook
    
    ' Instanciation de la variable pour connaître le classeur actif
    Set WB_Principal = ActiveWorkbook
    ' Amène le classeurs cible en avant plan, celui-ci devient le [ ActiveWorkbook ]
    Workbooks("Classeur2.xls").Activate
    ' Charge la valeur de la feuille 1 de la cellule H8 dans le TextBox
    ' De façon plus explicite on devrait écrire
    ' MonUserform.TextBox.Text = Sheets("Feuil1").Range("H8").value
    TextBox.text = Sheets("Feul1").Range("H8").Value
    ' Retourne au classeur de départ
    WB_Principal.Activate
    
End Sub



Lorsque que l'on travaille sur plusieurs objets de façon simultanné,
il est souhaitable de mémoriser l'objet de départ, pour ensuite y revenir.

Autre façon de procéder :
' Suposons que cette routine est dans le classeur Maitre
Sub Deux_Classeur()

    Dim Nom_Maitre As String
    Dim Nom_Esclave As String
    
    Nom_Esclave = "Classeur2.xls"
    
    'Sauvegarde du nom du classeur actif
    Nom_Maitre = ActiveWorkbook.Name
    ' Chagement du classeur actif
    Workbooks(Nom_Esclave).Activate
    ' Insertion d'une donnée ou
    ' autre manipulation dans le classeur actif
    Range("A1").Value = "UneValeur"
    ' Retour au classeur Maitre
    Workbooks(Nom_Maitre).Activate
    
End Sub
'


Comme je dis toujours en traitement les variables
Le bon type de données dans le bon type d'objet.
Il en est de même pour les déplacements entre feuilles ou classeurs.
Assurez-vous de toujours savoir à quel endroit vous appliqué une instruction.

À l'usage, vous maitriserez mieux cette notion.

Exemple sur des feuilles :

Sub ChangeFeuille()

    Dim Nom_Fle_Maitre As String
    Dim Nom_Fle_Esclave As String
    Dim Valeur As Variant
    
    Nom_Fle_Maitre = ActiveSheet.Name
    Valeur = Range("B4").Value
    Sheets(Nom_Fle_Esclave).Select
    Range("B4").Value = Valeur
    Sheets(Nom_Fle_Maitre).Select
    
End Sub
'


Exemple 2 sur feuilles
Sub ChangeFeuille2()

    Dim Nom_Fle_Maitre As Worksheet
    Dim Nom_Fle_Esclave As Worksheet
    Dim Valeur As Variant
    
    Sheets(1).Select
    Set Nom_Fle_Maitre = ActiveSheet
    Set Nom_Fle_Esclave = Sheets(2)
    ' Ici, même si nous avons instancié
    ' l'objet de la feuille Excel [ Sheets(2) ]
    ' la feuille active est toujours le feuille 1
    Valeur = Range("B4").Value
    Sheets(Nom_Fle_Esclave).Select
    Range("B4").Value = Valeur
    Sheets(Nom_Fle_Maitre).Select
    
End Sub
'

En espérant que ce soit plus clair ainsi !

Amicalement

Lupin
7