Renvoyer dans une cellule la valuer d'une TextBox en fonction d'une ComboBox

Yaloo

XLDnaute Barbatruc
Re : Renvoyer dans une cellule la valuer d'une TextBox en fonction d'une ComboBox

Bonjour Steve,

- on obtient une erreur au niveau du vidage du ComboBox 'erreur 380 Impossible de définir la propriété Text. Valeurde propriété non valide'. Le vidage des TextBox se déroule bien et cette appel fonctionnait très bien jusqu'à présent ???
Pourquoi ne pas utiliser Lots.Value = "" ce que tu utilises déjà plus haut, puisque tu n'as qu'un seul ComboBox. Sinon voir dans fichier et utiliser :
VB:
'Permet de supprimer les évènements
Application.EnableEvents = 0
' Vidage des TextBox et ComboBox
For Each objControl In Renseignements.Controls
  If TypeOf objControl Is MSForms.TextBox Then
    objControl.Text = ""
  ElseIf TypeOf objControl Is MSForms.ComboBox Then
    objControl.ListIndex = -1
  End If
Next
Application.EnableEvents = 1
- Lorsque le code renseigne les cellules de la feuille 'CR' il intercalle des lignes vides que je ne comprends pas ?
A quel niveau intercalle-t-il des lignes vides.
Soit ça peut venir de tes cellules d'origine, soit de tes lignes de "réception"
Au lieu d'utiliser ça :
VB:
FL2.Cells(j + 1, 1).Value = Lots 'Lots
            FL2.Cells(j, 2).Value = WkB.Sheets(2).Range("B" & i) 'Nom entreprise
            FL2.Cells(j + 2, 2).Value = WkB.Sheets(2).Range("E" & i) 'Adresse
            FL2.Cells(j + 3, 2).Value = WkB.Sheets(2).Range("F" & i) 'Complément
            FL2.Cells(j + 4, 2).Value = WkB.Sheets(2).Range("H" & i) & " " & WkB.Sheets(2).Range("I" & i) ' CP + Ville
            FL2.Cells(j + 5, 2).Value = WkB.Sheets(2).Range("T" & i) 'Mail
            FL2.Cells(j + 5, 4).Value = "M." & WkB.Sheets(2).Range("D" & i) 'Nom Représentant
Utilises ça, comme ça tu ne réctifies que tes cellules de réception si besoin :
VB:
FL2.Cells(j + 1, 1).Value = Lots                                          'Lots
            FL2.Cells(j, 2).Value = NomEts                                            'Nom entreprise
            FL2.Cells(j + 2, 2).Value = RueEts                                        'Adresse
            FL2.Cells(j + 3, 2).Value = CompRueEts & " " & CompRueEts1                'Complément 1 & 2
            FL2.Cells(j + 4, 2).Value = Val(CP) & " " & Ville                         'CP + Ville
            FL2.Cells(j + 5, 2).Value = Email.Value                                   'Mail
            FL2.Cells(j + 5, 4).Value = "M." & NomDirigeant & " " & PrenomDirigeant   'Nom Représentant

Enfin, je réalise que quand une entreprise a plusieurs 'LOTS', il ne faut pas lui faire une case spécifique pour ce nouveau lots mais plutôt compléter la case existant avec uniquement le nom du LOT, colonne A.
Voir fichier ci-joint

Lorsque je te préconisais la macro ci-dessous, c'est au cas ou tu n'aurai pas inséré l'adresse mail dans un de tes lots. Tu risques d'avoir un décalage de ligne
VB:
j = 45 + (Application.RoundUp(((Cells(Rows.Count, 2).End(xlUp).Row) - 44) / 6, 0)) * 6
A te relire

Martial
 

Fichiers joints

SSteve

XLDnaute Junior
Re : Renvoyer dans une cellule la valuer d'une TextBox en fonction d'une ComboBox

Martial, bonsoir,
Bonsoir à tous ,

Merci encore : tout fonctionne !!!

Il me reste un détail : la colonne 'entreprise' de la feuille 'CR' (colonne B), à partir de la ligne 45 :

Lorsque le code 'nouvelle fiche' s'exécute, il rempli à la fin la colonne B de la feuille 'CR'. Quand il renseigne le nom de l'entrise, son adresse, il met une ligne vide entre le nom et l'adresse puis l'adresse et la ville.

