afficher toutes les formules d'un fichier excel

  • Initiateur de la discussion david.J
  • Date de début
D

david.J

Guest
bonjour,

je suis etudiant en seconde année informatique, et durant mon stage je dois effectuer des procedure sur des fichiers excel, mais ayant peu de connaissance en excel pouvez vous m'aider pour se qui suit:

je dois pouvoir visualiser toutes les formules d'un fichier excel à la place des resultats et ainsi pouvoir en faire un imprime ecran!

pouriez vous m'aider et m'expliquer (si cette tache et réalisable) les opérations a effectuer!

merci d'avance

sincere salutation!

david.J
 

Hervé

XLDnaute Barbatruc
Bonjour tout le monde :)

sinon, ces codes, créent une nouvelle feuille ('formule') avec en colonne A le nom des feuilles du classeur, en B l'adresse des cellules contenant une formule et en C la formule.

plage limitée aux cellules a1:n100 de chaque feuille.


Option Explicit
Sub Bouton1_QuandClic()
Dim tablo() As String
Dim i As Integer, x As Integer
Dim c As Range
Dim ws As Worksheet

If feuilleexiste('formule') Then
        Application.DisplayAlerts =
False
        Sheets('formule').Delete
End If

For Each ws In Worksheets
       
For Each c In ws.Range('a1:n100')
               
If c.HasFormula Then
                        x = x + 1
                       
ReDim Preserve tablo(1 To 3, 1 To x)
                        tablo(1, x) = ws.Name
                        tablo(2, x) = c.Address(0, 0)
                        tablo(3, x) = c.FormulaLocal
               
End If
       
Next c
Next ws

