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

senecartour Messages postés 391 Statut Membre -  
Polux31 Messages postés 7219 Statut Membre -
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!

--
Partager son savoir est la meilleure façon d'apprendre!

1 réponse

  1. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    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
    1. Polux31 Messages postés 7219 Statut Membre 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