IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Probleme avec "set workbooks()" [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2011
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 128
    Par défaut Probleme avec "set workbooks()"
    Bonjour à tous

    c'est surement trés simple mais je bloque sur une déclaration de nom de classeur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    Sub mofif()
     
    Dim Wbdest As Workbook, wbmodif As Workbook
    Dim Ws1 As Worksheet, Ws2 As Worksheet, Ws3 As Worksheet
    Dim LigneDebut As Byte
    Dim LigneFin As Long
    Dim Cible1 As String, N_client As String
    Dim Rci As Range, Rpdp1 As Range, Rpdp2 As Range, Lign As Integer, X As Integer
    Dim Rmod As Range, Rmodval As String, Nomwbmodif As String
     
    Set wb = ThisWorkbook
     
    Application.Workbooks.Open "Z:\Gestion entreprise\VBA\Atest\CC2011T.xlsx"
    Set wbs = Workbooks("CC2011T.xlsx")
    wbs.Worksheets("Pilote1").Activate
     
      On Error Resume Next
       Set Rmod = Application.InputBox("Sélectionnez une plage !", "Sélection de cellules", Type:=8)
      On Error GoTo 0
       If Not Rmod Is Nothing Then
        Rmod.Hyperlinks(1).Follow NewWindow:=False, AddHistory:=True
     Rmodval = Rmod.Value
     wbs.Worksheets("Pilote1").Activate
    N_client = wbs.Worksheets("Pilote1").Cells(Rmod.Row, 8).Value
    Nomwbmodif = Rmodval & " " & N_client & ".xlsx"
     
        Set wbmodif = Workbooks("Nomwbmodif") ' ici j'ai une erreur
        Set Ws1 = wbs.Worksheets("Pilote1")
        Set Ws2 = wbmodif.Worksheets("Devis")
        Set Ws3 = ThisWorkbook.Worksheets("Devis")
    Je ne comprends pas pourquoi il ne veut pas de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set wbmodif = Workbooks("Nomwbmodif") ' ici j'ai une erreur
    En pas à pas détaillé jusqu'à cette ligne tout est bon y compris le "Nomwbmodif" alors je ne vois pas... Si quelqu'un a une idée je suis preneur
    merci d'avance.

  2. #2
    Expert confirmé
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Par défaut
    bonjour,

    si Nomwbmodif est une variable, pourquoi tu lui mets des guillemets

    Cordialement,

    Ps : si le côté technique de la réponse = OK ou pas => pensez à cliquer sur les pouces et quand question résolue à la taguer résolue, et chaque action vous rapporte des points

    Didier

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2011
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 128
    Par défaut
    bonjour Ormonth

    merci pour ta réponse, j'ai essayé sans les guillemets cependant j'ai toujours le même message "indice n'appartient pas à la selection. Et Nomwbmodif a le bon nom de classeur.

    cordialement,

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2011
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 128
    Par défaut
    salut,

    Ok la valeur de Nomwbmodif est : "SDV-2012-127-9 ENT Dupont.xlsx"
    dans l'exemple que j'ai pris. Quand je pointe la souris dessus.
    Je ne sais pas si c'est cela que tu attends comme
    réponse...

  5. #5
    Expert confirmé
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Par défaut
    Oui, c'est ça

    est-ce qu'un classeur qui porte exactement ce nom est bien ouvert dans la même session d'Excel au moment de l'exécution de ton code ?

    PS : attention s'il a des macros son nom sera en xlsm donc string = faux....

    cordialement,

    Didier

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2011
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 128
    Par défaut
    oui, il est bien ouvert et c'est le bon nom.
    Faut-il que je mette le ".xlsx" après les parenthèses?

    cordialement

  7. #7
    Expert confirmé
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Par défaut
    Citation Envoyé par tompom3108 Voir le message
    Faut-il que je mette le ".xlsx" après les parenthèses?
    Non, le tout constitue un String qui est le nom du classeur, donc tu ne peut le séparer, mettre ou non l'extension est une autre question essayes un code test ainsi après avoir ouvert tout ce qu'il fallait manuellement voir ce que ça donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub Test()
     
    Dim wbModif As Workbook
    Dim NomwbModif As String
     
    NomwbModif = "SDV-2012-127-9 ENT Dupont.xlsx"
     
    Set wbModif = Workbooks(Nomwbmodif)
       Debug.Print wbModif.Name
    End Sub
    cordialement,

    Didier

  8. #8
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    Bonjour,

    si Nomwbmodif est : "SDV-2012-127-9 ENT Dupont.xlsx"
    inutile d'ajouter quoique que ce soit

    si Nomwbmodif est : "SDV-2012-127-9 ENT Dupont"
    alors
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set wbmodif = Workbooks(Nomwbmodif & ".xlsx")
    mais je me pose des questions, par rapport à :

    xlsx est l'extension pour sauvegarder les classeurs Excel2007 sans macro.
    xlsm est l'extension pour sauvegarder les classeurs Excel2007 avec macro.
    mais là n'est peut-être pas le problème
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2011
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 128
    Par défaut
    Bonjour,

    Casefayere, merci pour ta réponse.

    Le classeur Nomwbmodif est un classeur sans macros et je suis sur Excel2010
    (sans vouloir me vanter) pour ce qui est du .xlsx je m'en doutais mais vu que je coince je commence à écrire n'importe quoi...

  10. #10
    Expert confirmé
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Par défaut
    re,

    plus simple, pour vérifier le nom retourné, tu actives à la main le classeur cible et tu exécutes ce code dans ton classeur de macros :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub Test2()
    Dim wbModif As Workbook
     
    Set wbModif = ActiveWorkbook
    Debug.Print wbModif.Name
    End Sub
    Ps : casefayere n'a pas tort, je l'ai rajouté d'ailleurs en PS précédemment, c'est tellement basique que je crois qu'on s'est tous fait avoir déjà à ce niveau et ça peut continuer vu qu'on cherche souvent en 1er une erreur complexe par rapport à son niveau justement...

    cordialement,

    Didier

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2011
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 128
    Par défaut
    Rebonjour Didier,

    J'ai essayé le code test, même résultat avec les classeurs ouverts
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set wbModif = Workbooks("Nomwbmodif")
    Nomwbmodif = <indice n'appartient pas à la selection>

  12. #12
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    je ne comprends pas ou tu fait des coquilles car tu recommences avec les guillemets

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set wbModif = Workbooks("Nomwbmodif") ' non
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set wbModif = Workbooks(Nomwbmodif) 'oui
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  13. #13
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Dans ce cas de figure soit permettre d'ouvrir le fichier par vba, soit de vérifier son existence.
    Ensuite, il faudrait structurer son code pour pouvoir s'y retrouver facilement.

    Exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    Sub Mofif()
    Dim wbS As Workbook, wbModif As Workbook
    Dim shS As Worksheet, shM As Worksheet, shD As Worksheet
    Dim RModVal As String, N_Client As String, FichModif As String
    Dim RMod As Range
     
    Set wbS = Workbooks.Open("Z:\Gestion entreprise\VBA\Atest\CC2011T.xlsx")
    Set shS = wbS.Worksheets("Pilote1")
    shS.Activate
     
    On Error Resume Next
    Set RMod = Application.InputBox("Sélectionnez une plage !", "Sélection de cellules", Type:=8)
    On Error GoTo 0
     
    If Not RMod Is Nothing Then
        RMod.Hyperlinks(1).Follow NewWindow:=False, AddHistory:=True
        RModVal = RMod(1, 1).Value
        N_Client = shS.Cells(RMod.Row, 8).Value
        FichModif = RModVal & " " & N_Client & ".xlsx"
     
        'Ici fonction qui permet de vérifier si FichModif est ouvert dans la même instance Excel
        If Existe(FichModif) Then
            Set wbModif = Workbooks(FichModif)
            Set shM = wbModif.Worksheets("Devis")
            Set shD = ThisWorkbook.Worksheets("Devis")
     
            'ICI TON CODE
     
     
            Set wbModif = Nothing
            Set shM = Nothing
            Set shD = Nothing
        End If
    End If
    Set RMod = Nothing
    Set shS = Nothing
    wbS.Close False
    Set wbS = Nothing
    End Sub
     
    Private Function Existe(ByVal Fich As String) As Boolean
    Dim Wb As Workbook
     
    For Each Wb In Application.Workbooks
        If Wb.Name = Fich Then
            Existe = True
            Exit For
        End If
    Next Wb
    End Function

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Batch] probleme avec commande SET et la suppression d'une chaine
    Par jcderchain dans le forum Scripts/Batch
    Réponses: 6
    Dernier message: 11/08/2011, 02h17
  2. problem avec un set dans une interrogation sql
    Par scofild20 dans le forum SQL
    Réponses: 2
    Dernier message: 27/04/2009, 13h04
  3. Probleme avec encodage de simple quote
    Par linkowich dans le forum Langage
    Réponses: 2
    Dernier message: 31/10/2005, 13h16
  4. Réponses: 2
    Dernier message: 30/08/2004, 14h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo