Utilisation de macros du ruban

Bonjour tout le monde,

J'aimerais savoir si vous pouviez m'aider : j'ai vu une macro qui consiste à envoyer selon les employés leurs feuilles d'heures en fin de chaque semaines et j'aimerais utiliser le même concept pour mon cas, à savoir envoyer un bilan des interventions réalisés durant le mois selon les prestataires.

Du coup j'ai adapté mon code selon mes champs et mon tableau, cependant j'ai un problème au niveau de l'appellation de mon Userform : Erreur 424, objet requis.

Pouvez-vous m'éclairer s'il vous plaît.

Je vous met ci-joint mon fichier Excel en question, merci à vous.

Bonjour toutes et tous

il faut regarder le nom de la combobox sur l'usf

ComboBoxEmployeeList (il n'y en a pas dans l'usf puisque la combobox de l'usf1 se nomme ===>> ComboBoxPrestataireList <<===)

donc:

ComboBoxPrestataireList

voir l'initialise de l'usf==> Private Sub UserForm_Initialize()


de plus, attention

'Fermeture du formulaire
Me.Hide ' le cache uniquement le formulaire et non le déchargement de l'usf peut remplacer par ==> Unload Me


une autre erreur que je viens de voir est aussi la liste RowSource de la ComboBoxPrestataireList (erreur 380 autre)

=voir=> Private Sub UserForm_Initialize()

peut être la RowSource : ===>Conso_Mois!A2:A5000

bon après pour les doublons je ne pige pas là


et =voir=> Private Sub UserForm_Initialize()

' Initialisation des contrôles de la fenêtre
ComboBoxPrestataireList.Enabled = True ( était à False ?)


crdlt,

André

Salut,

Je te remercie ! Effectivement, j'avais pas vu l'erreur par rapport au nom de l'userform.

Me.Hide ' le cache uniquement le formulaire et non le déchargement de l'usf peut remplacer par ==> Unload Me

Merci de l'info !

Justement, la source c'était les entreprises et non les techniciens, d'où le terme "Entreprise" et encore, j'avais pas créer la table, du coup j'ai mis la colonne Q correspondantes.

Quand tu parles de doublons tu parles de cette ligne de code ?

ComboBoxPrestataireList.ListIndex = 0

Egalement, la syntaxe de cette condition sort d'où s'il te plaît :

If Not Fenetre_envoi_mail.Cancel Then

Par rapport à l'initialisation de la fenêtre d'userform, je ne savais pas qu'il fallait la déclarer à True, merci encore

Re,

merci de ton retour,


Quand tu parles de doublons tu parles de cette ligne de code ? ComboBoxPrestataireList.ListIndex = 0 non

la combobox, j'ai mis la 1ère colonne de ta feuil1 NometPrénom, sur cette colonne Prénoms/Noms beaucoup sont à l'identique, j'ai juste alimenté la combobox de ta RowSource

Egalement, la syntaxe de cette condition sort d'où s'il te plaît :

If Not Fenetre_envoi_mail.Cancel Then

aucune idée, était déjà dans ton userform


Edit: à le classeur a été retiré oups pas vu

Par rapport au classeur c'est étrange, j'avais pourtant retiré les données confidentielles ; quoi qu'il en soit je me permets de le remettre sur ce post.

Ah d'accord, je comprends mieux ; en vrai ma RowSource était la colonne entreprise du coup ; par rapport à la ligne de code que je t'ai demandé, moi-même je ne sais pas cela vient d'où, sûrement une erreur de maladresse..

Pour finir, j'ai encore un sourcis, erreur d'exécution 13 : incompatibilité de type, toujours au niveau de ma ligne

FenetrEnvoiMail.Show

Bonjour toutes et tous

toujours la RowSource à l'initialisation de ton userform du combobox qui pose souci

j'ai désactivé provisoirement l alim de la combo à l'initialise de l'userform

'Gestionnaire d'initialisation du formulaire à l'ouverture
Private Sub UserForm_Initialize()
    ' Reset des propriétés du formulaire
    propertyCancel = True
    propertyUser = ""

    ' Initialisation des contrôles de la fenêtre
    CheckBoxAllPrestataire = True
    ComboBoxPrestataireList.Enabled = True

    'Alimentation de la liste des entreprises                                            ' ---
   ' ComboBoxPrestataireList.RowSource = ThisWorkbook.Sheets("Conso_Mois").Range("flop") ' xx ERREUR ICI
   ' ComboBoxPrestataireList.ListIndex = 0                                               ' ---
End Sub

récapitulons ton userform:

nom formulaire: FenetrEnvoiMail
CheckBox (Caption - -Tous) = CheckBoxAllPrestataire
CheckBox (Caption - -Envoyer par mail) = EnvoiMail
Commande Bouton (-Ok) = CommandButtonOk
Commande Bouton (-Annuler) = CommandButtonCancel


récapitulons feuille du classeur Conso_Mois :

zone de nom flop à partir de la feuille Conso_Mois du classeur


@tester ci-joint

Note: incompatibilité 13 a disparu

modification effectuée: Conso_Mois!S2:S8 de la combobox RowSource

crdlt,

André

Re,

Merci à toi de ta rapidité !

J'aimerais savoir, c'est par rapport à la syntaxe que je ne peux pas définir mon tableau "entreprise" (càd flop) ? Et est-ce que le fait que cette colonne (la S) soit indépendante du mon tableau Conso_Mois qui fait que ça cause problème : dans le sens où si je filtre la colonne S par rapport à X sociétés, le tableau Conso_Mois ne s'actualise pas ?

Sinon, c'est ce que je voulais, je te remercie ; je vais essayer de mettre en place la suite de mon programme du coup, mettre en place les fonctions pour qu'elles marchent ; ça doit venir de mon "ActiveSheet" quand j'essaie de joindre le classeur en cours dans l'objet du mail.

Re,

de rien avec plaisir,

par contre on peut mettre directement dans la RowSoure flop de la combo ComboBoxPrestataireList

je viens de tester et cela fonctionne

ci-joint

crdlt,

André

Salut,

Oui j'ai vu également que ça marchait, cependant vu que mon tableau [flop] est pas relié à ma BDD, que je filtre ou non sur le flop ça ne fait rien. Enfaîte j'aimerais que ça "agisse" comme un segment.

Je voudrais te demander par ailleurs, si je veux réaliser une condition selon la case cochée "Envoyer par mail", lorsque je me refère à l'userform, cette case correspond à la fonction

Private Sub EnvoiMail_Click()

End Sub

Du coup, si je veux que le mail s'envoie uniquement si cette case est cochée, je dois jouer sur ça :

If Envoi_Mail_Click = True

Bonjour toutes et tous

@Ajszoo24

comme ceci par exemple:

Private Sub EnvoiMail_Click()
   If Envoi_Mail.Value=True Then
     '
     '
   End If
End Sub

Salut Andre,

Je te remercie encore : désolé si je te fais répéter mais si j'ai bien compris, enfaîte chaque fonctionnalités de mon userform est à programmer dans "la page du code userform" et non dans le module.

Re,

oui* (pour l'instant*), si ton userform est actif ou chargé (lors du lancement de l'Userform)

ci-dessus mon post précédent le code est placé dans le code de ta Checkbox à partir de ton userform ( ici lors du clic sur la checkbox )


tout en lançant ton userform, tu peux également faire appel à une macro d'un module que t'auras créé/codé, par exemple.


comme tu peux faire appel d'une macro dans un module à partir d'une feuille/d'une cellule/d'une plage etc. de ton classeur, d'un événement et j'en passe ou lors de l'ouverture/fermeture de ton classeur etc. etc. d'un des modules qui est présent/codé et configuré

Dernière petite précision,

Private Sub EnvoiMail_Click()
   If Envoi_Mail.Value=True Then
     '
     '
   End If
End Sub

dans ce cas de figure, c'est au moment où j'aurais coché la case "Envoyer mail" mais si je veux que ça envoie le mail au moment où l'utilisateur appuie sur "OK", je dois situer mon code dans

Private Sub CommandButtonOk_Click()
    If EnvoiMail.Value = True Then
    '...
    End If
End Sub

re,

oui aussi

Du coup je pense avoir mieux saisi le tout, j'ai essayé de mon côté, en repartant du début mais visiblement j'ai du mal : j'aimerais dans un premier temps filtrer selon l'entreprise que je sélectionne puis mettre en fichier joint le classeur actuel du coup et l'envoyer (j'ai mis volontairement la commande .Display pour que j'ai juste une visu).

Du coup voilà mon Userform (tjrs avec le tableau [flop] définit dans RowSource), le programme plante à partir du moment où je fais appelle à ma procédure export_stt(user) (qui se situe dans mes modules).

Private propertyUser As String
Private propertyCancel As Boolean
'Private propertyMail As Boolean

Public Property Get User() As String
    User = propertyUser
End Property

Public Property Get Cancel() As Boolean
    Cancel = propertyCancel
End Property

Private Sub CommandButtonOk_Click()
'initialisation des propriétés du formulaire
    propertyCancel = False

    If CheckBoxAllPrestataire.Value = True Then
        propertyUser = ""
    Else
        propertyUser = ComboBoxPrestataireList.Value
    End If

'    If EnvoiMail.Value Then
'        propertyMail = True
'    Else
'        propertyMail = False
'    End If
    If EnvoiMail.Value = True Then
        'propertyUser = ComboBoxPrestataireList.Value
        export_stt (propertyUser)
    End If

    'Fermeture du formulaire
    Unload Me
End Sub
Private Sub export_stt(ByRef User As Integer)

Dim OutlookApp As Object, OutlookMail As Object
Dim message As String, sujet As String, adresse As String
Dim mois As Byte
On Error Resume Next

    ' Récupération de l'adresse mail associée à l'employé.
    adresse = Application.VLookup(User, ThisWorkbook.Worksheets("BDD Partenaires").Range("A:C"), 3, False)

    If adresse <> "" Then 'si adresse a une valeur différent de rien

        'Initialisation des variables
        sujet = "[BON DE FACTURATION] Ventilation de la société " & ThisWorkbook.Worksheets("Conso_Mois").Range("flop").Value & " : Bilan/Recap"
        mois = Month(Range("F2"))
        message = "Bonjour, veuillez trouver ci-joint la ventilation du mois de " & mois

        ' Création du mail
        Set OutlookApp = CreateObject("outlook.Application")
        Set OutlookMail = OutlookApp.CreateItem(0)
    Application.DisplayAlerts = False
        With OutlookMail
            .Subject = sujet
            .To = adresse
            .Body = message
            .Attachments.Add ActiveWorkbook.FullName
            .Display
        End With
    Application.DisplayAlerts = True
     Else
        MsgBox ("Une adresse email a été non définie.")
        Exit Sub
    End If

End Sub

La au niveau de la déclaration de mon argument, je suis pas sur si c'est correcte : de base je voulais le nom de l'entreprise ensuite à l'aide d'une recherche V qu'il me choppe l'adresse mail correspondante mais je sais pas du coup s'il faut déclarer un String ou un Integer ou même si c'est comme ça c'est mieux que je mette rien ?

Hello,

Si on pouvait m'expliquer la démarche à faire s'il vous plaît.

Up svp

Bonjour toutes et tous

sur ceci, je ne suis pas du tout à la hauteur, je m'en excuse en espérant qu'un(e) Pro, puisse te venir en aide

sur cela passez une bonne fête de fin d'année

crdlt,

André

Salut,

Merci de ta réponse, tu m'as déjà bien aidé !

Oui, j'espère aussi

Rechercher des sujets similaires à "utilisation macros ruban"