Impossibilité de sélectionner un classeur crée dans la macro
Bonjour à tous!
J'aurais besoin de vos lumières sur un sujet.
Je dois pour le boulot faire une petite macro de remplissage de feuilles de chiffrage depuis la base de prix.
Même si mon code n'est pas top, j'ai réussi la manœuvre...
Par contre, certaines fonctions listées dans le fichier à remplir n'existant pas dans la base, on me demande de renseigner un nouveau fichier Excel en notant toutes les fonctions qui n'auront pas été traitées, car n'existant pas dans la base.
Je dois donc créer un nouveau fichier Excel (fichier de rapport). Je voudrais créer 2 onglets à l'intérieur : le premier pour faire une synthèse du chiffrage et le second dans lequel je mettrais le nom des fonctions qui n'ont pas pu être traitées.
J'arrive à créer le fichier rapport. Je l'enregistre ensuite en lui attribuant le nom "rapport - suivi du nom du fichier de chiffrage".
Je vois bien ce fichier à l'écran, avec ses 2 onglets : 'Rapport _Chiffrage' et 'Fct non chiffrees'.
Le problème arrive quand je veux sélectionner le fichier pour travailler dedans.
Ci-dessous le début de mon code, avec la partie création du classeur :
'Declaration variables
Dim Choix As Boolean, Choix2 As Boolean
Dim FichierExport$, CN1$, GRIP$, FichierBase$, FichierRapport$
Dim PlageCN1 As Range
Dim RefCell As Range
Dim ActiveCellCN1 As Range
Dim i%, j%, FinTableau%, Debut%, Fin%, LgMoyen%
Dim Etudes!, Achat!, Real!, Atelier!
Dim xlApp As Excel.Application
Dim xlBook As Excel.Workbook
Dim xlSheet As Excel.Worksheet
FichierBase = ActiveWorkbook.Name 'On récupère le nom du fichier de base de chiffrage
'Ouverture de la boite de dialogue pour le choix du fichier contenant la base de chiffrage
Choix = Application.Dialogs(xlDialogOpen).Show
If Choix = False Then 'Si l'utilisateur ne choisit rien
MsgBox "Vous n'avez rien sélectionné. La macro va stopper" ' on arrete la macro
Exit Sub
End If
FichierExport = ActiveWorkbook.Name 'On récupère dans une variable FichierExport le nom client du fichier selectionne
'Creation d'un nouveau fichier Excel pour l'export interne des donnees
Set xlBook = Nothing
Set xlApp = CreateObject("Excel.Application")
xlApp.SheetsInNewWorkbook = 2
Set xlBook = xlApp.Workbooks.Add
Set xlSheet = xlApp.Worksheets(1)
xlSheet.Name = "Rapport_Chiffrage" 'Creation du premier onglet 'Rapport Chiffrage'
Set xlSheet = Nothing
Set xlSheet = xlBook.Worksheets(2)
xlSheet.Name = "Fct non chiffrees" 'Creation du second onglet 'Fonctions non chiffrées'
xlBook.SaveAs Filename:=Workbooks(FichierExport).Path & Application.PathSeparator & "Rapport - " & FichierExport, FileFormat:=51
xlApp.Visible = True
FichierRapport = xlBook.Name
'With Workbooks(FichierRapport)
' With .Sheets("Fct non chiffrees")
' .Cells(2, 0).Value = "FONCTIONS NON CHIFFREES"
' End With
'End WithC'est donc sur les dernières lignes que cela coince (elles sont en commentaires pour l'instant) : quand je veux sélectionner le 'FichierRapport' sur le bon onglet, j'ai droit à un beau "Erreur d'execution '9' : L'indice n'appartient pas à la sélection".
J'ai certainement mal géré la création du nouveau classeur, mais je suis un peu sec...
Si vous avez des idées, je vous remercie par avance de me les faire suivre.
Bonne journée.
A+
Seb
Bonjour,
Pas bon :
Workbooks(FichierRapport)Bon :
Workbooks("FichierRapport")Bonne journée
Bonjour,
Pouvez-vous essayer ainsi :
Set xlApp = CreateObject("Excel.Application")
xlApp.SheetsInNewWorkbook = 2
FichierRapport = Workbooks(FichierExport).Path & Application.PathSeparator & "Rapport - " & FichierExport
Set xlBook = xlApp.Workbooks.Add
with xlBook
.Worksheets(1).Name = "Rapport_Chiffrage" 'Creation du premier onglet Rapport Chiffrage
xlApp.Visible = True
With .worksheets(2)
.name = "Fct non chiffrees"
.Cells(2, 1).Value = "FONCTIONS NON CHIFFREES"
End With
.SaveAs Filename:=FichierRapport, FileFormat:=51
End With
'suite du codeCdlt,
Bonjour à tous,
Déjà merci pour vos réponses rapides!
@MPETIT : j'ai bien ajouté les guillemets mais j'ai toujours la même erreur
@3GB : J'ai fait un copié/collé, cela fonctionne parfaitement, merci!
Par contre j'avais toujours un soucis quand je voulais par la suite retourner dans ce classeur pour y ajouter des valeurs (avec un ''Workbooks("FichierRapport").
Je pense avoir contourné le soucis : j'utilise l'instruction xlBook pour y retourner, et cela semble fonctionner pour l'instant.
Merci encore à vous pour votre aide.
Certainement à une prochaine sur le site, vu mon niveau en vba
Bonjour Seb,
Normalement, si le classeur est ouvert et que la variable FichierRapport contient bien son nom (le chemin complet, c'est mieux), il n'y a pas de raison que ça ne fonctionne pas. Il faut juste faire attention à l'ordre des actions.
Dans le code que j'ai posté, le fichier est nommé à la fin (avec l'enregistrement). Avant ça, il n'a pas encore de nom.
Cdlt,
Bonjour Seb,
J'ai lu entre les lignes trop rapidement et je n'ai pas vu que c'était une variable.
Au temps pour moi,
3GB à pris le relai de toute façon.
Bon week-end
Ca marche!
J'ai encore un autre problème... Je suis vraiment nul en vba
Je dois faire une synthèse de données, toujours dans un autre classeur que celui contenant celles-ci.
Exemple de données de base :
Je voudrais dans le second fichier avoir un tableau comme celui-ci :
Je vais lire chaque valeur de la colonne Description avec une boucle For .. Next, je mets dans des variables la 'Description' (variable 'Desc')et la 'Qte' associée (variable 'Qte').
Je change de classeur, je recherche si la description existe déjà dans la bonne colonne. Si oui, je voudrais ajouter la quantité à celle déjà présente, sinon j'ajoute la nouvelle entrée en fin de tableau:
Set RefCel2 = .Columns(2).Find(what:=Desc, lookat:=xlWhole, LookIn:=xlValues)
If Not RefCel2 Is Nothing Then
ActiveCN1Synt.Select = RefCel2
ActiveCN1Synt.Offset(0, 1).Value = ActiveCN1Synt.Offset(0, 1).Value + Qte
Else
Set ActiveCN1Synt = .Cells(FinDeListe, 2)
ActiveCN1Synt.Value = Desc
ActiveCN1Synt.Offset(0, 1).Value = Qte
La partie pour ajouter une nouvelle référence en fin de tableau (else) ne fonctionne pas trop mal, mais cela bug pour l'ajout de la quantité à une entrée déjà existante dans le tableau : je n'arrive pas à me mettre sur la bonne ligne, c'est à dire sur la cellule trouvée contenant la variable Desc.
C'est la ligne 'ActiveCN1Synt.select = RefCel2 qui coince. Mais j'ai essayé plusieurs formats : xx.activate,etc... Je ne sais pas comment selectionner comme cellule active la position de la recherche avec Find.
Si vous avez quelques minutes pour m'aider avant que j'envoie le portable par la fenêtre
Bonne soirée.
Seb
Bonjour Seb,
C'est un autre problème, vous devriez créer un autre sujet pour avoir plus de chances d'obtenir une bonne réponse...
Là, vu comme ça, c'est assez compliqué de s'avancer, il y a plusieurs façons d'y parvenir mais la solution avec .activate serait la dernière que j'utiliserais.
Créez un nouveau sujet, si possible en mettant le code entier. Pour obtenir une aide, il faut connaitre le classeur source, la feuille source, la plage (entière en précisant les colonnes avec les codes et montants - c'est le plus important) et ensuite, la plage de destination (donc classeur et feuille également).
Edit : voici quand même un essai si j'ai bien compris...
with sheets("destination")
for each cell in plage_source.Columns(1)
Set rcherche = .Columns(2).Find(what:=cell.value, lookat:=xlWhole, LookIn:=xlValues)
If Not rcherche Is Nothing Then
rcherche.offset(0, 1).value = rcherche.offset(0, 1).value + cell.offset(0, 1).value
Else
nvl = .cells(.rows.Count, 2).end(xlup).row + 1
.range("B:C").rows(nvl).value = cell.resize(, 2).value
end if
next cell
end with Cdlt,
Bonjour 3GB,
Merci pour le retour! J'ai pas mal bossé sur le sujet depuis mon post, et j'ai trouvé une solution, certainement bancale mais fonctionnelle...
Je tenais encore à tous vous remercier pour le temps que vous avez accordés à mes problèmes.
Je n'avais pas pensé au fait de créer un nouveau sujet. J'étais trop dans mon classeur Excel
Bonne fin de journée, et certainement à une prochaine, vu mon niveau sur VBA.