RESOLU Récupérer une ou des plage(s), la (ou les) traiter et les restituer selon

mouftie

XLDnaute Junior
Bonjour,
L'objetif de ma procédure est d'afficher / masquer les formules de certaines plages choisies par l'utilisateur
J'ai fait de nombreux essais, mais je ne vais pas loin :
Code:
Sub AffFormule()
Dim Form As String
Dim Plg As Range
Set Plg = Application.InputBox("sélectionner la ou les plage(s) où " _
    & Chr(10) & "afficher / Masquer les formules" & Chr(13) _
    & "Insérer des points virgule entre les sélections", _
    "Conversion Formule / Résultat", Type:=8)
        
    Form = Range("plg").FormulaLocal     'La méthode Range a échoué
    Form = Range("B1:B4").FormulaLocal 'incompatibilité de type
    Form = Range("B1").FormulaLocal      ' FONCTIONNE
' affichages en dur  des formules - en attendand de savoir sélectionner la destination j'ai pris J1
'je voudrais avoir une inputbox pour choisir la destination, éventuellement sur une autre feuille
    Range("J1") = "'" & Form                    'Renvoie bien la formule "=...
    Range("J1:J4") = "'" & Range("B1:B4")  'Incompatibilité de type
End Sub
Une fois que j'aurai réussi (enfin avec votre aide) je n'aurai "plus qu'à" faire une condition si Plg commence par l'apostrophe, afficher le résultat, sinon afficher la formule.

Merci de votre aide
 
Dernière édition:

kingfadhel

XLDnaute Impliqué
Re : VBA Récupérer une ou des plage(s), la (ou les) traiter et les restituer selon

Salut mouftie, le forum

Voila un code qui te permet de masquer/deverrouiller les formules

Code:
'Code pour masquer

Sub Masquer_Formules()
 Dim plg As Range
  Set plg = Application.InputBox _
   ("Sélectionner une Plage/Cellule", , , , , , , 8)
 plg.FormulaHidden = True
 plg.Locked = True
 ActiveSheet.Protect
 End Sub

Code:
'Code pour Déverrouiller

Sub Deverrouiller()
ActiveSheet.Unprotect
End Sub
 

mouftie

XLDnaute Junior
Re : VBA Récupérer une ou des plage(s), la (ou les) traiter et les restituer selon

Bonjour Kingfadhel,
Je ne cherche pas à verouiller mes cellules, mais à afficher ou non, en toute lettre ou en résultat une formule
ex.
en toute lettre =SI(ESTNUM(A1);"Num";"Txt")
en résulat Num ou Txt
Merci quand même
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : VBA Récupérer une ou des plage(s), la (ou les) traiter et les restituer selon

Bonsoir mouftie, kingfadhel

Pas certain d'avoir tout compris. Une interprétation dans le fichier joint ?:

Le code dans le module de Feuil1:
VB:
Sub AffFormule()
Dim Plg As Range, xcell As Range

Set Plg = Application.InputBox("sélectionner la ou les plage(s) où " _
  & Chr(10) & "afficher / Masquer les formules" & Chr(13) _
  & "Insérer des points virgule entre les sélections", _
  "Conversion Formule / Résultat", Type:=8)
        
Application.ScreenUpdating = False
For Each xcell In Plg
  If xcell.HasFormula Then
    xcell = "'" & xcell.FormulaLocal
  Else
    xcell.FormulaLocal = xcell.Value
  End If
Next xcell
Range("A:L").EntireColumn.AutoFit
Application.ScreenUpdating = False
End Sub
 

Pièces jointes

  • mouftie v1.xlsm
    17.9 KB · Affichages: 64
Dernière édition:

kingfadhel

XLDnaute Impliqué
Re : VBA Récupérer une ou des plage(s), la (ou les) traiter et les restituer selon

Salut tous les XLDs

je suis désolé, je ne t'ai pas compris la première fois.

voila un deuxième code testé fonctionnel meme pour une plage de cellule contenant des formules

Code:
Sub Afficher()
Dim plg As Range
  Set plg = Application.InputBox _
   ("Sélectionner une Plage/Cellule", , , , , , , 8)
For Each cel In plg
cel.Formula = "'" & cel.Formula
Next
End Sub

Sub Masquer()
Dim plg As Range
  Set plg = Application.InputBox _
   ("Sélectionner une Plage/Cellule", , , , , , , 8)
For Each cel In plg
cel.Formula = "=" & Right(cel.Formula, Len(cel.Formula) - 1)
Next
End Sub
 

mouftie

XLDnaute Junior
Re : VBA Récupérer une ou des plage(s), la (ou les) traiter et les restituer selon

Bonsoir et merci à vous deux.
Kingfadhel, ta proposition est intéressante, mais l'inconvénient, c'est qu'elle remplit les cellules vides d'une apostrophe qu'on ne voit pas, cela peut être dangereux par la suite... on doit pouvoir y remédier avec des conditions HasFormula

J'ai d'ailleurs appris une nouvelle propriété Range.HasFormula qui est très intéressante.
MaPomme, j'ai beaucoup apprécié ta finition avec
Range("A:L").EntireColumn.AutoFit
:rolleyes:

Cette petite macro est bien pratique pour étudier ses erreurs de formule ; les touches Ctrl + " qui affichent les formules jouent sur toute la feuille
ou encore pour mon fichier personnel des formules inintéressantes que je note.

Je vais encore l’affiner pour mes besoins (gestion des erreurs et bouton annulé), mais je suis vraiment ravie...
Merci encore
 

kingfadhel

XLDnaute Impliqué
Re : RESOLU Récupérer une ou des plage(s), la (ou les) traiter et les restituer selon

Bonsoir,
Moi aussi j'apprends chaque jour du nouveau sur ce forum.
Celui qui n'avance pas, recule.

Je suis occasionnel quant à mapomme, c'est un XLDnaute Accro, d'où l'efficacité et la fiabilité de ces codes, un jour je serai comme lui et pour quoi pas meilleur ;)
 

mouftie

XLDnaute Junior
Re : RESOLU Récupérer une ou des plage(s), la (ou les) traiter et les restituer selon

Bonsoir,
Je reviens au sujet, car je n'arrive pas à traiter l'invalidation de l'inputBox dans vos propositions
En effet, si on clique sur annuler on reçoit ce message :
Erreur d'exécution 13 - incompatibilité de type
Et on est jeté

C'est dans le Set que ça ce passe, donc tout ce que j'écris après ne sert à rien.
Merci
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : RESOLU Récupérer une ou des plage(s), la (ou les) traiter et les restituer selon

Bonsoir mouftie :), kingfadhel :)

Une manière de faire est d'utiliser le code suivant:
VB:
...

On Error Resume Next
Set Plg = Application.InputBox("sélectionner la ou les plage(s) où " _
  & Chr(10) & "afficher / Masquer les formules" & Chr(13) _
  & "Insérer des points virgule entre les sélections", _
  "Conversion Formule / Résultat", Type:=8)
If Plg Is Nothing Then Exit Sub
On Error GoTo 0

...
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 248
Messages
2 086 594
Membres
103 250
dernier inscrit
keks974