Repeter une formule et une mise en forme automatiquement

Bonjour,

Dans un ficher excel ou j'ai plusieurs onglet, je dois répéter plusieurs manipulations ou répéter plusieurs formules basique sur tout les onglets. C'est très long. Je voudrais dans un premier temps savoir s'il est possible d'automatiser l'application de plusieurs formules en même temps et a toute les cellules via un bouton par exemple .

Je vous joint un ficher exemple. J'ai réduit le nombre d'onglet le limitant a deux ainsi que le nombre de case que j'ai réduit aussi à 2 pour cet exemple uniquement.

Ici je dois conserver uniquement la première lettre du nom de famille ainsi que l'année de naissance question de lois RGPD.

Moi je note la formule dans la première case puis je la tire vers le bas jusqu’à ma dernière case. Je répète cette opération des 10ène de fois sur plusieurs ficher excel différents.

C'est un peu la même chose pour la mise en forme ou je voudrais supprimer ensuite les colonnes dont j'ai appliqué la formule. Dans l'exemple j'ai réduit les colonnes afin de vous mettre l'ensemble mais idéalement je voudrais les supprimer automatiquement.

Malheureusement cela me prends un temps fou. Ça peut paraitre très simple pour certain mais pour moi pas si évident. Comme je l'ai expliqué dans ma présentation ma compétence sur excel ce limite a appliquer des formules assez simple dans l'ensemble.

merci d'avance aux personnes qui prendront part à ce sujet.

24exemple.xlsx (27.62 Ko)

Bonjour

Tu dois garder des onglet séparés ou tu pourrais mettre tout bout à bout ?

Il y a quoi dans les autres colonnes ?

Bonjour merci pour ta réponse.

Dans les autres onglets il y a exactement les même données. Faut compter entre environ 7 a 12 onglets par fichier excel. Donc pour répondre à ta question oui les onglets sont bout a bout. Si j'ai bien compris.

Merci

RE

Non tu n'as pas compris : je proposais de mettre les données des n onglets, transformées, bout à bout (les une sous les autres) dans un unique onglet

Ha ok effectivement je n'avais pas compris cela. Et bien non alors je ne peux pas les mettres bout a bout.

RE

Dans ce cas il faudrait plus d'infos :

  • les tableaux ne sont pas des tableaux structurés ?
  • Ils commencent toujours en A10 ?
  • Il y a quelques chose sur les 9 premières lignes ?

Je te remercie de l’intérêt et l'aide que tu m’apportes
pour répondre à tes questions

  • les tableaux ne sont pas des tableaux structurés ? je dirais qu'ils le sont.
  • Ils commencent toujours en A10 ? ==> Non parfois certain onglet début a la ligne 12, 13 et 14
  • Il y a quelques chose sur les 9 premières lignes ?==> Oui une référence par classeur ainsi que le logo de l'association

RE

  • les tableaux ne sont pas des tableaux structurés ? je dirais qu'ils le sont.

Réponse ambiguë... Un tableau structuré est un type d'objet bien précis : soit c'est un tableau structuré soit c'est une plage de données.

Dans le second cas avec des positions variables cela parait difficile à automatiser

http://www.excel-formations.fr/Trucs_astuces/Tableaux01.php

Bonjour,

Effectivement il ne sont pas.

Lorsque je clic sur une cellule du tableau je n'ai pas l'option "Création de tableau" qui apparait. J'en déduis donc qu'ils ne sont pas structurés.

En sélectionnant dans chaque onglet de chaque excel mes tableaux puis en les convertissants en tableaux structurés et ce que la tâche d'automatiser peut être réalisable ?

Merci

Bonjour

Oui.

Il faut

  • nommer les tableaux à traiter avec un nom commençant par un préfixe commun, t_ par exemple
  • avoir les même titres pour les colonnes à traiter

Un code VBA traitera tous les tableaux dont le nom commence par le préfixe et les titres précisés (dans ce code adapter Nom et Nais si les titres sont autres)

Sub Anonymiser()
Dim Infos As Range
Dim Tempo()
Dim WS As Worksheet, TS As ListObject
Dim Z As Byte, Col As Byte

    For Each WS In ThisWorkbook.Worksheets
        For Each TS In WS.ListObjects
            If Left(TS, 2) = "t_" Then
                With TS
                    For Z = 1 To 2
                        Col = IIf(Z = 1, .ListColumns("Nom").Index, .ListColumns("Nais").Index)
                        Set Infos = .ListColumns(Col).DataBodyRange
                        Tempo = WorksheetFunction.Transpose(Infos)
                        For X = 1 To UBound(Tempo)
                            If Z = 1 Then
                                Tempo(X) = UCase(Left(Tempo(X), 1))
                            Else
                                Tempo(X) = Year(Tempo(X))
                            End If
                        Next X
                        .ListColumns(Col).DataBodyRange.Value = WorksheetFunction.Transpose(Tempo)
                    Next Z
                End With
            End If
            TS.ListColumns(Col).DataBodyRange.NumberFormat = "0"
        Next TS
    Next WS
