Désigner et reférencer le bon classeur

  • Initiateur de la discussion Initiateur de la discussion atlas
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

atlas

XLDnaute Occasionnel
Salut à tous !!

Caramba encore du classique et une question de débutant ...!

En gros je n'arrive pas à référencer mon classeur et son onglet dans une variable .

Code:
Sub Misajour()

Dim i, numdedossier, nbdeniveaux, surface As Integer
Dim gesaf As Excel.Workbook

    
Set gesaf = Application.Workbook("ETUDES C.T.R").Worksheets("ETUDE C.T.R")
' Set gesaf = ThisWorkbook.Worksheets("ETUDE C.T.R")

 ChDir "C:\Documents and Settings\profil\Mes documents"
   Workbooks.Open Filename:= _
        "C:\Documents and Settings\profil\Mes documents\Oméga_Suivi.xls"
    
      Application.Run "Oméga_Suivi.xls!affetd"
     Application.Run "Oméga_Suivi.xls!fillst"  

With gesaf

For i = 1 To .Range("A65536").End(xlUp).Row  

numdossier = Cells(i, 3).Value 'retire le numéro de dossier
nbdeniveaux = Cells(i, 5).Value 'retire le nbdeniveaux
surface = Cells(i, 6).Value 'retire la surface

' à présent il s'agit de l'envoyer dans le fichier Oméga_suivi.xls

   Windows("Oméga_Suivi.xls").Activate 
    
    If numdossier <> "" Then
    
    Selection.AutoFilter Field:=1, Criteria1:="=" & numdossier, Operator:=xlAnd  'une recherche tres rapide grace aux filtres
    Cells.Find(What:=numdossier, After:=ActiveCell, LookIn:=xlValues, LookAt:= _
        xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
        , SearchFormat:=False).Activate  'cette recherche sert à activer la case contenant le numéro de dossier
                                         'et prepare ainsi l'écriture dans la fiche correspondante
         
         
    Application.Run "Oméga_Suivi.xls!ecr_fiche"
    Range("F33").Select
    ActiveCell.FormulaR1C1 = nbdeniveaux
    Range("G33").Select
    ActiveCell.FormulaR1C1 = "2"
    Range("H33").Select
    ActiveCell.FormulaR1C1 = surface
    Range("H34").Select
    Application.Run "Oméga_Suivi.xls!vld_fiche"  'enregistre la modification
    Application.Run "Oméga_Suivi.xls!ret_list" 'pour retourner à la liste des dossiers
    
    
    Windows("ETUDES C.T.R.xls").Activate  'retourne dans le fichier ETUDES C.T.R.xls pour choper
                                           'le prochain numéro de dossier
                                           
    End If
    Next i
    End With
    
End Sub

je n'aie pas été bien loin c'est la 3 ème ligne de code qui plante ....

Code:
Set gesaf = Application.Workbook("ETUDES C.T.R").Worksheets("ETUDE C.T.R")
.

En gros pas moyen de mettre le classeur "ETUDE C.T.R" dans une variable ...


NB:- Le but de mon prog est de scanner ligne à ligne un fichier d'en retirer 3 variables : le numéro de dossier , le nb de niveaux et la surface et d'envoyer c'est 3 informations dans un 2 ème classeur afin de le mettre à jour .
- le 2 ème classeur n'est pas joint parce que je n'aie pas les droits dessus ...
 

Pièces jointes

Re : Désigner et reférencer le bon classeur

Oui il fallait ecrire en 2 étapes avec 2 set .

Par contre ça ne ne m'explique pas pourquoi mon écriture était fausse .

Set gesaf = Application.Workbooks("ETUDES C.T.R").Worksheets("ETUDE C.T.R")
Corrigé "workbooks" avec un "s" ....Car le connecteur "." n'appelle pas "workbook" dans son menu déroulant mais "workbooks" .Toutefois cela ne marche pas quand même .

J'aie d'ailleurs du mal à saisir la nuance entre .workbook et .workbooks ou .worksheet et .worksheets ?!
 
Re : Désigner et reférencer le bon classeur

Bonsoir atlas, Stapple1600,

Oui il fallait ecrire en 2 étapes avec 2 set .

Par contre ça ne ne m'explique pas pourquoi mon écriture était fausse .

Corrigé "workbooks" avec un "s" ....Car le connecteur "." n'appelle pas "workbook" dans son menu déroulant mais "workbooks" .Toutefois cela ne marche pas quand même .

J'aie d'ailleurs du mal à saisir la nuance entre .workbook et .workbooks ou .worksheet et .worksheets ?!
Cela ne fonctionne pas car le nom de ton classeur n'est pas "ETUDES C.T.R" mais "ETUDES C.T.R.xls"

Code:
[COLOR=NAVY]Set[/COLOR] gesaf = Application.Workbooks("ETUDES C.T.R[B].xls[/B]").Worksheets("ETUDE C.T.R")
Cela dit, Stapple1600 a raison d'utiliser ThisWorkbook. Ici cela revient au même, mais l'avantage c'est que demain, si tu décides d'enregistrer ton classeur sous un nouveau nom, alors ton code marchera toujours.

Pour répondre à ta 2ème question, quand tu parles de Workbooks ou Worksheets, tu fais allusion à la collection de tous les Workbook ouverts ou la collection de l'ensemble des Worksheet (feuille) du classeur.

Pour désigner un élément parmi cette collection, tu peux faire :
Workbooks("Truc.xls")
Là, je parle du classeur, parmi l'ensemble des classeurs ouverts, qui porte le nom de "Truc.xls".

Dim Wbk As Workbook
Là, je déclare une variable objet avec le Type Workbook.

Cordialement,
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
2
Affichages
2 K
Retour