Est-il possible de faire en sorte que si l'adresse se compose de 3 lignes (Nom de l'entreprise, rue et code postal/ville) sans complément d'adresse, tous tes informations soient à la ligne sans ligne blanche, quitte à laisser 2 llignes blanches entre la ligne CP/Ville et l'adresse email ?

Il me reste, avant de clôturer ce projet, à renseigner après l'OS, le marché qui va avec. Mais cela devrait aller normalement.

Merci de ton aide !
 

Yaloo

XLDnaute Barbatruc
Re : Renvoyer dans une cellule la valuer d'une TextBox en fonction d'une ComboBox

Re,

Tu as ça :
VB:
FL2.Cells(k, 1).Value = Lots                                          'Lots
            FL2.Cells(j, 2).Value = NomEts                                            'Nom entreprise
            FL2.Cells(j + 2, 2).Value = RueEts                                        'Adresse
            FL2.Cells(j + 3, 2).Value = CompRueEts & " " & CompRueEts1                'Complément 1 & 2
            FL2.Cells(j + 4, 2).Value = Val(CP) & " " & Ville                         'CP + Ville
            FL2.Cells(j + 5, 2).Value = Email.Value                                   'Mail
            FL2.Cells(j + 5, 4).Value = "M." & NomDirigeant & " " & PrenomDirigeant   'Nom Représentant
Actuellement tu as :
FL2.Cells(j, 2).Value = NomEts 'Nom entreprise
FL2.Cells(j + 2, 2).Value = RueEts 'Adresse
Il faut jouer avec les FL2.Cells(j + 2, 2)

Dans le principe :
Si Compl est vide alors FL2.Cells(j + 1, 2) sinon FL2.Cells(j + 2, 2)

enfin quelque chose comme ça.

A+

Martial
 

SSteve

XLDnaute Junior
Re : Renvoyer dans une cellule la valuer d'une TextBox en fonction d'une ComboBox

Et si au lieu de conditionner je cherche la dernière cellule vide +1 type :

FL2.Cells(j,2).Range("B65536").End(xlUp).Row + 1.Value = RueEts
 

Yaloo

XLDnaute Barbatruc
Re : Renvoyer dans une cellule la valuer d'une TextBox en fonction d'une ComboBox

Re,

Oui, bonne idée, dans ce cas-là, je pense qu'il faut faire une boucle à partir de j car si tu prends la dernière cellule alors que c'est un deuxième Lot, ça risque de ne pas fonctionner. Enfin je pense ... à tort peut être.

Ou alors ajouter à j une ligne à chaque fois que tu rentres une donnée dans la cellule.

A+

Martial
 

SSteve

XLDnaute Junior
Re : Renvoyer dans une cellule la valuer d'une TextBox en fonction d'une ComboBox

En fait voila ce que j'ai ecris :

FL2.Cells(65535, 2).End(xlUp)(2) = RueEts 'Adresse
FL2.Cells(65535, 2).End(xlUp)(2) = CompRueEts & " " & CompRueEts1 'Complément 1 & 2
FL2.Cells(65535, 2).End(xlUp)(2) = Val(CP) & " " & Ville 'CP + Ville
Mais comme tu l'indique, cela ne marche pas, du mois lorsque une même entreprise a deux lots : il écrit à la case suivante...

Tu indiques faire une boucle à partir de J ... ??
 

Yaloo

XLDnaute Barbatruc
Re : Renvoyer dans une cellule la valuer d'une TextBox en fonction d'une ComboBox

Re,

Pour finir je n'ai pas fait de boucle, car un peu compliqué pour mettre ensuite le mail et nom du dirigeant.

Essaies avec le code ci-dessous, j'ai un peu testé, mais il peut encore y avoir des erreurs ...

