Function VBA Excel copiant des cellules

  • Initiateur de la discussion Initiateur de la discussion PaulCusin
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

P

PaulCusin

Guest
Bonjour,

Je bute actuellement sur une fonction Excel qui ne copie les cellules que lorsqu'elle est appelée par une Sub.
Faut-il modifier une variable de contexte?
Voici la Function:
'Public Function CopieValeurs(Ligne As Long, Colonne As Long, NbLignes As Single)
Public Static Function CopieValeurs()


'Dim Ligne As Long
'Ligne = Cells(6, 2).Value
Dim i As Single
'MsgBox ("Ligne: " & Ligne & " Colonne: " & Colonne & " NbLignes: " & NbLignes)
Worksheets("Feuil1").Activate

'For i = 1 To NbLignes
'MsgBox ("*Ligne: " & Ligne & " Colonne: " & Colonne & " NbLignes: " & NbLignes)
'Sheets("Données").Cells(Ligne, Colonne).Value = Sheets("Données").Cells(Ligne, Colonne).Value
'MsgBox ("Avant: " & Cells(Ligne, Colonne).Value)
'Cells(Ligne, Colonne).Value = Cells(1, 11).Value
'Sheets("Données").Cells(Ligne, Colonne).Value = "$$$$$$"
'Cells(5, 3).Value = "QQQ"
'MsgBox ("Après: " & Cells(Ligne, Colonne).Value)
'MsgBox ("Après: " & Cells(5, 3).Value)
Range("E6:E13").Select
'MsgBox ("Range Select1" & Cells(5, 3).Value)
Selection.Copy
'MsgBox ("Copy")
'Range("G6").Select
Range(Cells(6, 6), Cells(6, 7)).Select
'MsgBox ("Range Select2")
ActiveSheet.Paste
'MsgBox ("Paste")
'Ligne = Ligne + 1
'Next i
'Range(Cells(1, 1), Cells(5, 3))
'Range(Cells(5, 3)).Select
'macro2

CopieValeurs = Cells(5, 3).Value
'Exit Function

End Function
Et voici la Sub qui l'appelle:
Sub macro1()
'
' Macro1 Macro
' Macro enregistrée le 22/07/2010 par Paul CUSIN
'

'
'Range("E6:E13").Select
'Selection.Copy
''Range("G6").Select
'Range(Cells(6, 6), Cells(6, 7)).Select
'ActiveSheet.Paste
MsgBox CopieValeurs()

End Sub
A toutes fins utiles, je joins l'Excel créé pour cerner cette difficulté inexpliquée (pour le moment).

Merci de vos investigations et explications.

A bientôt.
 

Pièces jointes

Re : Function VBA Excel copiant des cellules

Bonjour Paul, et bienvenue sur le forum,

Il faut que tu explicite ta demande.
Une fonction ne peut pas agir sur les feuilles ou cellules(activation, sélection, copie etc.). Elle ne peut que retourner un résultat.

Alors décrit nous le but que tu cherches à atteindre.

A+
 
Re : Function VBA Excel copiant des cellules

Bonjour,

Ce que je cherche à faire:
Pour des périodes anciennes, ne pas avoir à recalculer, via une fonction, des cumuls et pourcentages à partir d'un grand tableau de données qui évolue en permanence.
Pour ce faire, l'idée était, pour ces périodes anciennes, de copier les valeurs des cumuls et pourcentages pour les figer (copie des valeurs et formats).

NB: Le fichier Test ne correspond qu'à l'identification de la difficulté rencontrée, à savoir que la fonction se refusait à copier les cellules en valeur, mais faisait le reste.

En espérant avoir été suffisamment explicite pour recueillir des suggestions.

A bientôt.
 
Re : Function VBA Excel copiant des cellules

Re,
Le fichier Test ne correspond qu'à l'identification de la difficulté rencontrée, à savoir que la fonction se refusait à copier les cellules en valeur, mais faisait le reste.
As-tu bien lu mon précédent post?

Une fonction ne peut pas agir sur des cellules, une procédure (Sub) peut le faire.

A+
 
Re : Function VBA Excel copiant des cellules

D'où mon interrogation:
Pourquoi la même Function le fait-elle quand elle est appelée par une Sub qui ne fait qu'appeler la Function?
Ce qui amène par ailleurs la question suivante:
Quelles sont les instructions ineffectives/inactives dans le cadre d'une fonction, sachant que l'aide VBA indique: "Une procédure Function est similaire à une procédure Sub, mais une fonction peut également renvoyer une valeur"?
 
Re : Function VBA Excel copiant des cellules

Bonjour PaulCusin, Hasco,

Je pense que les limitations citées par Hasco ne sont effectives que lorsque la fonction est appellée directement depuis la feuille de calcul (pas lorsque la fonction est appelée depuis un Sub).

Pour tester, essayer avec cette fonction (qui cache une ligne rentrée en paramètre et retourne VRAI si la ligne a bien été cachée et FAUX dans le cas contraire) :
VB:
Public Function CacherLigne(numeroLigne As Long) As Boolean
    ActiveSheet.Rows(numeroLigne).Hidden = True
    CacherLigne = ActiveSheet.Rows(numeroLigne).Hidden
End Function
Cette fonction dans ce Sub
VB:
Sub test()
Dim rep As Boolean

    rep = CacherLigne(3)
    
    Debug.Print rep
End Sub
a pour effet de cacher la ligne 3 et d'afficher VRAI dans la fenêtre d'exécution : la fonction a bien cachée la ligne.

Par contre, saisir =CacherLigne(5) dans une cellule ne cachera pas la ligne 5 et retournera FAUX.

a+
 
Dernière édition:
Re : Function VBA Excel copiant des cellules

Re,

Pourquoi la même Function le fait-elle quand elle est appelée par une Sub qui ne fait qu'appeler la Function?

Ce que je te disais tout à l'heure, n'était valable que pour les fonctions personnalisées appelées depuis une feuille de calcul. Les fonctions de feuille de calcul sont gérées différement par excel, c'est pourquoi elle ne doivent que renvoyer une valeur. Cette valeur peut faire intervenir des valeurs ou calculs à partir d'autre cellules ou feuilles mais sans les changer ni aucun action.

Exemple:

Code:
Function MaFonction(c As Range)
MaFonction = Range("A3") * c
End Function

A+

[Edit]Hello mRomain, j'ai mis du temps à te voir🙄
 
Dernière modification par un modérateur:
Re : Function VBA Excel copiant des cellules

Merci à tous les deux pour ces clarifications.
Je vais donc traiter autrement cette copie en valeur et format, a priori une Sub à l'ouverture de l'Excel.

A bientôt.
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
5
Affichages
910
Réponses
1
Affichages
323
  • Question Question
XL 2021 VBA excel
Réponses
4
Affichages
452
Réponses
2
Affichages
411
Retour