C/c d'une plage vers une feuille en fc d'argument

Bonjour à tous,

C'est donc mon premier post, la première fois que malgré des heures de recherche sur différents forums je n'arrive pas à résoudre mon problème.

Pour expliciter le problème :

J'ai un fichier excel qui comporte X onglets dont un comportant des données et les autres servant à analyser ces données.

J'aimerais à l'aide d'une fonction ou d'une procédure (j'ai du mal à déterminer ce que je dois utiliser) copier une partie des données de mon onglet de données à un de mes onglets d'analyse et ceci en fonction de l'adresse de 2 cellules que je lui passe par argument.

Pour expliciter tout ca :

J'aimerais copier les valeurs de l'onglet data, de la plage de cellule BB220 à BB229 (Ce sont les arguments) dans l'onglet analyse à partir de la cellule A23

Sachant que j'essaye depuis quelques jours à l'aide d'une fonction et que je n'y arrive pas voici l'idée

Function data(Y_deb As Range, Y_fin As Range)

Sheets("Data_post_essai"). Activate
 Range(Y_deb, Y_fin). Select
Selection.Copy
Sheets("MesureULAB").Select
Range("A23").Select
ActiveSheet.Paste

data = "j'ai copié"
End Function

J'ai aussi essayé ca d'après d'autres forums

Function data(Y_deb As Range, Y_fin As Range)

With Sheets("Data_post_essai")
    .Range(Y_deb, Y_fin).Copy _
    Sheets("MesureULAB").Range("A23")
End With

End Function

La cellule ou j'entre la formule est renvois alors #valeur! et rien n'est copié coller.

Merci d'avance si quelqu'un arrive à résoudre mon problème

Informatiquement votre,

Laura

essaye ce code : je passe en paramètres les numéros de lignes et de colonnes des cellules de début et de fin de plage

Function data(ligne_deb As Long, col_debut As Long, ligne_fin As Long, col_fin As Long)

Sheets("feuil1").Activate

Range(Cells(ligne_deb, col_debut), Cells(ligne_fin, col_fin)).Select

Selection.Copy

Sheets("feuil2").Select

Range("A23").Select

ActiveSheet.Paste

End Function

Public Sub test()

Call data(3, 5, 6, 8)

End Sub

Bonjour,

Des définitions à assimiler !

Une procédure Function est destinée à renvoyer un résultat, c'est ce qui la différencie d'une procédure Sub. Dans ton cas tu écris une fonction que tu utilises en fait comme Sub...

Pour coder correctement, on évite d'imiter l'enregistreur et de coller des Select partout !

Pour travailler efficacement en VBA on apprend à ne pas appeler copier-coller n'importe quel transfert de valeurs, et à éviter de copier puis coller quand ce n'est pas nécessaire. Les méthodes Copy et Paste implique un transfert de données par le presse-papier de Windows. Si l'on ne transite pas par le presse-papier, il n'y a pas copier-coller et on gagne en efficacité.

Au cas particulier :

Sub data(Y_deb As Range, Y_fin As Range)
    Dim Plg
    Plg = Sheets("Data_post_essai").Range(Y_deb, Y_fin)
    Sheets("MesureULAB").Range("A23").Resize(UBound(Plg)).Value = Plg
    data = "c'est fait !"
End Sub

Cette procédure doit assurer le job et signaler que c'est fait ! Elle doit être lancée par une autre procédure qui lui passe les arguments dont elle a besoin.

La cellule ou j'entre la formule est renvois alors #valeur! et rien n'est copié coller.

Ça c'est dans le cas où tu veux une fonction utilisable en feuille de calcul (ne revenons pas sur le copier-coller....)

Alors :

Function data(Y_deb As Range, Y_fin As Range)
    data = Sheets("Data_post_essai").Range(Y_deb, Y_fin)
End Function

Ceci fonctionnera, à la condition de sélectionner le nombre de cellules nécessaire au transfert, taper la fonction avec ses arguments et valider par Ctrl+Maj+Entrée (car ton résultat est une matrice de valeurs !)

Cordialement.

edit : Dans tous les cas, tes arguments étant de type Range, ils doivent être passés sous forme d'objets Range !

Merci à vous deux,

Je préfère la solution de MFerrand, mais je n'arrive pas à la faire fonctionner

J'ai créer ceci

Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink)

Dim Y_deb, Y_fin As Range
Dim cell As Cells

Y_deb = BB220
Y_fin = BB289
cell = A23

MsgBox prompt:="je suis ici"
    ' Réaction aux hyperliens
    Select Case Target.Range.Cells(1).Value
    '
    Case "Analyser Data"
        ' Import de la feuille de données
        Call data(Y_deb, Y_fin, cell)

    Case Else
        MsgBox Title:="Commande non implémentée", prompt:="Aucune action n'est associée à l'hyperlien dans la cellule " & Target.Range.Address

    End Select
End Sub

Sub data(Y_deb As Range, Y_fin As Range, cell As Cells)
    Dim Plg
    Plg = Sheets("Data_post_essai").Range(Y_deb, Y_fin)
    Sheets("MesureULAB").Range("cell").Resize(UBound(Plg)).Value = Plg
    MsgBox prompt:="c'est fait !"
End Sub

qui ne marche pas, aucun des 2 msgBox ne s'active quand je clique sur mon hyper lien (qui pointe sur lui même)

Pour le 2ème bout de code, n'y a t'il pas moyen de faire selectionner le bon nombre de case directement par la macro ? car il change en fonction des fichiers

Houlala ! Tu inventes un syntaxe au fur et à mesure !!!