VB:
...'ATTENTION modification de la ligne du Lot avec k et non j
            FL2.Cells(k, 1).Value = Lots                                          'Lots
            FL2.Cells(j, 2).Value = NomEts                                            'Nom entreprise
            k = j
            If RueEts <> "" Then k = k + 1: FL2.Cells(k, 2).Value = RueEts                                    'Adresse
            If CompRueEts <> "" Or CompRueEts1 <> "" Then k = k + 1: FL2.Cells(k, 2).Value = CompRueEts & " " & CompRueEts1                'Complément 1 & 2
            FL2.Cells(k + 1, 2).Value = Format(Val(CP), "00000") & " " & Ville                         'CP + Ville
            FL2.Cells(j + 5, 2).Value = Email.Value                                   'Mail
            FL2.Cells(j + 5, 4).Value = "M." & NomDirigeant & " " & PrenomDirigeant   'Nom Représentant
....
A te relire

Martial
 

SSteve

XLDnaute Junior
Re : Renvoyer dans une cellule la valuer d'une TextBox en fonction d'une ComboBox

OK super !! c'est nikel !

J'ai oublié la der des der : la création et la complétion d'une liste de diffusion OUTLOOK...

En tout cas MERCI !!! :cool:
 

SSteve

XLDnaute Junior
Re : Renvoyer dans une cellule la valuer d'une TextBox en fonction d'une ComboBox

OKI !

Bonne nuit et merci encore !!!
 

SSteve

XLDnaute Junior
Re : Renvoyer dans une cellule la valuer d'une TextBox en fonction d'une ComboBox

Bonsoir à tout, bonsoir Martial,

J'ai fait une tentative de code :
'Création de liste de diffusion
Dim OutlookApp As New Outlook.Application
Dim Liste As Outlook.DistListItem
Dim Desti As Outlook.Recipient

Set Liste = OutlookApp.CreateItem(olDistributionListItem)

