Utilisation d'un boutton fonction sur excel

Résolu
Bonjour,
je suis novice sur excel et j'aimerai pouvoir créer un bouton qui lance les lignes de programmes ci-dessous que j'ai récupéré sur internet et modifié.
Cependant lorsque que je clicke j'ai une erreur qui apparait et je n'arrive pas à la comprendre.
Voici le programme:
Public Sub Main()

Set ws1 = Worksheets(1)
Set ws2 = Worksheets(2)
ReportMensuel

Set ws1 = Nothing
Set ws2 = Nothing

End Sub

Public Sub ReportMensuel()
Dim derlig As Long
Dim lig As Long

lig = 2
derlig = ws1.Range("A65536").End(xlUp).Row
While ws2.Range("A" & lig).Value <> ""
derlig = derlig + 1
ws1.Range("C" & derlig).Value = ws2.Range("A" & lig).Value
lig = lig + 1
Wend

lig = 2
derlig = ws1.Range("A65536").End(xlUp).Row
While ws2.Range("B" & lig).Value <> ""
derlig = derlig + 1
ws1.Range("F" & derlig).Value = ws2.Range("B" & lig).Value
lig = lig + 1
Wend
End Sub

Le nom de la focntion est Report mensuel().
Si quelqu'un voit l'erreur ou les erreurs merci d'avance.
Si il vous faut plus de renseignements pas de soucis.
Bonne journée.

3 réponses

  1. en début du module à l'extérieure de la sub
    déclare tes variables... ;-)

    ce qui donne....

    Public ws1 As Worksheet
    Public ws2 As Worksheet

    Public Sub Main()

    Set ws1 = Worksheets(1)
    Set ws2 = Worksheets(2)
    ReportMensuel

    Set ws1 = Nothing
    Set ws2 = Nothing

    End Sub
    0
    1. j'ai essayé et ça change rien.
      Le nouveau code donne dans le module 1:

      Public ws1 As Worksheet
      Public ws2 As Worksheet

      Public Sub Main()

      Set ws1 = Worksheets(1)
      Set ws2 = Worksheets(2)
      ReportMensuel

      Set ws1 = Nothing
      Set ws2 = Nothing

      End Sub

      Public Sub ReportMensuel()
      Dim derlig As Long
      Dim lig As Long

      lig = 2
      derlig = ws1.Range("A65536").End(xlUp).Row
      While ws2.Range("A" & lig).Value <> ""
      derlig = derlig + 1
      ws1.Range("C" & derlig).Value = ws2.Range("A" & lig).Value
      lig = lig + 1
      Wend

      lig = 2
      derlig = ws1.Range("A65536").End(xlUp).Row
      While ws2.Range("B" & lig).Value <> ""
      derlig = derlig + 1
      ws1.Range("F" & derlig).Value = ws2.Range("B" & lig).Value
      lig = lig + 1
      Wend
      End Sub

      et cela ne fonctionne toujours pas je sais plus quoi faire je me décourage un peu.
      on peut éventuellement faire autrement mais je sais comment .
      En fait je veux que quand je clique sur un bouton. Des cellules se remplie en fonction des éléments rentré sur une autre feuille.

      HELP ME .........
      0
      1. Quelle est ton erreur ? donne le numéro et le message s'il te plait.
        Comment s'appelle tes feuilles? as-tu essayé de l'écrire en "dur" à savoir
        sheets("feuil1").... par exemple?
        quel est ton niveau en vba ?
        0
    2. Contributeur
      Bonjour tous,
      Dans ton poste tu parle de mettre un bouton mais je vois que tu met le départ dans une sub ?
      L'erreur c'est que tu ne décalre pas les variables Wk1 et 2, et comme tu n'a pas mis l'option explicit en haut du module rien ne t'est signaler quand aux déclarations.
      Prend l'habitude de coller Option Explicit sur la première ligne de tes modules quel qu'il soit. Ce sera déjà une bonne série d'erreur qui te seront directement signalée.
      Pour en revenir à ton code.
      Sur la feuille où tu veux faire appel de la fonction tu colle un bouton tirer de la barre d'outils (pas formulaire)
      Dés qu'il est coller tu double clic dessus pour entrer dans le code.
      Tu devrais avoir quelque chose comme..
      Private Sub CommandButton1_Click()
         
      End Sub

      Au milieu tu ajoute..
      Private Sub CommandButton1_Click()
          ReportMensuel
      End Sub

      Ensuite tu ajoute un module >> Insertion >> Module
      Dans la nouvelle fenêtre tu colle le code ci-dessous
      Option Explicit
      Public ws1 As Worksheet
      Public ws2 As Worksheet
      
      
      
      Public Sub ReportMensuel()
      Dim derlig As Long
      Dim lig As Long
      
          Set ws1 = Worksheets(1)
          Set ws2 = Worksheets(2)
          
          lig = 2
          derlig = ws1.Range("A65536").End(xlUp).Row
          While ws2.Range("A" & lig).Value <> ""
              derlig = derlig + 1
              ws1.Range("C" & derlig).Value = ws2.Range("A" & lig).Value
              lig = lig + 1
          Wend
          
          lig = 2
          derlig = ws1.Range("A65536").End(xlUp).Row
          While ws2.Range("B" & lig).Value <> ""
              derlig = derlig + 1
              ws1.Range("F" & derlig).Value = ws2.Range("B" & lig).Value
              lig = lig + 1
          Wend
          Set ws1 = Nothing
          Set ws2 = Nothing
      End Sub

      Ca devrait fonctionner.
      Note que dans le cas présent il n'est pas du tout nécessaire d'employer des variables objets pour remplacer tes feuilles.

      A+
      0
      1. Et je dirais même mieux ..."Ca devrait fonctionner. " ;-)
        0