[VBA] Peux pas ouvrir 2 classeurs Excel... [Résolu/Fermé]

Signaler
-
Messages postés
919
Date d'inscription
samedi 21 novembre 2009
Statut
Membre
Dernière intervention
20 mars 2013
-
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

Messages postés
919
Date d'inscription
samedi 21 novembre 2009
Statut
Membre
Dernière intervention
20 mars 2013
278
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) ...
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
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
Messages postés
919
Date d'inscription
samedi 21 novembre 2009
Statut
Membre
Dernière intervention
20 mars 2013
278
Sur quelle ligne as-tu le message d'erreur (lorsque tu choisis débugger au lieu de finir) ?
Ca peut orienter les recherches.
Sur : "Sheets("Devis").Select"

A la sélection de la feuille "DEVIS"
Messages postés
919
Date d'inscription
samedi 21 novembre 2009
Statut
Membre
Dernière intervention
20 mars 2013
278
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
Messages postés
919
Date d'inscription
samedi 21 novembre 2009
Statut
Membre
Dernière intervention
20 mars 2013
278
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.
@+
Messages postés
2
Date d'inscription
mercredi 10 février 2010
Statut
Membre
Dernière intervention
12 février 2010

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 ! ;-)

@ +
Messages postés
919
Date d'inscription
samedi 21 novembre 2009
Statut
Membre
Dernière intervention
20 mars 2013
278
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 ?
Messages postés
2
Date d'inscription
mercredi 10 février 2010
Statut
Membre
Dernière intervention
12 février 2010

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 ;-)))
Messages postés
919
Date d'inscription
samedi 21 novembre 2009
Statut
Membre
Dernière intervention
20 mars 2013
278
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.