Partage
  • Partager sur Facebook
  • Partager sur Twitter

VBA Probleme lors de l'extension de cellule

Sujet résolu
    20 juin 2022 à 9:19:32

    Bonjour,

    J'ai créé un programme qui envoie un mail automatiquement a une personne si une certaine valeur est entrée dans une cellule.

    Ce programme marche, seulement, le mail s'envoie egalement si une formule est etendue dans la feuille (si la formule est etendue sur une seule cellule il ne se passe rien, le probleme arrive lorsque la formule est etendue sur au moins 2 cellules).

    Or je ne comprends pas car il n'y a aucun rapport avec ce que j'ai demandé, et cela se passe lorsque l'on etend une formule sur n'importe quelle cellule de la feuille, c'est donc tres derangeant.

    Je vous mets le debut de mon code : 

    Dim OutApp As Object 'Declaration of the Outlook object application
        Dim OutMail As Object 'Outlook subject mail declaration
        Dim counting As Integer
        Dim strFrom As String
        Dim Line As Integer
        Dim CompNb As String
        Dim Qorder As String
        'Dim xRg As Range, xCell As Range, xCount As Long
        On Error Resume Next
        date_test = CDate(Now)
        WorksheetFunction.WeekNum (date_test)
        If Target.Value = "xxxxxxx" Then 'checks if it is the right topic
                        Line = ActiveCell.Row 'to save the row and write it in the email body
                        CompNb = Cells(Line, 7) 'to save the xxxxxx and write it in the email body
                        Qorder = Cells(Line, 8) 'to save the xxxxxx and write it in the email body
                        Set OutApp = CreateObject("Outlook.Application")
                        Set OutMail = OutApp.CreateItem(0)
                       
                        ActiveWorkbook.Worksheets("Abreviations").Select
                        With OutMail
                            '.SentOnBehalfOfName = "" 'if you want to send it from your second outlook account
                            .To = ActiveWorkbook.Worksheets("Abreviations").Cells(28, 5).Value & ";" & ActiveWorkbook.Worksheets("Abreviations").Cells(29, 5).Value
                            '.To = Worksheets("Abreviations").Range("E3").Value 'looks for email adress written in Abreviations sheet
                            .CC = "" 'put here the email adress in copy
                            .BCC = ""
                            .Subject = "Component Tracking File_new task"
                                                                    ' & Time() & propID give the mail creation hour
                            .Body = "Dear recipient, " & vbCrLf & vbCrLf & "The status in xxxxx was changed to xxxxx " & vbCrLf & "Please update the current status. " & vbCrLf & "Line : " & Line & " Component number : " & CompNb & "/" & Qorder & vbCrLf & vbCrLf & "----This email is automatically generated---- "
    
                                                                    ' add & vbCrLf & to go to the next line
    
                            '.Attachments.Add ActiveWorkbook.FullName 'Adds the active workbook as an attachment
                            .Display 'displays the mail as draft in Outlook
                            '.Send 'send the email directly, add ' if you dont want to send directly and remove ' before .Display
                            '.Save 'save the mail
                        'Worksheets("Reminders").Range("A1").Value = OutMail.To
                        End With
    
                        Set OutMail = Nothing 'cleans the memory by cleaning the variables
                        Set OutApp = Nothing 'cleans the memory by cleaning the variables
                        
        ElseIf ...

    Merci pour votre aide

    • Partager sur Facebook
    • Partager sur Twitter
      20 juin 2022 à 10:55:43

      tu as implanté la fonction dans quel nom de fonction/événement de la feuille ? 

      là l'envoi va se faire si une des cellules concernées par l'appel/déclenchement de la fonction contient la valeur testée ("xxxxxxx") 

      • Partager sur Facebook
      • Partager sur Twitter
        20 juin 2022 à 11:17:34

        La macro commence comme ceci 

         Private Sub Worksheet_Change(ByVal Target As Range)

        Et la fonction est bien implantée dans la feuille dans laquelle je travaille

        Si j'ai bien compris votre reponse, comment pourrais-je faire pour que l'envoi s'effectue lorsque quelqu'un rentre la valeur souhaitée uniquement ?

        -
        Edité par yamak9 20 juin 2022 à 11:18:43

        • Partager sur Facebook
        • Partager sur Twitter
          20 juin 2022 à 11:35:47

          déjà dans quelles cellules tu veux vérifier ? une seule, une plage ? si une plage, envoi d'un mail à chaque fois que la valeur est bonne ? ou un seul envoi si une des cellules à la bonne valeur?

          worksheet_change se déclenche à chaque fois que tu fais une modification dans la feuille, donc peut se répéter plusieurs fois 

          pour tester si la modification s'est faite dans la plage visée: le code vérifie si Target (les cellules modifiées) sont dans la plage A1:A10 et qu'il n'y a qu'une seule cellule de modifier (code issu de la doc https://docs.microsoft.com/fr-fr/office/vba/api/excel.worksheet.change)

          Private Sub Worksheet_Change(ByVal Target As Range)
          'si en dehors de la plage et plus d'une cellule, on sort
              If Intersect(Target, Range("A1:A10")) Is Nothing Or Target.Cells.Count > 1 Then Exit Sub 
              Application.EnableEvents = False
              'Set the values to be uppercase
              Target.Value = UCase(Target.Value)
              Application.EnableEvents = True
          End Sub



          -
          Edité par umfred 20 juin 2022 à 11:36:28

          • Partager sur Facebook
          • Partager sur Twitter
            20 juin 2022 à 12:03:37

            Je veux verifier dans une cellule qui fait partie d'une colonne particuliere (colonne M), cela peut etre n'importe quelle cellule dans cette colonne

             Je vais essayer en ajoutant cette ligne, je pense que cela devrait marcher 

             If Target.Column = 13 Then 



            -
            Edité par yamak9 20 juin 2022 à 12:06:24

            • Partager sur Facebook
            • Partager sur Twitter
              20 juin 2022 à 16:19:12

              Je crois que j'ai mal exprimé une demande: tu veux que l'événement se produise quand quelle(s) cellule(s) est modifiée(s) ?

              En mettant le "if Target.colum=13 then", le contenu du bloc if sera exécuté si une ou plusieurs cellules de la colonne 13 a été modifiée(s)

              (tu peux coupler les 2 If => If target.column = 13 and target.value="xxxxx" then )

              • Partager sur Facebook
              • Partager sur Twitter
                21 juin 2022 à 9:17:42

                Je crois que j'ai réglé mon probleme en ajoutant la ligne ci-dessous avant mes conditions :

                If Intersect(Target, Range("M1:M1000")) Is Nothing Or Target.Cells.Count > 1 Then Exit Sub

                Ainsi je n'ai plus mon probleme initial qui lancait mon programme lorsque j'etendais des cellules.

                Pour repondre a votre dernier message, je voulais que l'evenement se produise lorsque une cellule de la colonne M (cela peut etre n'importe laquelle) prend une valeur precise

                Merci beaucoup pour votre aide

                • Partager sur Facebook
                • Partager sur Twitter
                  21 juin 2022 à 10:48:01

                  tu pourrais remplacer Range("M1:M1000") par range("M1").EntireColumn (ça ne se limite ainsi pas qu'à la plage M1:M1000, au cas où tu aurais besoin de plus de 1000 lignes)
                  • Partager sur Facebook
                  • Partager sur Twitter

                  VBA Probleme lors de l'extension de cellule

                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                  × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                  • Editeur
                  • Markdown