Utilisation d'un boutton fonction sur excel

Résolu
nonoche2801 Messages postés 25 Statut Membre -  
Bidouilleu_R Messages postés 1209 Statut Membre -
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. Bidouilleu_R Messages postés 1209 Statut Membre 296
     
    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
  2. nonoche2801 Messages postés 25 Statut Membre
     
    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. Bidouilleu_R Messages postés 1209 Statut Membre 296
       
      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
  3. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    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. Bidouilleu_R Messages postés 1209 Statut Membre 296
       
      Et je dirais même mieux ..."Ca devrait fonctionner. " ;-)
      0