End Sub

Bonjour

Je tiens tout d'abord a vous remercier du temps que vous m'accordez. Je regarde à cela dès mon retour a mon domicile.

merci

Je vous fait donc un retour et comment j'ai procédé.

Pour un essais

- j'ai passé 3 tableaux (non anonymisé) en tableau structuré sur le même fichier excel mais dans 3 feuilles différentes
- j'ai renommé les cases t_Nom & t_Nais.

- j'ai récupéré le code VBA que j'ai mis dans un module que j'ai nommé "Anonymiser"

- J'ai créé un bouton sur une 4ème feuille afin de pouvoir exécuter le code.

- J'ai "Erreur d"exécution "9"

L'indice n’appartient pas à la sélection

je pense que je suis un boulet et que je dois mal m'y prendre....:(

Bonjour,

Pouvez-vous partager ce dernier fichier ? Merci.

PS: Evitez de donner le même nom à un module et une macro.

RE

Pour un essais

- j'ai passé 3 tableaux (non anonymisé) en tableau structuré sur le même fichier excel mais dans 3 feuilles différentes
- j'ai renommé les cases t_Nom & t_Nais.

Ce sont les tableaux qui doivent avoir un nom commençant par t_, pas les titres des colonnes.

Les titres des colonnes dans mon code sont Nom et Nais : à adapter s'ils sont différents dans tes tableaux

10anonymisertab.xlsm (30.46 Ko)

Le nom du module importe peu... J'ai laissé Module1

Bonjour,

Mille merci

J'ai réussi a appliquer votre formule sur l'ensemble de mes fichiers . Je tiens a vous remercier pour votre patience et votre pédagogie.
J'ai oublié une étape de suppression.

Je voudrais également supprimer la colonne D dans tous mes feuilles. Bien que j'ai le code sous les yeux je n'arrive pas vraiment a situer les étapes de son exécution.

A quel endroit dois-je intervenir afin d'ajouter cette étape.

merci

Bonjour

Je suis partie d'un fichier sans colonnes avec formules ajoutées pensant qu'à l'origine ces colonnes n'y étaient pas.

Pour les supprimer, il faudrait avoir leur titres

Ok je comprends. Mais même depuis des colonnes c'est déjà pas mal le rendu. Je suis extrêmement ravis du mal que vous vous êtes donné.

La colonne en question se nomme "Immat" et sera en théorie toujours en D

Merci

RE

Sub Anonymiser()
Dim Infos As Range
Dim Tempo()
Dim WS As Worksheet, TS As ListObject
Dim Z As Byte, Col As Byte

    For Each WS In ThisWorkbook.Worksheets
        For Each TS In WS.ListObjects
            If Left(TS, 2) = "t_" Then
                With TS
                    For Z = 1 To 2
                        Col = IIf(Z = 1, .ListColumns("Nom").Index, .ListColumns("Nais").Index)
                        Set Infos = .ListColumns(Col).DataBodyRange
                        Tempo = WorksheetFunction.Transpose(Infos)
                        For X = 1 To UBound(Tempo)
                            If Z = 1 Then
                                Tempo(X) = UCase(Left(Tempo(X), 1))
                            Else
                                Tempo(X) = Year(Tempo(X))
                            End If
                        Next X
                        .ListColumns(Col).DataBodyRange.Value = WorksheetFunction.Transpose(Tempo)
                    Next Z
                End With
            End If
            TS.ListColumns(Col).DataBodyRange.NumberFormat = "0"
            TS.ListColumns("Immat").Delete
        Next TS
    Next WS
End Sub

Une ligne en plus à la fin avant Next TS (cela suppose que cette colonne fasse partie du tableau structuré)

re,

super c'est génial. Bon maintenant je sais quelle fonction a cette ligne.

RE

Entre

For Each WS In ThisWorkbook.Worksheets

et

Next WS

cela traite chaque onglet et entre

For Each TS In WS.ListObjects

et

Next TS

Cela traite chaque tableau structuré de l'onglet traité

C'est ce qu'on appelle des boucles imbriquées

Rechercher des sujets similaires à "repeter formule mise forme automatiquement"