Procédure

Fermé
donel05y040 Messages postés 1 Date d'inscription jeudi 23 juillet 2015 Statut Membre Dernière intervention 23 juillet 2015 - 23 juil. 2015 à 15:19
ccm81 Messages postés 10907 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 24 janvier 2025 - 23 juil. 2015 à 15:48
salut
je suis étudiant et m' intéresse beaucoup à la programmation. Depuis un certains temps j'étudie le VBA d'excel pour me vaciliter le travail à faire sur un projet .
En fet jai un souci, il concerne les procédures. je voudrais écrire une procédure qui copie la valeur d'une cellule d'une feuille et la colle dans une cellule d'une autre feuille. Donc une procédure avec 4 arguments. Voici la procédure écrite dans le visual basic:

Private Sub copier_coller(feuille1 As Worksheet, cellule1 As Range, feuille2 As Worksheet, cellule2 As Range)

Sheets("feuille1").Select

Range("cellule1").Select
Selection.Copy
Sheets("feuille2").Select
Range("cellule2").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
End Sub


Mais en faisant appel à cette procédure dans une macro ou je voulais qu'elle copie le contenu de la cellule 1 de la "feuille stock" dans la cellule 1 de la "feuille marchandise". voici le code de la macro:

Sub coller_valeur()

copier_coller ("stock","A1", "marchandise", "A1")

End Sub


lorsque j'exécute cette macro on me fait comprendre qu'il s'agit d'une erreur de compilation.
Depuis je cherche à trouver la solution en vain! c'est pourquoi j'en appelle à votre expertise pour bien vouloir m'aider!
merci d'avance

3 réponses

f894009 Messages postés 17242 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 12 mars 2025 1 713
23 juil. 2015 à 15:37
Bonjour,

ira mieux comme ceci:

Sub coller_valeur()
    Call copier_coller("stock", "A1", "marchandise", "A1")
End Sub

Private Sub copier_coller(feuille1 As String, cellule1 As String, feuille2 As String, cellule2 As String)
    Sheets(feuille2).Range(cellule2) = Sheets(feuille1).Range(cellule1)
End Sub
0
ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 160
23 juil. 2015 à 15:48
Bonjour Donel, bonjour le forum,

Évite autant que tu le peux les Select inutiles qui ne font que ralentir l'exécution du code !...

Essaie comme ça :
Private Sub copier_coller(feuille1 As String, cellule1 As String, feuille2 As String, cellule2 As String)
Sheets(feuille1).Range(cellule1).Copy
Sheets(feuille2).Range(cellule2).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
End Sub


Sub coller_valeur()
Call copier_coller("stock", "A1", "marchandise", "A1")
Application.CutCopyMode = False
End Sub

0
ccm81 Messages postés 10907 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 24 janvier 2025 2 430
Modifié par ccm81 le 23/07/2015 à 16:35
Bonjour

Pas mal d'erreurs dans les types des objets manipulés

1. Lorsque tu appelles ta procedure
copier_coller ("stock","A1", "marchandise", "A1")
les arguments sont de type string et non worksheet ou range comme dans sa déclaration (tu passes les noms des objets et non les objets eux mêmes)
2. D'autre part, dans le code de la procedure copier_coller
Sheets("feuille1").select le nom de la feuille sera "feuille1" à chaque appel quelque soit l'argument passé
etc ...

3. Pour faire la même chose simplement
Sub copie_colle(F1 As String, C1 As String, F2 As String, C2 As String)
  Sheets(F1).Range(C1).Copy Sheets(F2).Range(C2)
End Sub

Private Sub CommandButton1_Click()
   Call copie_colle("Feuil1", "A2", "Feuil2", "B5")
End Sub

Cdlmnt
0