Copie de la mise en forme d'une cellule : Erreur 1004 ?

jb084

XLDnaute Nouveau
[Résolu] Copie de la mise en forme d'une cellule : Erreur 1004 ?

Bonjour,

Dans le traitement d'un fichier Excel issu d'un logiciel externe, je souhaite appliquer à une cellule la mise en forme d'une cellule d'origine.

Le fichier sur lequel je travaille contient un onglet "Params", qui contient une cellule (nommé STYLE1). Actuellement, je retraite ce fichier, en supprimant les lignes vides. Je voudrais ajouter à cette procédure l'application d'une mise en forme particulière (pour débuter, j'applique toujours la même, mais le but est d'enb appliquer une différete suivant différents cas) :
Code:
Sub OuvreModele_Tsynth(ficname As String, marge_bas As Integer, onglet_corps As Integer)
' Paramètres
'   ficname => Nom du fichier complet
'   marge_bas => marge entre la fin des lignes et le début des totaux (s'indique en nombre de lignes)
'   onglet_corps => numéro de l'onglet à retraiter (suppression des lignes vides)
    'Déclaration des variables
    Dim wbExcel As Excel.Workbook 'Classeur Excel
    Dim wsExcel As Excel.Worksheet 'Feuille Excel
    Dim fin_lignes, debut_lignes, derli, r As Integer
        
    'Ouverture du fichier dans la même instance
    Set wbExcel = Application.Workbooks.Open(ficname)
    
    'wsExcel correspond à la l'onglet à retraiter (corps)
    Set wsExcel = wbExcel.Worksheets(onglet_corps)
   
    'On récupère la ligne à laquelle commence le corps du devis
    debut_lignes = wsExcel.Range("NIV1").Row
    'On récupère la fin du corps du devis
    fin_lignes = wsExcel.Range("NIV_TOTAL").Row - marge_bas
    ' On récupère la dernière ligne du fichier
    With wsExcel.UsedRange
      derli = .Row + .Rows.Count - 2
    End With
    Application.ScreenUpdating = False
    ' On boucle sur les lignes du corps du devis
    For r = fin_lignes To debut_lignes Step -1
      ' Si la colonne A ne contient rien, cela signifie que la la ligne doit être supprimée
      If wsExcel.Range("A" & r).Text = "" Then
        wsExcel.Rows(r).Delete
      Else
        ' Puis on redimensionne les lignes automatiquement
[B]        wSheets("Params").Range("STYLE1").Copy
        wsExcel.Range("A" & r).Select
        Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
            SkipBlanks:=False, Transpose:=False
        Application.CutCopyMode = False
        wsExcel.Rows(r).EntireRow.AutoFit[/B]
      End If
    Next r
End Sub

A l'exécution, j'ai me message "1004 : La méthode select de la classe Range a échoué". Le morceau en gras est récupéré à partir de l'enregistreur de macro, il est donc possible que celui soit "lourd"...

Sauriez vous me dire d'où vient le problème ?

Merci d'avance

NB : Je voudrai vous ùmettre le fichier Excel à dispo, mais c'est relativement difficile, car celui-ci est en chantier, et contient d'autres informations qui peuvent vous "perturber"...
 
Dernière édition:

Pierrot93

XLDnaute Barbatruc
Re : Copie de la mise en forme d'une cellule : Erreur 1004 ?

Bonjour jb

modifie peut être comme suit :

Code:
wSheets("Params").Range("STYLE1").Copy
With wsExcel.Range("A" & r)
    .PasteSpecial Paste:=xlPasteFormats
        Application.CutCopyMode = False
End With
wsExcel.Rows(r).EntireRow.AutoFit

non testé...

bonne fin d'après midi
@+
 

jb084

XLDnaute Nouveau
Re : Copie de la mise en forme d'une cellule : Erreur 1004 ?

Désolé pour le dérangement, je vais passer par une autre méthode, moins contraignante (changement directe de la couleur de fond), et qui correspond mieux.

Merci quand même pour ta réponse :jap:
 

Discussions similaires

Statistiques des forums

Discussions
312 211
Messages
2 086 292
Membres
103 171
dernier inscrit
clemm