Copier coller formule et format

Bonjour,

La macro ci-dessous fonctionne correctement, à savoir crée autant d'onglet que de section.

Par contre, je ne récupère que des valeurs. Je souhaiterai récupérér également les formules et formats aussi bien pour la 1ere ligne "étiquettes" que pour les valeurs.

Merci pour vos conseils avisés.

Sub sections()

'Exportation avec suppression

Dim i&, x&, F As Worksheet

'Bloquer l'affichage écran

Application.ScreenUpdating = False

'Bloquer les alertes

Application.DisplayAlerts = False

'Avec la Feuille 1 (Nom a adapter)

With Sheets("PREP")

'/!\ *** Suppression de toutes les feuilles*** /!\

'Pour chaque feuille du classeur

For Each F In Worksheets

'Si le nom de la feuille n'est pas Feuil1, on la supprime

If F.Name <> .Name Then F.Delete

'Prochaine feuille

Next F

'/!\ ***************************************** /!\

'Pour chaque ligne (i) de feuil1

For i = 2 To .Cells(Rows.Count, 1).End(xlUp).Row

'Si il y a une erreur on passe à ligne suivante

On Error Resume Next

'On dit que F est la feuille du nom de la cellule

'ligne i colonne 21 (U)

'Si la feuille n'existe pas il y a une erreur gérée par "On Error Resume Next"

Set F = Sheets(.Cells(i, 21).Value)

'si il y a une erreur on l'annule

On Error GoTo 0

'Si F n'est rien (donc si la feuille n'éxiste pas

If F Is Nothing Then

'on la crée en lui donnant comme nom la valeur de la cellule

'ligne i colonne 21 (U)

Sheets.Add(After:=Sheets(Sheets.Count)).Name = .Cells(i, 21)

'Comme on crée la feuille on met l'en-tête des colonnes

'de A1 à U1

ActiveSheet.Range("A1:U1").Value = .Range("A1:U1").Value

'Fin de la condition

End If

'On cherche la première ligne vide de la bonne feuille (X)

x = Sheets(.Cells(i, 21).Value).Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row

'on met les valeurs des cellules de A à U de la feuille Feuil1

'de la ligne i dans les cellules de A à U de la ligne X de la bonne feuille

Sheets(.Cells(i, 21).Value).Range("A" & x & ":U" & x).Value = .Range("A" & i & ":U" & i).Value

'On dit que F n'est rien (préparation de la prochaine boucle)

Set F = Nothing

'Prochaine ligne de la feuille feuil1

Next i

'*** Mise en forme de toutes les feuilles (facultatif)***

'Pour chaque feuille du classeur

For Each F In Worksheets

'Si le nom de la feuille n'est pas Feuil1, on ajuste les colonnes

If F.Name <> .Name Then F.Columns.AutoFit

'Prochaine feuille

Next F

'********************************************************

'On active la feuille Feuil1 pour finir dessus

.Activate

'Arret de l'utilisation de la feuil1

End With

'Réactivation des alertes

Application.DisplayAlerts = True

'Réactivation de l'écran

Application.ScreenUpdating = True

'Message de fin de traitement

MsgBox "Exportation terminée", 64, "Compte-rendu"

End Sub

Bonjour,

Peux-tu joindre un fichier?

Cdlt

Bonjour

voici le fichier test.

Bonjour fdk,

Sauf erreur de ma part, je ne vois aucun lien vers ton fichier

Cordialement,

uras

sorry, je ne l'avais pas inséré dans le message.

28test-macro.xlsx (30.68 Ko)

Re,

Pour le format, tu devrais t'en sortir avec les propriétés Interior(.Color) (pour l'intérieur) ,Font (pour la police) et Border (pour les bordures) de l'objet Range (j'ai vu que tu utilisais que des .Value). Utilise l'aide du développeur (F1) si besoin.

Pour les formules, il me faut plus d'explications (La fomule "copiée" utilise-t'elle les mêmes cellules ou doit-elle être ajustée par rapport aux nouvelles données?)

Cordialement,

uras

La formule est calculée pour toutes les personnes dans l'onglet de base et doit être copiée dans tous les onglets.

actuellement, la formule est renvoyée en valeur.

re,

Essaye ça, je n'ai pas réussi à trouver une méthode simple pour garder ta mise en forme (au niveau police et bordures)

le bout de code qui a changé :

'/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\
'/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\      CHANGEMENT A PARTIR D'ICI       /\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\
'/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\

Dim j As Integer 'Nouvelle variable => compteur pour les colonnes

Sheets(.Cells(i, 21).Value).Range("A1:U1").AutoFilter 'FILTRE SUR ENTETE

'Fin de la condition
End If
'On cherche la première ligne vide de la bonne feuille (X)
x = Sheets(.Cells(i, 21).Value).Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row
'on met les valeurs des cellules de A à U de la feuille Feuil1
'de la ligne i dans les cellules de A à U de la ligne X de la bonne feuille
        For j = 1 To 21
        'Au lieu de copier ligne par ligne, on met les valeurs cellule par cellule
            If j = 19 Then 'Colonne S (contient une formule)
                'Sheets(.Cells(i, 21).Value).Cells(x, j).Formula = .Cells(i, j).Formula 'formule identique
                Sheets(.Cells(i, 21).Value).Cells(x, j).Formula = "=" & .Cells(x, 10).Address & "*" & .Cells(x, 13).Address & "%" 'Formule réecrite
                Sheets(.Cells(i, 21).Value).Cells(x, j).Interior.Color = .Cells(i, j).Interior.Color
            Else 'Colonne ne contenant pas de formule
                Sheets(.Cells(i, 21).Value).Cells(x, j).Value = .Cells(i, j).Value
                Sheets(.Cells(i, 21).Value).Cells(x, j).Interior.Color = .Cells(i, j).Interior.Color
            End If
        Next j
'Sheets(.Cells(i, 21).Value).Range("A" & x & ":U" & x).Value = .Range("A" & i & ":U" & i).Value

'Je n'ai pas reussi à copier les bordures et la police facilement pour la mise en forme, je te laisse chercher
'/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\
'/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\             FIN CHANGEMENT           /\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\
'/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\

En esperant t'avoir aider!

uras

17test-macro-1.xlsx (30.72 Ko)
Rechercher des sujets similaires à "copier coller formule format"