[VBA] Peux pas ouvrir 2 classeurs Excel...

Résolu
Kyosteph -  
Gord21 Messages postés 928 Statut Membre -
Bonjour à tous !

Je fais mes 1ers pas avec VBA, mais honnêtement c chooooo !!! Voilà j'ai un fichier excel avec un UserForm pour la saisie des données et 3 boutons : 1 pour créer le devis avec les données saisies (DEVIS), 1 pour créer le cahier des charges avec ces mêmes données (CDC) et 1 qui devrait pouvoir me lancer les 2 (DEVIS + CDC).

Seulement voilà ça marche pas !!! Le 1er DEVIS seul pas de soucis tout se fait comme il faut, le 2ème CDC seul pas de prob, et le 3ème DEVIS + CDC... GRRRRR ! Plantage avec "Erreur 9 - L'indice n'appartient pas à la sélection" HELP ME !!! Je craque !!!

Vous avez besoin de quoi comme infos pour m'aider ?

Merci BEAUCOUP par avance !!!

6 réponses

  1. Gord21 Messages postés 928 Statut Membre 289
     
    Bonjour,
    Serait-il possible de nous envoyer ton fichier (cijoint.fr et tu copies le lien). A priori, il y a un soucis dans le code : par exemple, tu fais appel à un classeur qui n'existe pas, ou à une cellule qui n'existe pas. Peut-être qu'il y a un conflit entre tes deux macros (utilisation du même fichier temporaire qui est effacé par la première macro alors que la seconde veut y accéder) ...
    0
    1. Kyosteph
       
      Sub BoutonCDCDEVIS_Click()

      'Messages de contrôle
      If OptionGM And OptionGUE Then
      Dim Config As Integer
      Dim Réponse As Integer
      Config = vbYesNo + vbQuestion + vbDefaultButton2
      Réponse = MsgBox("Est ce que produit sera bien fait par X ?!?", Config)
      If Réponse = vbNo Then Exit Sub
      End If

      If (CC.Value = "L28" Or CC = "L30" Or CC.Value = "L17") And (OptionOR Or OptionPD) Then
      Msg = "On ne peut pas faire !"
      MsgBox Msg
      Exit Sub
      End If

      If OptionGUE And OptionPM And (OptionSurpTon Or OptionSurpCont) Then
      Msg = "X ne fait pas de logo !"
      MsgBox Msg
      Exit Sub
      End If

      If TextBoxDesignation.Value = "" Or TextBoxRef.Value = "" Or TextBoxCde.Value = "" Or TextBoxAuteur = "" Then
      Msg = "Remplir toutes les cases de la 1ère ligne, svp!"
      MsgBox Msg
      Exit Sub
      End If

      'Demarrage création Cahier des Charges
      Load Commandekit

      Sheets("CDC").Select
      Sheets("CDC").Copy
      Sheets("CDC").Select
      Sheets("CDC").Name = TextBoxCde.Value
      Nomdefichier = "CS. CDC " & TextBoxCde.Value & "CDC simplifié "
      ChDir "N:\Bureautique\Projets\CDC Cahier des charges simplifié\CS. CDC CST0xxx"
      'ActiveWorkbook.SaveAs Filename:= _
      "N:\Bureautique\Projets\CDC Cahier des charges simplifié\CS. CDC CST0xxx\" Nomdefichier _
      , FileFormat:=xlNormal, Password:="", WriteResPassword:="", _
      ReadOnlyRecommended:=False, CreateBackup:=False

      'Remplissage des zones informations du cahier des charges
      Range("A1").Select
      If OptionBG Then Range("D64").Value = "F.B"
      If OptionGUE Then Range("D64").Value = "F.G"
      Range("B6").Value = TextBoxRef.Value

      If OptionGM Then
      Range("D6").Value = "GM"
      Range("D11").Value = "Deux grandes poches "
      Range("B64").Value = "Idem GM"
      End If

      'Suppression des lignes inutiles

      If OptionGM Then
      Rows("33:33").EntireRow.Delete Shift:=xlUp
      Rows("33:33").EntireRow.Delete Shift:=xlUp
      Rows("23:23").EntireRow.Delete Shift:=xlUp



      ' DEVIS

      'Demarrage création devis

      Load Commandekit

      Sheets("Devis").Select
      Sheets("Devis").Copy
      Sheets("Devis").Select
      Sheets("Devis").Name = TextBoxCde.Value
      Nomdefichier = "CS. DEV " & TextBoxCde.Value
      ChDir "N:\Bureautique\Projets\DEV Devis\Devis 2009"
      'ActiveWorkbook.SaveAs Filename:= _
      "N:\Bureautique\Projets\DEV Devis\Devis 2009\" Nomdefichier _
      , FileFormat:=xlNormal, Password:="", WriteResPassword:="", _
      ReadOnlyRecommended:=False, CreateBackup:=False


      'Remplissage des zones informations de la Devis
      Range("A1").Select
      If OptionBG Then Range("C3").Value = "BG"
      If OptionGUE Then Range("C3").Value = "G"
      Range("B5").Value = TextBoxRef.Value
      If OptionGM Then Range("C5").Value = "GM"
      If OptionMM Then Range("C5").Value = "MM"
      If OptionPM Then Range("C5").Value = "PM"
      If OptionWW Then Range("C5").Value = "WW"
      Range("E5").Value = TextBoxDesignation.Value
      Range("C6") = DateValue(Date)
      Range("D6").Value = TextBoxCde.Value

      If OptionPM Then
      Range("F51").Value = "=3.1+1.5"
      Range("J51").Value = "Tps PM gamme: 3,1 + 1,5h"
      Range("D10").Value = "0.85"
      Range("D11").Value = "0.15"
      Range("D12").Value = "0.10"
      Range("D13").Value = "0.041"
      Range("C19").Value = "Fag dessus maille metal 30cm + curs"
      Range("G19").Value = "2.92"
      Range("C20").Value = "Chaine maille metal 30cm"
      Range("G20").Value = "1.22"
      Range("C21").Value = "Curseur pour poche dos"
      Range("G21").Value = "1.09"
      Range("C22").Value = "Fag nylon intérieure 20cm + curs"
      Range("G22").Value = "0.88"
      If OptionGUE Then
      Range("D15").Value = "0.274"
      Range("G16").Value = "3.21"
      Else
      Range("D15").Value = "0.283"
      Range("G16").Value = "3.75"
      End If
      End If

      'Suppression des lignes inutiles
      Rows("23:23").EntireRow.Delete Shift:=xlUp
      Rows("23:23").EntireRow.Delete Shift:=xlUp

      If OptionPM Then
      Rows("23:23").EntireRow.Delete Shift:=xlUp
      Rows("23:23").EntireRow.Delete Shift:=xlUp
      Rows("23:23").EntireRow.Delete Shift:=xlUp


      'Mise en page final
      Range("A1").Select
      Msg = "Terminé"
      MsgBox Msg

      End If
      End If

      End Sub
      0
    2. Kyosteph
       
      Kikou !

      Voici mon code. Sachant qu'effectivement je n'ai pas cherché très loin au départ en copiant/collant les codes l'un à la suite de l'autre (vu qu'ils marchent en séparés). Mais après vu que cela ne fonctionnait pas je me suis quand même un peu plus creusée la tête.... Mais rien à faire j'ai fait je ne sais combien de forum et autres Tutos + des bouquins et je ne trouve rien qui me le fasse fonctionner :'-((

      J'ai par contre supprimé tous les différents choix proposés et n'ai laissé qu'un seul pour exemple vu qu'ils sont tous fait pareils.

      Merci beaucoup par avance du coup de main, c vraiment sympa ;-)


      Sub BoutonCDCDEVIS_Click()
      'Messages de contrôle
      If OptionGM And OptionGUE Then
      Dim Config As Integer
      Dim Réponse As Integer
      Config = vbYesNo + vbQuestion + vbDefaultButton2
      Réponse = MsgBox("Est ce que produit sera bien fait par X ?!?", Config)
      If Réponse = vbNo Then Exit Sub
      End If

      If (CC.Value = "L28" Or CC = "L30" Or CC.Value = "L17") And (OptionOR Or OptionPD) Then
      Msg = "On ne peut pas faire !"
      MsgBox Msg
      Exit Sub
      End If

      If OptionGUE And OptionPM And (OptionSurpTon Or OptionSurpCont) Then
      Msg = "X ne fait pas de logo !"
      MsgBox Msg
      Exit Sub
      End If

      If TextBoxDesignation.Value = "" Or TextBoxRef.Value = "" Or TextBoxCde.Value = "" Or TextBoxAuteur = "" Then
      Msg = "Remplir toutes les cases de la 1ère ligne, svp!"
      MsgBox Msg
      Exit Sub
      End If

      'Demarrage création Cahier des Charges
      Load Commandekit

      Sheets("CDC").Select
      Sheets("CDC").Copy
      Sheets("CDC").Select
      Sheets("CDC").Name = TextBoxCde.Value
      Nomdefichier = "CS. CDC " & TextBoxCde.Value & "CDC simplifié "
      ChDir "N:\Bureautique\Projets\CDC Cahier des charges simplifié\CS. CDC CST0xxx"
      'ActiveWorkbook.SaveAs Filename:= _
      "N:\Bureautique\Projets\CDC Cahier des charges simplifié\CS. CDC CST0xxx\" Nomdefichier _
      , FileFormat:=xlNormal, Password:="", WriteResPassword:="", _
      ReadOnlyRecommended:=False, CreateBackup:=False

      'Remplissage des zones informations du cahier des charges
      Range("A1").Select
      If OptionBG Then Range("D64").Value = "F.B"
      If OptionGUE Then Range("D64").Value = "F.G"
      Range("B6").Value = TextBoxRef.Value

      If OptionGM Then
      Range("D6").Value = "GM"
      Range("D11").Value = "Deux grandes poches "
      Range("B64").Value = "Idem GM"
      End If

      'Suppression des lignes inutiles

      If OptionGM Then
      Rows("33:33").EntireRow.Delete Shift:=xlUp
      Rows("33:33").EntireRow.Delete Shift:=xlUp
      Rows("23:23").EntireRow.Delete Shift:=xlUp



      ' DEVIS

      'Demarrage création devis

      Load Commandekit

      Sheets("Devis").Select
      Sheets("Devis").Copy
      Sheets("Devis").Select
      Sheets("Devis").Name = TextBoxCde.Value
      Nomdefichier = "CS. DEV " & TextBoxCde.Value
      ChDir "N:\Bureautique\Projets\DEV Devis\Devis 2009"
      'ActiveWorkbook.SaveAs Filename:= _
      "N:\Bureautique\Projets\DEV Devis\Devis 2009\" Nomdefichier _
      , FileFormat:=xlNormal, Password:="", WriteResPassword:="", _
      ReadOnlyRecommended:=False, CreateBackup:=False


      'Remplissage des zones informations de la Devis
      Range("A1").Select
      If OptionBG Then Range("C3").Value = "BG"
      If OptionGUE Then Range("C3").Value = "G"
      Range("B5").Value = TextBoxRef.Value
      If OptionGM Then Range("C5").Value = "GM"
      If OptionMM Then Range("C5").Value = "MM"
      If OptionPM Then Range("C5").Value = "PM"
      If OptionWW Then Range("C5").Value = "WW"
      Range("E5").Value = TextBoxDesignation.Value
      Range("C6") = DateValue(Date)
      Range("D6").Value = TextBoxCde.Value

      If OptionPM Then
      Range("F51").Value = "=3.1+1.5"
      Range("J51").Value = "Tps PM gamme: 3,1 + 1,5h"
      Range("D10").Value = "0.85"
      Range("D11").Value = "0.15"
      Range("D12").Value = "0.10"
      Range("D13").Value = "0.041"
      Range("C19").Value = "Fag dessus maille metal 30cm + curs"
      Range("G19").Value = "2.92"
      Range("C20").Value = "Chaine maille metal 30cm"
      Range("G20").Value = "1.22"
      Range("C21").Value = "Curseur pour poche dos"
      Range("G21").Value = "1.09"
      Range("C22").Value = "Fag nylon intérieure 20cm + curs"
      Range("G22").Value = "0.88"
      If OptionGUE Then
      Range("D15").Value = "0.274"
      Range("G16").Value = "3.21"
      Else
      Range("D15").Value = "0.283"
      Range("G16").Value = "3.75"
      End If
      End If

      'Suppression des lignes inutiles
      Rows("23:23").EntireRow.Delete Shift:=xlUp
      Rows("23:23").EntireRow.Delete Shift:=xlUp

      If OptionPM Then
      Rows("23:23").EntireRow.Delete Shift:=xlUp
      Rows("23:23").EntireRow.Delete Shift:=xlUp
      Rows("23:23").EntireRow.Delete Shift:=xlUp


      'Mise en page final
      Range("A1").Select
      Msg = "Terminé"
      MsgBox Msg

      End If
      End If

      End Sub
      0
  2. Gord21 Messages postés 928 Statut Membre 289
     
    Sur quelle ligne as-tu le message d'erreur (lorsque tu choisis débugger au lieu de finir) ?
    Ca peut orienter les recherches.
    0
    1. Kyosteph
       
      Sur : "Sheets("Devis").Select"

      A la sélection de la feuille "DEVIS"
      0
  3. Gord21 Messages postés 928 Statut Membre 289
     
    Je n'ai pas eu le temps de regarder en profondeur mais apparemment, tu cherches à sélectionner une feuille qui n'existe plus, tu la renommes dans la procédure effectuée en premier :
    Sheets("Devis").Name = TextBoxCde.Value

    Je continue de regarder pour voir s'il y a autre chose
    0
  4. Gord21 Messages postés 928 Statut Membre 289
     
    Bonsoir,
    Ma remarque précédente n'est peut-être pas pertinente : je pensais que tu avais posté le code pour le devis puis le code pour le CDC, mais en fait, c'est deux fois le même.

    Par contre, voici quelques questions et/ou remarque :
    - est ce que ton code est complet ?
    - je pense (peut-être à tort) qu'il vaut mieux éviter les noms de variables avec accent (Reponse plutôt que Réponse)
    - tu utilises 2 fois la commande Load Commandekit : il s'agit bien d'un UserForm ?
    - il n'y a pas de Commandekit.Show et tu tentes de renommer tes deux feuilles avec le même nom : Sheets("CDC").Name = TextBoxCde.Value et plus loin Sheets("Devis").Name = TextBoxCde.Value
    - tu as mis le SaveAs en commentaire mais si tu en as besoin, il manque & avant la variable Nomdefichier

    Voilà, je ne sais pas si ça t'aide pour résoudre ton problème.
    @+
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. kyosteph Messages postés 2 Statut Membre
     
    J'ai essayé de modifier tout ce que tu me donnes mais tjrs rien... Je crois que c'est plus dans mon enchainement que dans ma structure... En fait pour résumer ce que je veux faire c'est que d'un seul formulaire de saisie il me créé 2 feuilles Excel distinctes. Une qui est un copier/coller de "DEVIS" et l'autre, idem, copier/coller mais de "CDC". Et en même temps me remplir les deux feuilles.... Je pense que c'est possible, mais c'est l'enchainement de mes codes qui déconnes... Puisque séparés ils fonctionnent impecc ! Apparemment le souci vient que qd il crée la 1ere feuille issue de "CDC", il reste sur le nouveau classeur qui du coup devient "actif" donc ne peut plus trouver la feuille "DEVIS"... Mais j'arrive pas à lui faire reprendre....

    Pas facile la programmation, je me suis peut-être jetée un peu trop vite...

    Merci beaucoup en tout cas d'avoir pris le tps de regarder, si t'as d'autres idées, j'suis preneuse ! ;-)

    @ +
    0
    1. Gord21 Messages postés 928 Statut Membre 289
       
      Il ne faut pas te décourrager.
      Pour réactiver le classeur qui contient ta macro, tu peux utiliser la commande
      ThisWorkbook.Activate.
      Ce que tu appelles formulaire est bien un UserForm nommé Commandekit ?
      Peux-tu mettre le lien vers ton classeur (avec cijoint.fr) ou est-ce confidentiel ?
      0
  7. kyosteph Messages postés 2 Statut Membre
     
    AAAAHHHHHH MERCIIIIIIIIIIIIIII !!!!

    J'avais essayé ThisWorkbook.Activate, mais mal placé !Du coup ça marche !!!! Merci Merci Merci !!!!

    J'suis TROP contente !!! Merci encore pour ton aide, c'était vraiment sympa d'avoir pris qq tps pour m'aider.

    @ + peut-être avec un autre prog ;-)))
    0
    1. Gord21 Messages postés 928 Statut Membre 289
       
      Bonjour,
      Heureux que ça marche.
      C'est une remarque générale, lorsque tu utilises plusieurs classeurs ou plusieurs feuilles dans une macro, il est préférable de donner la référence complète des cellules que tu traites ou t'assurer que le classeur que tu souhaites utiliser est bien activé. Par exemple, pour ôter toute ambiguïté, tu pourrais écrire :

      Dim feuille_source As Worksheet
      Dim feuille_destination As Worksheet
      '
      Set feuille_source = ActiveSheet
      Set feuille_destination = ThisWorkbook.Sheets("toto")
      '
      '...
      '
      feuille_destination.Range("A1").Value = feuille_source.Range("A1").Value
      '...


      Bonne continuation.
      0