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

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

    Informations forums :
    Inscription : Octobre 2011
    Messages : 128
    Points : 83
    Points
    83
    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 éminent
    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
    Points : 6 696
    Points
    6 696
    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
    Didier Gonard

    Dernier tutoriel :
    Le VBA qu'est ce que c'est ?
    Tutoriels : Voir la liste de mes tutoriels Excel & VBA et mon site pro sur ma Page DVP
    Cours et tutoriels pour apprendre Excel
    N'oubliez pas de mettre : ..quand c'est le cas !

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

    Informations forums :
    Inscription : Octobre 2011
    Messages : 128
    Points : 83
    Points
    83
    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 régulier
    Profil pro
    Inscrit en
    Octobre 2011
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 128
    Points : 83
    Points
    83
    Par défaut erreur de compilation
    Rebonjour Didier,

    oui le classeur Nowwbmodif est ouvert, c'est le nom du classeur choisi par le inputbox puis hyperlinks.follow

    Avec le print et le point d'arrêt j'ai une erreur de compilation : méthode incorrecte sans objet de approprié.

  5. #5
    Expert éminent
    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
    Points : 6 696
    Points
    6 696
    Par défaut
    bonjour,

    oups, écrasé mon message précédent en voulant le modifier, bon, au niveau du nom j'avais remis le même donc :

    point d'arrêt en ligne 27 et tu regardes quelle est la valeur de



    cordialement,

    Didier
    Didier Gonard

    Dernier tutoriel :
    Le VBA qu'est ce que c'est ?
    Tutoriels : Voir la liste de mes tutoriels Excel & VBA et mon site pro sur ma Page DVP
    Cours et tutoriels pour apprendre Excel
    N'oubliez pas de mettre : ..quand c'est le cas !

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

    Informations forums :
    Inscription : Octobre 2011
    Messages : 128
    Points : 83
    Points
    83
    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...

  7. #7
    Expert éminent
    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
    Points : 6 696
    Points
    6 696
    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
    Didier Gonard

    Dernier tutoriel :
    Le VBA qu'est ce que c'est ?
    Tutoriels : Voir la liste de mes tutoriels Excel & VBA et mon site pro sur ma Page DVP
    Cours et tutoriels pour apprendre Excel
    N'oubliez pas de mettre : ..quand c'est le cas !

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

    Informations forums :
    Inscription : Octobre 2011
    Messages : 128
    Points : 83
    Points
    83
    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

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

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

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    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 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...)

  10. #10
    Expert éminent
    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
    Points : 6 696
    Points
    6 696
    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
    Didier Gonard

    Dernier tutoriel :
    Le VBA qu'est ce que c'est ?
    Tutoriels : Voir la liste de mes tutoriels Excel & VBA et mon site pro sur ma Page DVP
    Cours et tutoriels pour apprendre Excel
    N'oubliez pas de mettre : ..quand c'est le cas !

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

    Informations forums :
    Inscription : Octobre 2011
    Messages : 128
    Points : 83
    Points
    83
    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...

  12. #12
    Expert éminent
    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
    Points : 6 696
    Points
    6 696
    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
    Didier Gonard

    Dernier tutoriel :
    Le VBA qu'est ce que c'est ?
    Tutoriels : Voir la liste de mes tutoriels Excel & VBA et mon site pro sur ma Page DVP
    Cours et tutoriels pour apprendre Excel
    N'oubliez pas de mettre : ..quand c'est le cas !

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

    Informations forums :
    Inscription : Octobre 2011
    Messages : 128
    Points : 83
    Points
    83
    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>

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

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

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    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 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...)

  15. #15
    Expert éminent sénior 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
    Points : 31 877
    Points
    31 877
    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
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

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

    Informations forums :
    Inscription : Octobre 2011
    Messages : 128
    Points : 83
    Points
    83
    Par défaut Bonjour à tous
    Bonjour à tous,

    Merci pour votre aide. Je commence par Didier (alias Ormonth), j'ai effectué les deux macros test. Test 1 me fait une erreur au niveau du
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set wbModif = Workbooks(NomwbModif)
    Par contre Test 2 marche le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Debug.Print wbModif.Name
    me donne le nom du classeur ouvert et actif.

    Pour le code de mercatog j'ai un souci car la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RModVal = RMod(1, 1).Value
    ne marche pas (="" Nothing) et du coup me renvoie au début de la macro indéfinimment. De plus au niveau de ces lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    RMod.Hyperlinks(1).Follow NewWindow:=False, AddHistory:=True
        RModVal = RMod(1, 1).Value
    le classeur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Set wbS = Workbooks.Open("Z:\Gestion entreprise\VBA\Atest\CC2011T.xlsx")
    Set shS = wbS.Worksheets("Pilote1")
    se ferme
    Or c'est justement la feuille dans laquelle se trouve la variable RmodVal.
    Je ne comprends pas pourquoi le classeur se ferm tout seul?

    Cordialement, Thomas.

  17. #17
    Expert éminent sénior 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
    Points : 31 877
    Points
    31 877
    Par défaut
    Ma proposition ne répondait pas à toutes tes questions parce que je ne sais pas ce que tu veux faire avec ton code.
    J'ai essayé de structurer TON code (sans plus)

    Rmod étant la plage sélectionnée par l'utilisateur. Et on fait au préalable un test si l'utilisateur n'a pas choisi d'annuler.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Not Rmod Is Nothing Then

    Quand tu écris
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim RmodVal as string
    '...
    RmodVal=Rmod.Value
    Ceci donnera automatiquement une erreur si Rmod est une plage de plusieurs cellules. d'où mon:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RmodVal=Rmod(1,1).Value
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

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

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

    Je sais que je suis on ne peut plus brouillon au niveau de mes codes,
    et je m'en excuse je débute j'apprends dans quelques années ça ira mieux ...j'espère. Pour Rmod une seule cellule est selectionnée effectivement par l'opérateur.

    Autrement, Je ne m'explique pas pourquoi le classeur wbS se ferme.

    A l'origine je veux écrire un code qui me permet de modifier ou copier un devis.

    Le classeur wbS est un classeur d'archivage dans lequel tous les devis sont récupérés. Du coup pour le modifier ou copier un devis dont la trame, ou les produits correspondent (afin d'éviter de le retaper), je veux ouvrir ce classeur d'archive, selectionner la cellule "numéro de devis" suivre le lien hypertexte pour ouvrir le devis originel recherché et copier les données dans le nouveau devis et resauvegarder par la suite Grosso Modo.

    Pour être sûr de bien me faire comprendre :
    Rmod est une cellule colonne1 contenant le numéro de Devis (SDV-2012-127-9 par exemple) qui active un lien vers le devis sauvegardé.

    Je cherche à reconstituer le nom du classeur ouvert pour pouvoir l'activer et recopier ses données dans un autre classeur.
    Le nom de ce classeur devis "originel" (wbModif) est constitué du Devis + Nom du client + .xlsx

    Et c'est bien là que ça bloque, je n'arrive pas activer ou déclarer le classeur wbModif ouvert avec le nom correct "reconstitué". Je ne comprends pas à quoi c'est du.

    Je pourrai utiliser le Getopenfilename mais je voulais utiliser le classeur d'archivage plus lisible avec plus de données pour chercher et selectionner plus facilement le bon devis (Montant, Date etc...)

    Cordialement,

    Re, j'ai utilisé tel quel ce code de Mercatog,

    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
    51
    52
    53
    54
    55
    56
    57
    58
    Sub Modifmercatog()
     
    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, Rpdp1 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")
     
           shM.Activate
     
    Set Rpdp1.Value = "pieddepage"
     
    Range("A23:Rpdp1").Copy
     
    shD.Range("A23").Select
    ActiveSheet.Paste
     
            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
    Au niveau de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    If Wb.Name = Fich Then
            Existe = True
    Il teste les classeurs ouverts et quand il tombe sur le classeur wb.Name = Fich le même nom apparaît mais Existe = Faux (au curseur de souris)
    C'est mystique quand même! c'est pour ça qu'il ferme le classeur wbS déjà j'ai compris ça je suis content!

    A non pardon j'ai dit une bétise ça marche avec .xls merci à tous je me taperai parfois...

  19. #19
    Expert éminent sénior 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
    Points : 31 877
    Points
    31 877
    Par défaut
    La ligne 37 du code #15 permet de fermer le classeur wbS à la fin du code.

    Peut être on devra expliquer le tout.

    Quand tu lance ton code, le fichier CC2011T est ouvert.
    Ensuite l’utilisateur sélectionne une plage à partir de la feuille pilote1 de ce fichier à l'aide de l'inputbox.

    Si l'utilisateur sélectionne une plage, Rmod sera non vide et en récupère dans RmodVal la valeur de la première cellule de la plage sélectionné.
    (Je sais que tu veux que l'utilisateur sélectionne une seule cellule, mais tu lui donne la possibilité de sélectionner plusieurs)
    d'où mon
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RmodVal=Rmod(1,1).value
    etc...

    Je vois que tu as déjà écrit 2 nouveaux posts.


    [Edit]

    Les lignes 29 à 36 de ton dernier code sont incohérentes.

    Est ce que tu veux copier la plage de la cellule A23 jusqu'à la cellule nommée pieddepage de la feuille Devis du classeur wbModif vers la cellule A23 de la feuille Devis du classeur contenant la macro?

    Si c'est ça, remplace ton code par ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    '....
        If Existe(FichModif) Then
            Set wbModif = Workbooks(FichModif)
            Set shM = wbModif.Worksheets("Devis")
            Set shD = ThisWorkbook.Worksheets("Devis")
     
            Rpdp1 = shM.Range("pieddepage").Address
            shM.Range("A23:" & Rpdp1).Copy shD.Range("A23")
     
            Set wbModif = Nothing
            Set shM = Nothing
            Set shD = Nothing
        End If
    '.....
    en déclarant
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

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

    Informations forums :
    Inscription : Octobre 2011
    Messages : 128
    Points : 83
    Points
    83
    Par défaut
    Merci mercatog,

    c'est exactement ça, je continuerai à pofiner la partie sauvegarde sur d'autres post suivant mes blocages rencontrés en tout cas merci pour ta façon pédagogique de résoudre les problèmes

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

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