Transformer les fonctions excel en code vba

MAN

XLDnaute Occasionnel
bonjour le forum.
j'ai un tableau. en temps normal, il devrait avoir 366 feuilles soit une année. je souhaiterai remplacer les fonctions qui lient les differentes feuilles en code VBA je vous joins le fichier.
les deux fichiers actuels ne sont que des exemples.
 

Pièces jointes

  • travail.xlsx
    20.4 KB · Affichages: 47
  • travail.xlsx
    20.4 KB · Affichages: 41
  • travail.xlsx
    20.4 KB · Affichages: 50

MichD

XLDnaute Impliqué
Re : Transformer les fonctions excel en code vba

Bonjour,

Pourquoi ne pas te créer une feuille modèle que tu laisses dans le classeur (que tu peux masquer)
ou que tu peux enregistrer comme "Feuille modèle".

À chaque fois que tu as besoin d'une feuille, tu ajoutes un exemplaire de la feuille modèle.
 

MAN

XLDnaute Occasionnel
Re : Transformer les fonctions excel en code vba

c'est vrai. je pourrai le faire cependant, chaque feuille est liée a la précédente. vu la célérité des choses, si je pouvais avoir un code qui me permet de faire cet exercice sans des copier coller quotidiens, je serai vraiment ravi.
 

MichD

XLDnaute Impliqué
Re : Transformer les fonctions excel en code vba

A ) Les plages nommées affichent #Ref! dans le classeur que tu as publié.

B ) Si tu ne veux pas avoir de problèmes avec les plages nommées lors des copies de feuille,
Ces plages nommées doivent être définies au niveau de la feuille. En pratique, le nom
de la plage nommée doit avoir le nom de la feuillle 1!toto et ce, pour les plages nommées
des feuilles 1 et 2 .

C ) tu insères cette macro dans un module STANDARD de ton fichier et lorsque tu veux ajouter
une feuille, tu appelles la macro.

D ) Tu dois sauvegarder ton fichier avec une extension .xlsm car l'extension .xlsx ne sauvegarde pas les macros.

VB:
Sub Ajout_Feuille()
Dim Sh As Worksheet, Trouve As Range
Dim Expression As String, Remplace As String

Application.ScreenUpdating = False
Application.DisplayAlerts = False
With ThisWorkbook
    Set Sh = .Worksheets(.Worksheets.Count)
    Sh.Copy After:=.Worksheets(.Worksheets.Count)
   
    With .ActiveSheet
        .Name = CLng(Sh.Name) + 1
        With .UsedRange
            Expression = "'" & Sh.Previous.Name & "'"
            Set Trouve = .Find(What:=Expression, _
                    LookIn:=xlFormulas, LookAt:=xlPart, _
                    SearchOrder:=xlByRows, _
                    SearchDirection:=xlNext, MatchCase:=False _
                    , SearchFormat:=False)
            
            If Not Trouve Is Nothing Then
                Do
                    X = Trouve.Formula
                    Remplace = "'" & Sh.Name & "'"
                    Y = Application.Substitute(X, Expression, Remplace)
                    Trouve.Formula = Y
                    Set Trouve = .FindNext(Trouve)
                Loop Until Trouve Is Nothing
            End If
        End With
    End With
End With
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
 

MAN

XLDnaute Occasionnel
Re : Transformer les fonctions excel en code vba

grand merci MICH. j'ai simplement oublié de te dire que les codes VBA m'échappent pour baucoup. s'il te plait peux tu me ce fichier traité afin que je m'en accomoder? s'il te plait.
 

MichD

XLDnaute Impliqué
Re : Transformer les fonctions excel en code vba

Voici ton fichier.


Pour voir la macro, raccourci clavier : Alt + F11
Tu choisis ton projet VBA, affiche l'arborescence des objets du classeur
et tu double-cliques sur module1

Pour faire la copie de la feuille, raccourci clavier Alt + F8
Dans la fenêtre, tu sélectionnes le nom de la macro et tu appuies sur le bouton "Exécuter"

Ne pas oublier de transformer les plages nommées au niveau du classeur en plages
nommées au niveau de la feuille.
 

Pièces jointes

  • copie feuille.xlsm
    30.7 KB · Affichages: 38
  • copie feuille.xlsm
    30.7 KB · Affichages: 42
  • copie feuille.xlsm
    30.7 KB · Affichages: 43

MAN

XLDnaute Occasionnel
Re : Transformer les fonctions excel en code vba

j'ai finalement réussi a executer cette macro. cependant, elle recopie tout .
je souhaite simplement recopier les cellules liées cet a dire celles dont la formule est liée a la feuille précédente. vous pouvez voir sur les feuilles 3 et 4 le résultat de l'execution de cette macro. s'il vous plait
 

Pièces jointes

  • travail.xlsm
    41 KB · Affichages: 42
  • travail.xlsm
    41 KB · Affichages: 46
  • travail.xlsm
    41 KB · Affichages: 41

MAN

XLDnaute Occasionnel
Re : Transformer les fonctions excel en code vba

AH je n'avais pas bien vérifié l'aplicabilité de ma macro. la commande .SpecialCells(xlCellTypeConstants, 23).ClearContents est celle qu'il fallait. cependant, je voudrai qu'elle ne s'applique qu'aux cellules blanches uniquement. car mon tableau a comme tous les tableaux les entetes et les intitulés qu'il serait fastidieux de recommencer indéfiniment. tenez l'exemple qui suit.
 

Pièces jointes

  • travail.xlsm
    54.3 KB · Affichages: 53
  • travail.xlsm
    54.3 KB · Affichages: 51
  • travail.xlsm
    54.3 KB · Affichages: 56

MichD

XLDnaute Impliqué
Re : Transformer les fonctions excel en code vba

La procédure de remplacement

VB:
Sub Ajout_Feuille()
Dim Sh As Worksheet, Trouve As Range
Dim Expression As String, Remplace As String

Application.ScreenUpdating = False
Application.DisplayAlerts = False

With ThisWorkbook
    Set Sh = .Worksheets(.Worksheets.Count)
    Sh.Copy After:=.Worksheets(.Worksheets.Count)
   
    With .ActiveSheet
        .Name = CLng(Sh.Name) + 1
        With .UsedRange
            Expression = "'" & Sh.Previous.Name & "'"
            Set Trouve = .Find(What:=Expression, _
                    LookIn:=xlFormulas, LookAt:=xlPart, _
                    SearchOrder:=xlByRows, _
                    SearchDirection:=xlNext, MatchCase:=False _
                    , SearchFormat:=False)
            
            If Not Trouve Is Nothing Then
                Do
                    X = Trouve.Formula
                    Remplace = "'" & Sh.Name & "'"
                    Y = Application.Substitute(X, Expression, Remplace)
                    Trouve.Formula = Y
                    Set Trouve = .FindNext(Trouve)
                Loop Until Trouve Is Nothing
            End If
            On Error Resume Next
            For A = 4 To 38 Step 4
                .Range("B" & A).ClearContents
                .Range("D" & A).ClearContents
                .Range("F" & A).ClearContents
                .Range("G" & A).ClearContents
                .Range("H" & A).ClearContents
            Next
            For A = 6 To 38 Step 4
                .Range("B" & A).ClearContents
                .Range("D" & A).ClearContents
                .Range("H" & A).ClearContents
            Next
        End With
    End With
End With
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
 

Discussions similaires

Réponses
4
Affichages
195
Réponses
0
Affichages
126

Statistiques des forums

Discussions
312 286
Messages
2 086 807
Membres
103 392
dernier inscrit
doc_banane