For i = 1 To UBound(tablo, 2)
        tablo(3, i) = ''' & tablo(3, i)
Next i

With Sheets.Add
        .Name = 'formule'
        .Range('a1').Resize(UBound(tablo, 2), 3) = Application.Transpose(tablo)
End With

End Sub
'_________________________________________________________
Public Function feuilleexiste(nom As String) As Boolean
Dim f As Worksheet

On Error GoTo pasbon
Set f = Sheets(nom)
feuilleexiste =
True
Exit Function
pasbon:
feuilleexiste =
False
End Function


PETITE QUESTION :

dans ce code, j'utilise une fonction (feuilleexiste) pour savoir si la feuille existe(logique), je la trouve particulièrement moche, quelqu'un aurait un code afin d'eviter le goto.

merci.

salut
 
J

JJ59

Guest
Bonjour à tous


La macro d'Hervé m'interesse.
J'ai un fichier composé de 19 onglets, le nbre de lignes varie de 100 à 500.
Pour me situer, je ni connais pas grand chose en macro.
Voici mes questions.
Où se place cette macro ?(dans un module, dans Thisworbook)
Peut-on modifier la plage (a1:n100)?
Peut-on envisager de selectionner les onglets à traiter ?
Si des cellules sont nommées, peut-on récupèrer les noms.
Actuellement cette macro indique
la feuille, la cellule et la formule.

Merci d'avance.

JJ59
 
H

Hello

Guest
Hello

Trouvé dans les archives, ListeNomsTi : xla
à placer dans les macros complémentaires

liste toutes les formules nommées, par cellule,par feuille [file name=ListeNomsTi.zip size=17470]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/ListeNomsTi.zip[/file]
 

Pièces jointes

  • ListeNomsTi.zip
    17.1 KB · Affichages: 136
  • ListeNomsTi.zip
    17.1 KB · Affichages: 135
  • ListeNomsTi.zip
    17.1 KB · Affichages: 131
J

JJ59

Guest
Bonsoir à tous

With Sheets.Add
.Name = 'formule'
.Range('a1').Resize(UBound(tablo, 2), 3) = Application.Transpose(tablo)
End With

Voici un extrait de la macro d'Hervé.
Pouvez-vous me l'expliquer ?
Que ce passe-t-il exactement dans ce morceau de code ?
A ce stade, on crée une feuille 'formule', on écrit les données à partir de A1, (c'est là que çà se gâte pour moi)
je ne comprends pas le .resizeUBound(tablo, 2), 3) = Application.Transpose(tablo)

Je suis entrain de m'inspirer de cette macro pour éditer les formules d'un classeur excel.
J'arrive à éditer, mais pour certaines feuilles
la macro plante à cet endroit.
J'aimerai bien résoudre ce problème sinon je metttrai un extrait en ligne.

Merci d'avance

Bonne nuit
Jean-Jacques
 
J

JJ59

Guest
Bonjour à tous


Pouvez-vous me renseigner sur l'instruction ?

resize(.....),3)=Application.Transpose(tablo)

J'avance petit à petit dans ma compréhension, mais là je bloque.

Merci d'avance

Jean-Jacques
 

Ti_

Nous a quitté
Repose en paix
Salut
Je réponds à Hervé pour tester simplement l'existence d'une feuille. Voici une solution parmi d'autres :

Private Function ExisteFeuille(ByVal WsName$) As Worksheet
On Error Resume Next
Set ExisteFeuille = ThisWorkbook.Worksheets(WsName)
End Function

Cette fonction n'est pas un booléen, elle renvoie l'objet feuille si elle réussit, donc on peut la tester comme ceci :

If ExisteFeuille('MaFeuille') Is Nothing then ...

Mais si tu veux absolument une fonction qui renvoie en booléen, tu peux la remplacer comme suit :

Private Function ExisteFeuille(ByVal WsName$) As Boolean
On Error Resume Next
ExisteFeuille = Not ThisWorkbook.Worksheets(WsName) Is Nothing
End Function
 

Hervé

XLDnaute Barbatruc
Bonjour tout le monde

Merci Ti :), c'est mieux.

jj59, .Range('a1').Resize(UBound(tablo, 2), 3) = Application.Transpose(tablo)

ce code permet de renvoyer la variable tablo sans faire de boucle.

.resize(ligne, colonne) permet de redéfinir une plage, si on connaissait par avance le nombre de ligne de tablo (10 lignes par exemple) on pourrait ecrire : .range('a1').resize(10,3)....

comme on ne connait pas le nombre de lignes on utilise ubound(tablo) qui renvoi la limite supérieur de la variable tablo.

= Application.Transpose(tablo) permet de 'renverser' la variable tablo.

en effet, ton tablo à été remplie en colonne, et nous on veut un affichage en lignes.

pour comprendre la différence teste ce code :
.Range('a1').Resize(3, UBound(tablo, 2)) = tablo

le code peut planter pour plusieurs raisons.

Principalement si il n'y à aucune formule dans le classeur, et donc tablo est vide, pour eviter ceci il suffit de tester la variable X :


If x = 0 Then
        MsgBox 'Aucune formule trouvée.'
       
Exit Sub
End If

For i = 1 To UBound(tablo, 2)
                tablo(3, i) = ''' & tablo(3, i)
Next i

With Sheets.Add
        .Name = 'formule'
        .Range('a1').Resize(UBound(tablo, 2), 3) = Application.Transpose(tablo)
End With


voilà, ouf, j'ai fini
:)

en espérant t'avoir aidé, et n'hésites pas à revenir en cas de problème.

salut
 
J

JJ59

Guest
Bonjour Hervé,le Forum

Merci pour tes explications.
Dans la partie Wiki, j'ai trouvé des exemples qui n'avaient permis de comprendre ce que tu m'as expliqué.
Mais j'ai encore un souci.
Pour 95% des onglets de mon classeur, la macro fonctionne bien.Par contre pour les autres j'ai un message d'erreur :
'erreur d'execution 13
incompatibilité de type'.
Dans ces onglets il y a des formules.
Le code en erreur est toujours la ligne
.range('a3').resize(......)
As-tu une ou des pistes pour orienter mes recherches ?
Merci d'avance

Jean-Jacques
 

Discussions similaires

Statistiques des forums

Discussions
312 228
Messages
2 086 421
Membres
103 205
dernier inscrit
zch