Bonjour à tous,
J'ai besoin de votre aide pour un problème qui me fait m'arracher les cheveux :
J'ai un classeur excel avec 2 feuilles :
Ouf... déjà complexe!
mais là où se crée le problème :
j'ai écrit une macro qui, lorsque j'appuie sur un bouton, devrait parcourir la base de données (contenant des informations sur des "colonies") et pour chaque ligne, mettre le numéro de la "colonie" dans la cellule A1 de la deuxième feuille (afin de construire la fiche descriptive de la colonie) puis l'enregistre dans un nouveau fichier avant de passer à la colonie suivante.
PROBLEME :
1 - lorsque les fichiers s'enregistrent, la fiche copié ne conserve pas la mise en forme de la fiche d'origine. En fait, il faudrait que la mise en forme et les valeur se copie, sans les formules...
2 - A chaque colonie correspond une région appelée "SM". Lors de l'enregistrement, je voudrais qu'un dossier soit créé pour chaque SM afin d'y ranger la colonie. Tout se passe bien pour les colonies de la première SM mais lorsqu'on passe aux colonies de a 2ème SM, le dossier se crée et la macro termine en buggant. la fiche s'est ouverte mais n'a pas pu s'enregistrer...
QUESTION 1 : comment faire pour copier les valeurs et la mise en forme sans les formules?
QUESTION 2 : pourquoi la macro bug lorsque l'enregistrement change de dossier de destination?
Voici le code de ma macro :
Function RepertoireExiste(Chemin As String) As Boolean 'permet de vérifier si un dossier existe avant de le créer
On Error Resume Next
RepertoireExiste = GetAttr(Chemin) And vbDirectory
End Function
Sub Bouton3_QuandClic()
Dim i As Integer 'déclare la variable i (ID de la colonie)
Dim nbCol As Integer 'déclare la variable nbCol (nb total de colonies)
Dim no As String 'déclare la variable no (Nom de l'Onglet)
Dim numSM As String 'déclare la variable numSM (numéro de la SM)
Dim chem As String 'déclare la variable chem (CHEMin)
chem = ThisWorkbook.Path & Application.PathSeparator 'définit la variable chem
nbCol = Feuil1.UsedRange.Rows.Count 'compte le nombre de ligne sur la Feuille 1 qui est la BDD
For i = 1 To nbCol 'nbCol - 1 boucle sur le numéro de ligne du tableau de la BDD
Feuil2.Cells(1, 1) = i 'affiche la fiche descriptive dans la feuille 2 qui est la fiche
no = Feuil1.Cells(i + 1, 2) ' définit la variable no comme égale au nom de la colonie
numSM = Feuil1.Cells(i + 1, 3) 'définit la variable numSM comme égale au numéro de la SM de la colonie
Feuil2.Copy 'copy l'onglet
'crée un nouveau classeur ayant pour nom de nom de l'onglet dans le même dossier
If Not (RepertoireExiste(chem & "SM " & numSM)) Then MkDir (chem & "SM " & numSM)
ActiveWorkbook.SaveAs Filename:=(chem & "SM " & numSM & Application.PathSeparator & no & ".xls")
ActiveWorkbook.Close
Next i 'prochaine colonie de la boucle
End Sub
J'ai conscience que c'est un problème difficile à comprendre vu le mal que j'ai eu à l'expliquer. C'est pourquoi je vous remercie énormément de votre aide si jamais vous prenez le temps de lire mon message.
bonne journée!
J'ai besoin de votre aide pour un problème qui me fait m'arracher les cheveux :
J'ai un classeur excel avec 2 feuilles :
- - le premier est une base de données dans laquelle chaque ligne contient les informations sur une "colonie"
- - le 2ème est une fiche descriptive qui me sert à présenter les informations de chaque colonie. C'est peut-etre un peu du bidouillage mais en gros, lorsque je met la valeur 1 dans la cellule A1, les cases de la fiche se remplissent avec les informations de la 1ère colonie de la base de données en utilisant la fonction RECHERCHEV ou des mise en forme conditionnelle. Si je met 2 en A1, la fiche se remplit cette fois avec les infos de la 2ème colonie de la BDD. Je peux à chaque fois imprimer la fiche pour présenter chaque colonie séparement... Cette étape fonctionne parfaitement si je change à la main le numéro dans la cellule A1.
Ouf... déjà complexe!
mais là où se crée le problème :
j'ai écrit une macro qui, lorsque j'appuie sur un bouton, devrait parcourir la base de données (contenant des informations sur des "colonies") et pour chaque ligne, mettre le numéro de la "colonie" dans la cellule A1 de la deuxième feuille (afin de construire la fiche descriptive de la colonie) puis l'enregistre dans un nouveau fichier avant de passer à la colonie suivante.
PROBLEME :
1 - lorsque les fichiers s'enregistrent, la fiche copié ne conserve pas la mise en forme de la fiche d'origine. En fait, il faudrait que la mise en forme et les valeur se copie, sans les formules...
2 - A chaque colonie correspond une région appelée "SM". Lors de l'enregistrement, je voudrais qu'un dossier soit créé pour chaque SM afin d'y ranger la colonie. Tout se passe bien pour les colonies de la première SM mais lorsqu'on passe aux colonies de a 2ème SM, le dossier se crée et la macro termine en buggant. la fiche s'est ouverte mais n'a pas pu s'enregistrer...
QUESTION 1 : comment faire pour copier les valeurs et la mise en forme sans les formules?
QUESTION 2 : pourquoi la macro bug lorsque l'enregistrement change de dossier de destination?
Voici le code de ma macro :
Function RepertoireExiste(Chemin As String) As Boolean 'permet de vérifier si un dossier existe avant de le créer
On Error Resume Next
RepertoireExiste = GetAttr(Chemin) And vbDirectory
End Function
Sub Bouton3_QuandClic()
Dim i As Integer 'déclare la variable i (ID de la colonie)
Dim nbCol As Integer 'déclare la variable nbCol (nb total de colonies)
Dim no As String 'déclare la variable no (Nom de l'Onglet)
Dim numSM As String 'déclare la variable numSM (numéro de la SM)
Dim chem As String 'déclare la variable chem (CHEMin)
chem = ThisWorkbook.Path & Application.PathSeparator 'définit la variable chem
nbCol = Feuil1.UsedRange.Rows.Count 'compte le nombre de ligne sur la Feuille 1 qui est la BDD
For i = 1 To nbCol 'nbCol - 1 boucle sur le numéro de ligne du tableau de la BDD
Feuil2.Cells(1, 1) = i 'affiche la fiche descriptive dans la feuille 2 qui est la fiche
no = Feuil1.Cells(i + 1, 2) ' définit la variable no comme égale au nom de la colonie
numSM = Feuil1.Cells(i + 1, 3) 'définit la variable numSM comme égale au numéro de la SM de la colonie
Feuil2.Copy 'copy l'onglet
'crée un nouveau classeur ayant pour nom de nom de l'onglet dans le même dossier
If Not (RepertoireExiste(chem & "SM " & numSM)) Then MkDir (chem & "SM " & numSM)
ActiveWorkbook.SaveAs Filename:=(chem & "SM " & numSM & Application.PathSeparator & no & ".xls")
ActiveWorkbook.Close
Next i 'prochaine colonie de la boucle
End Sub
J'ai conscience que c'est un problème difficile à comprendre vu le mal que j'ai eu à l'expliquer. C'est pourquoi je vous remercie énormément de votre aide si jamais vous prenez le temps de lire mon message.
bonne journée!
Dernière édition: