Copie de mise en forme et problème d'enregistrement automatique de fichier

emaxou

XLDnaute Nouveau
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 :

  1. - le premier est une base de données dans laquelle chaque ligne contient les informations sur une "colonie"
  2. - 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:
G

Guest

Guest
Re : Copie de mise en forme et problème d'enregistrement automatique de fichier

Bonjour,

VB:
    'Code de remplissage de la fiche avec la colonnie idoine
 
    '...........
    '.........
 
  'Attendre qu'excel ait finit ses calculs
    Do While Application.CalculationState <> xlDone
    DoEvents
    Loop
 
 
    'Excel a finit ses calculs, lancer l'enregistrement

En espérant que cela fonctionne sur MAC.

Pour la question 2 impossible pour moi, sans fichier, de répondre efficacement

A+
 

emaxou

XLDnaute Nouveau
Re : Copie de mise en forme et problème d'enregistrement automatique de fichier

Merci beaucoup Hasco pour cette réponse rapide!

En réalite, après quelques tests, j'ai réalisé qu'il ne s'agissait pas d'une question de rapidité mais d'une question de copie de mise en forme.
En effet, je copie une mise en forme conditionnelle dont les conditions portent sur les données de la feuille BDD.
Donc comme je copie uniquement l'onglet "fiche" dans un nouveau classeur, la mise en forme conditionnelle tombe à l'eau (car plus d'onglet BDD pour trouver ses conditions...)

Mon problème en réalité serait de copie la mise en forme en enlevant le côté conditionnelle. Je veux conserver la taille des colonnes et des lignes et les couleurs mais sans leur condition...
Et là je sèche!
 
G

Guest

Guest
Re : Copie de mise en forme et problème d'enregistrement automatique de fichier

Re,

La seule solution est de parcourir les cellules et/ou plages de cellules sur la copie de la feuille et tester celles qui répondent au conditions des mefc et si c'est True leur attribuée le format idoine.

A+
 

emaxou

XLDnaute Nouveau
Re : Copie de mise en forme et problème d'enregistrement automatique de fichier

Merci Hasco,
J'ai donc suivi tes conseils et pour parcourir chaque cellule et vérifier si la formule est vérifié j'ai trouvé ce code sur internet :

Set plg = Cells.SpecialCells(xlCellTypeAllFormatConditions)
For Each c In plg
With c
For Each fc In .FormatConditions
If fc.Type = 2 Then
If Evaluate(fc.Formula1) Then c.Interior.ColorIndex = fc.Interior.ColorIndex
Else
If Evaluate(fc.Formula1) = c Then c.Interior.ColorIndex = fc.Interior.ColorIndex
End If
Next
End With
Next
plg.FormatConditions.Delete

Il devrait parcourir les cellules avec une mise en forme conditionnelle et vérifier si la formule est appliqué et si oui, appliquer la mise en forme correspondante. A la fin, il supprime la mise en forme conditionnelle.
Problème, la macro me renvoie une incompabilité de type sur la ligne :
If Evaluate(fc.Formula1) Then c.Interior.ColorIndex = fc.Interior.ColorIndex

Pourtant fc.Formula1 contient bien une formule sous forme d'un string...

Est-ce que quelqu'un voit où est le problème?
 

Discussions similaires

Statistiques des forums

Discussions
311 720
Messages
2 081 915
Membres
101 838
dernier inscrit
Christelle.B86