Création d'une fonction Macro à utiliser dans une module

Fermé
senecartour Messages postés 324 Date d'inscription dimanche 12 mai 2013 Statut Membre Dernière intervention 29 octobre 2020 - 23 mai 2014 à 16:35
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 - 24 mai 2014 à 17:00
Bonjour,
Je ne suis pas un spécialiste de la VBA, je code mais pour des petites choses.
Je me permets de vous solliciter car je souhaiterais comprendre création des fonctions personnalisées et leur utilisation en VBA.

Voici mon cas :
J'ai un classeur avec plusieurs onglets et je souhaiterais créer une fonction nommée "copier" permettant de parcourir tous les onglets de mon classeur. Si la fonction ne trouve pas un onglet nommé "produit", il m'affiche le message MsgBox "Onglet absent"
Si non elle copie les données de la feuille nommée "donnees" et les colle dans l'onglet "produit".

Ensuite, je dois utiliser cette fonction dans une ou autres modules de mon programme.
Exemple: je veux utiliser la fonction crée précédemment pour copier les données
Dans la module1
Sub remplir onglet
Copier "donnees", "produit"
End Sub

Voici le lien du fichier: https://www.cjoint.com/?DExqI3jBucS

Merci beaucoup pour votre aide!



A voir également:

1 réponse

cs_Le Pivert Messages postés 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024 729
24 mai 2014 à 15:49
Bonjour,

Pour parcourir les onglets:

Option Explicit
  Dim wsh As Worksheet
Private Sub CommandButton1_Click()
 For Each wsh In ActiveWorkbook.Worksheets ' pour chaque feuille du classeur
        If wsh.Name = "produit" Then 'on vérifie  le nom
        Sheets("données").Select
        Range("A1:G23").Select 'plage à adapter
    Selection.Copy
    Sheets("produit").Select
    Range("A1").Select 'à adapter
    ActiveSheet.Paste
   Else
           
   End If ' fin de la boucle si
  Next 'on passe à la feuille suivante
End Sub


Un conseil sers-toi de l'enregistreur de macro!
-2
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
24 mai 2014 à 17:00
Bonjour,

Ça ne répond pas à la question !!! Et l'enregistreur de macro ne peut pas être employé pour ce qui est demandé. Sans parler des .Select qui ne sont pas vraiment nécessaires et alourdissent le code.

Pour obtenir ce qui est demandé, il faut passer à la procédure ou la fonction des paramètres :

Un exemple de procédure à mettre dans un module:

Public Sub CopierOnglet(ByVal feuille1 As String, ByVal feuille2 As String)
Dim sh As Worksheet
Dim i As Integer

For i = 1 To ThisWorkbook.Worksheets.Count
    Set sh = Worksheets(i)
    If sh.Name = feuille1 Then
        sh.Range("A1:F5").Copy Destination:=Worksheets(feuille2).Range("A1") 'Plage a adapté
        Set sh = Nothing
        Exit Sub
    End If
Next i
    MsgBox "L'onglet " & feuille1 & " n'existe pas !!!", vbCritical, "Erreur"
    Set sh = Nothing
End Sub
0