Dim Y_deb, Y_fin As Range

Les variables se typent individuellement, Y_deb n'est donc pas typée ! La typer Range, explicitement.

Dim cell As Cells

Cells n'est pas un type d'objet ! cell est à typer Range !

Y_deb = BB220
Y_fin = BB289
cell = A23

??? L'affectation d'une référence d'objet à une variable doit toujours utiliser l'instruction Set !

Et d'autre part, BB220, BB289 ou A23 seront interprétées comme des variables non déclarées, non initialisées et donc vides !

Set Y_deb = Worksheets("nomFeuille...").Range("BB220")

Voilà une façon d'affecter une variable Range (en précisant le nom de la feuille).

MsgBox prompt:="je suis ici"

Pourquoi donc ça ?

   Select Case Target.Range.Cells(1).Value

Le Cells(1) est superflu, même si cela n'empêchera pas de fonctionner...

Si ton hyperlien fonctionne comme tu l'attends, la procédure lancée devient :

Sub data(Y_deb As Range, Y_fin As Range, cell As Range)
    Dim Plg
    Plg = Sheets("Data_post_essai").Range(Y_deb, Y_fin)
    cell.Resize(UBound(Plg)).Value = Plg
    MsgBox prompt:="c'est fait !"
End Sub

cell est en effet un objet Range, pas une donnée String (et de toute façon il s'agit d'une variable : un nom de variable ne s'utilise jamais entre guillemets, en mettant des guillemets on indique un mot et non plus le contenu de la variable ainsi nommée...)

Cordialement.

Désolée :O, j'ai pas vraiment appris VBA dans les règles de l'art je pense,

Si je suis tous tes conseils j'obtiens donc ce code, qui devrait fonctionner :

Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink)

Dim Y_deb As Range, Y_fin As Range, cell As Range

Set Y_deb = Worksheets("Data_post_essai").Range("BB220")
Set Y_fin = Worksheets("Data_post_essai").Range("BB289")
Set cell = Worksheets("MesureULAB").Range("A23")

MsgBox prompt:="je suis ici"
    ' Réaction aux hyperliens
    Select Case Target.Range.Cells(1).Value
    '
    Case "Analyser Data"
        ' Import de la feuille de données
        Call data(Y_deb, Y_fin, cell)

    Case Else
        MsgBox Title:="Commande non implémentée", prompt:="Aucune action n'est associée à l'hyperlien dans la cellule " & Target.Range.Address

    End Select
End Sub

Sub data(Y_deb As Range, Y_fin As Range, cell As Range)
    Dim Plg
    Plg = Sheets("Data_post_essai").Range(Y_deb, Y_fin)
    cell.Resize(UBound(Plg)).Value = Plg
    MsgBox prompt:="c'est fait !"
End Sub

Est tu certain de ca " Les variables se typent individuellement, Y_deb n'est donc pas typée ! La typer Range, explicitement." car j'ai toujours fait de cette manière et ca a toujours bien fonctionner "

L'hyperlien n'a pas l'air de marcher o/

Je deviens folle

Est tu certain de ca " Les variables se typent individuellement, Y_deb n'est donc pas typée ! La typer Range, explicitement." car j'ai toujours fait de cette manière et ca a toujours bien fonctionner "

Absolument ! Cela n'empêche pas en général de fonctionner car la variable non typée est tout simplement de type Variant... Il vaut donc mieux que les variables soient typées comme on le prévoit, et ne laisser Variant que celle qui le justifient (destinées à accueilllir divers types de données).

Au cas particulier, comme tu appelles une procédure en utilisant cette variable, tu aurais une erreur "ByRef incompatible", car l'argument de la proc. est déclaré Range et tu le lui passe au moyen d'une variable qui n'est pas exactement du même type...

Pour ton lien, pas d'avis ! Mais tu devrais placer ton MsgBox dans le Case "analyser data", cela te permettrait de t'assurer que tu passes par là... !

Cordialement.

Mes hyperlink ne marche plus ^^ aucun de ceux que j'avais fait et qui marchait avant bon ...

Tu as deux fichiers... Il vaudrait mieux n'avoir que le bon d'ouvert (et l'autre ailleurs qu'à son emplacement initial pour éviter des interactions s'ils ont des éléments communs !)

Le fichier sur le quel je travail est celui du bas, ce que je ne comprend pas c'est pourquoi mes feuilles sont déconnecté sur leurs codes (on voit sur le fichier d'origine qu'il y a une seule feuille par feuille (et les hyper liens marchent alors que sur le 2nd fichier on a 2 objets par feuille par exemple la feuille 1 du premier fichier est composé de la feuille 12 et la feuille 2 dans le second mon code qui se trouve dans la feuille 1 se trouve dans la feuille 2 et la feuille originelle (feuille 12) ne contient plus rien.

Tu saurais pourquoi ?

Je n'avais pas fait attention à cette anomalie !

Mais c'est apparemment une anomalie, jamais vu une telle présentation ! ?

Ca m'arrive de temps en temps je repars sur des sauvegarde précédente mais la ca m’embête si quelqu'un sait comment revenir à la normal !

C'est arrivé suite à une erreur !

Sais-tu comment tu as fait pour aboutir à ça ! Car je ne saurais pas le reproduire...

C'est arrivé une fois quand j'ai lancé une macro et ensuite ca me le faisait sur chaque feuille que j'ouvrais, si je n'enregistre pas et que je ferme tout ca revenait à la normal!

Sauf que la je ne m'en suis pas rendu compte

Rechercher des sujets similaires à "plage feuille argument"