Liste.DLName = "Liste de diffusion"
If Not Liste Is Nothing Then
Set Desti = OutlookApp.Session.CreateRecipient(Email.Value)
Desti.Resolve
Liste.AddMember Desti
Else: Liste.AddMember Desti
End If
Mais bien entendu, ça ne marche pas... :(
 

Yaloo

XLDnaute Barbatruc
Re : Renvoyer dans une cellule la valuer d'une TextBox en fonction d'une ComboBox

Bonsoir Steve,

Je ne connais pas la principe de la liste de diffusion (enfin pas dans VBA), mais tu n'as pas besoin de ça pour envoyer des mails aux personnes concernées.

Que veux-tu envoyer comme documents ? A qui ?

A+

Martial
 

SSteve

XLDnaute Junior
Re : Renvoyer dans une cellule la valuer d'une TextBox en fonction d'une ComboBox

Chaque semaine qui passe donne lieu à une réunion de chantier.
Chaque réunion donne lieu à un compte rendu qu'il faut diffuser à l'ensemble des entreprises (des lots) + d'autres personnes.

L'idée était d'automatiser la création de la liste qui servirai à l'envoi : coller dans une liste l'ensemble des mails collectés lors du remplissage de l'UserForm 'Renseignements'...
 

Yaloo

XLDnaute Barbatruc
Re : Renvoyer dans une cellule la valuer d'une TextBox en fonction d'une ComboBox

Oui mais, cela voudrait dire que tu as une liste par chantier ?

On pourrait peut-être se servir de la feuille CR pour envoyer ce mail, car il s'agit bien d'envoyer le document compte-rendu "CR" ?

A+
 

SSteve

XLDnaute Junior
Re : Renvoyer dans une cellule la valuer d'une TextBox en fonction d'une ComboBox

Oui, effectivement : 1 chantier = 1 liste

En fait, le CR est transformé en PDF pour qu'il ne soit pas modifiable et donc le classeur XLS sert de support.
 

Yaloo

XLDnaute Barbatruc
Re : Renvoyer dans une cellule la valuer d'une TextBox en fonction d'une ComboBox

Ok, dans ce cas-là il n'est peut-être pas nécessaire d'avoir une liste de diffusion.

Une liste de ce type devrait le faire : yyyy@sfr.fr;xxx@orange.fr;zzzz@free.fr;tttt@gmail.com etc....

Il faut mettre cette liste dans une cellule, ajouter les nouvelles adresses à chaque fois que tu rajoutes un lot.

En admettant que tu mettes tes adresses en F1, dans ta macro, tu mets FL2.[F1] = FL2.[F1] & ";" & Email

Il faut vérifier la syntaxe pour l'envoi des adresses dans OutLook.

A+
 

SSteve

XLDnaute Junior
Re : Renvoyer dans une cellule la valuer d'une TextBox en fonction d'une ComboBox

Martial, je n'ai pas compris le code mais en fait lors du démarrage la toute première fois du UserForm 'Renseignements' tu créer normalement la liste au nom du chantier
Mais les autres fois, il ne faut que la compléter ?

Cela revient à vérier si la liste existe déjà sinon tu ajoutes l'adresse mail de l'entreprise à la liste.

Il faut toutefois vérifier que l'entreprise n'a pasdajà un lot sinon cela reviendrait à lui adresser 2 fois la liste... ce qui ne serait pas un drame.
 

SSteve

XLDnaute Junior
Re : Renvoyer dans une cellule la valuer d'une TextBox en fonction d'une ComboBox

Je coirs que je vais sombrer dans mon lit car le journée a été longue...

Merci encore !

A+

Ssteve
 

Yaloo

XLDnaute Barbatruc
Re : Renvoyer dans une cellule la valuer d'une TextBox en fonction d'une ComboBox

Re,

Pour finir, j'ai mis la liste en J1, à changer si besoin. Je t'ai mentionné les lignes que j'ai rajouté.
VB:
Dim FL2 As Worksheet

        Set FL2 = Worksheets(1)
        j = FL2.Range("B65536").End(xlUp).Row + 1
        k = j + 1  'Pour le LOTS
Dim Plage As Range
''''''Ajout de la ligne ci-dessous
Dim NewMail As Boolean
''''''Ajout de la ligne ci-dessous
NewMail = True
''''''Ajout de la ligne ci-dessous
If Left(FL2.[J1], 1) = ";" Then FL2.[J1] = Right(FL2.[J1], Len(FL2.[J1]) - 1)
Set Plage = FL2.Range("B45:B" & j)
        'Recherche l'entreprise dans la plage (colonne B de 45 à la fin des données)
        'Si trouvée alors on redéfinit j et k
        If Not IsError(Application.Match(NomEts, Plage, 0)) Then
          'j étant la ligne trouvée   (le + 44 ajoute à la ligne trouvée dans la plage)
          j = 44 + Application.Match(NomEts, Plage, 0)
          'k étant le N° de ligne du lot à partir de la ligne j
          'Exemple si j est 45 et que tu es au 2ème lot cela va donner 47
          k = Cells(j, 1).End(xlDown)(2).Row 'le (2) signifie ligne suivante ou ligne vide
''''''Ajout de la ligne ci-dessous
          NewMail = False
        End If
            'ATTENTION modification de la ligne du Lot avec k et non j
            FL2.Cells(k, 1).Value = Lots                                          'Lots
            FL2.Cells(j, 2).Value = NomEts                                            'Nom entreprise
            FL2.Cells(j + 2, 2).Value = RueEts                                        'Adresse
            FL2.Cells(j + 3, 2).Value = CompRueEts & " " & CompRueEts1                'Complément 1 & 2
            FL2.Cells(j + 4, 2).Value = Val(CP) & " " & Ville                         'CP + Ville
            FL2.Cells(j + 5, 2).Value = Email.Value                                   'Mail
            FL2.Cells(j + 5, 4).Value = "M." & NomDirigeant & " " & PrenomDirigeant   'Nom Représentant
''''''Ajout de la ligne ci-dessous
            If NewMail Then FL2.[J1] = FL2.[J1] & ";" & Email
                       
            WkCR.Save: WkCR.Close
Pour l'envoi il suffit de prendre la cellule J1 de CR.

A+

Martial

PS : si tu pouvais mettre un nouveau fichier avec les modifications que tu as fait, car à la longue je ne sais plus avec quel code tu travailles.
 

SSteve

XLDnaute Junior
Re : Renvoyer dans une cellule la valuer d'une TextBox en fonction d'une ComboBox

Bonsoir Martial, bonsoir à tous,

Je te propose de mettre en ligne le fichier une fois la gestion du mail terminée, sauf si tu en as besoin rapide ?

J'ai un message d'erreur sur ton dernier code notamment au niveau de l'enregistrement du classeur 'CR' et je me demandais si ce n'était pas parce que on ne l'ouvrais pas au début ?

En fait il blouqe à l'enregistrement mais rien n'est inscrit dedans ...
 
Haut Bas