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

senecartour Messages postés 324 Date d'inscription   Statut Membre Dernière intervention   -  
Polux31 Messages postés 6917 Date d'inscription   Statut Membre Dernière intervention   -
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   Statut Contributeur Dernière intervention   729
 
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   Statut Membre Dernière intervention   1 204
 
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