probleme de reinitialisation de variable (résolu)

Laguich

XLDnaute Junior
Bonjour à tous et tous mes voeux de bonheur et santé à vous et vos familles.

Voici mon problème:
Code:
Sub control2()
Dim MailAd As String
Dim Msg As String
Dim Subj As String
Dim URLto As String
Dim Etat As String
Dim L
Dim my_val
 Dim ligne As Integer
    Dim col As Integer
    Dim x As Range
    Dim moncorps As Variant

Dim c As Range
    'fin des déclarations  %0A POUR RETOUR LIGNE
    
Etat = Sheets("Données").Range("A1").Value
 For Each c In Sheets("Données").Range("c1:c29")
 If c.Value = "1" Then
 col = c.Columns.Count
MailAd = c.Cells(1, 2).Value
Subj = "Commande de pièces à " & c.Cells(1, 0).Value & " du " & Etat
my_val = c.Cells(1, 0).Value
        Select Case my_val
Case Is = "Gennes"
L = 1
 For ligne = L To L
        For col = 3 To 16
            If c.Cells(L, col) <> "" Then
            moncorps = moncorps & " " & c.Cells(L, col) & "%0A"
            Else
            Exit For
            End If
        Next col
     moncorps = moncorps
 Next ligne
 
 Case Is = "Peuton"
 L = 2
  For ligne = L To L
        For col = 3 To 16
            If c.Cells(L, col) <> "" Then
            moncorps = moncorps & " " & c.Cells(L, col) & "%0A"
            Else
            Exit For
            End If
        Next col
     moncorps = moncorps
 Next ligne
 End Select

    Msg = moncorps & "%0A" & "Merci d'avance"
   
URLto = "mailto:" & MailAd & "?subject=" & Subj & "&body=" & Msg
ActiveWorkbook.FollowHyperlink Address:=URLto
 
 End If
 Next
End Sub
Dans ce code, lors du select case, la condition "Gennes" est rempli, mon corps de mail se rempli comme il se doit, mais si la condition "Peuton" est également remplie, le corps de mail est le même que Gennes alors que selon la variable L elle ne devrait pas être la meme. Ou ai je fait une erreur ou que faut il ajouter? je vous ajoute une capture de la feuille.
capture.PNG

Merci d'avance
 

Pièces jointes

  • capture.PNG
    capture.PNG
    4 KB · Affichages: 39
  • capture.PNG
    capture.PNG
    4 KB · Affichages: 28
Dernière édition:

camarchepas

XLDnaute Barbatruc
Re : probleme de reinitialisation de variable

Bonjour , Meilleurs voeux,

Bon , j'ai simplifié le code,

Logiquement , cela doit fonctionner , mais sans fichier pour valider

Volià optimisée en tenant compte d'une des remarque de Paf ( Que je salue au passage) que je n'avais pas traitée , la remise à "" de moncorps

Code:
Sub control2()
Dim MailAd As String
Dim Msg As String, Subj As String, URLto As String, Etat As String, my_val As String, moncorps As String
Dim L As Long, ligne As Long, col As Long
Dim c As Range
 'fin des déclarations  %vblf POUR RETOUR LIGNE
   
 Etat = Sheets("Données").Range("A1").Value
 For Each c In Sheets("Données").Range("c1:c29")
   If c.Value = "1" Then
      Set c = Range("c1:c29")
      col = c.Columns.Count
      MailAd = c.Cells(1, 2).Value
      Subj = "Commande de pièces à " & c.Cells(1, 0).Value & " du " & Etat
      my_val = c.Cells(1, 0).Value
       my_val = "Gennes"
      Select Case my_val
        Case Is = "Gennes"
         L = 1
        Case Is = "Peuton"
         L = 2
      End Select
      ligne = L
       For col = 3 To 16
        If c.Cells(L, col) <> "" Then
          moncorps = moncorps & " " & c.Cells(L, col) & vbLf
         Else
          Exit For
        End If
       Next col
      Msg = moncorps & vbLf & "Merci d'avance"
   
      URLto = "mailto:" & MailAd & "?subject=" & Subj & "&body=" & Msg
      ActiveWorkbook.FollowHyperlink Address:=URLto
 
   End If
 moncorps = ""
 Next
End Sub
 
Dernière édition:

Paf

XLDnaute Barbatruc
Re : probleme de reinitialisation de variable

Bonjour
sans classeur joint moins facile ...

dans la boucle For Each c ... à chaque itération, on concatène pour former le corp du message : moncorps = moncorps & " " & c.Cells(L, col) & "%0A", donc au fur et à mesure de l'avancement de la boucle moncorp contient les renseignements de toutes les lignes qui doivent générer un message.

une réinitialisation en fin de code de boucle permettra d'avoir une variable moncorp vide pour l'itération suivante.

Msg = moncorps & "%0A" & "Merci d'avance"
moncorps = ""


Par ailleurs pas compris l'intérêt des boucles For L ... ( variable L qui d'ailleurs ne donne rien par rapport à la capture de page fourni); et la structure du code ne traite que s'il y a 2 destinataires, et s'il y en a plus, il faut modifier le code.

On est dans une boucle For Each c In ... , pourquoi ne pas envoyer un message pour chaque ligne lue, si elle n'est pas vide

A+

Edit

Bonjour camarchepas
 
Dernière édition:

Laguich

XLDnaute Junior
Re : probleme de reinitialisation de variable

Merci pour vos réponses,
J'ai essayé avec le nouveau code condensé, mais cela ne marche pas.
Le fichier joint est avec l'ancien code.
 

Pièces jointes

  • cdefaxBASE.xlsm
    26.4 KB · Affichages: 32
  • cdefaxBASE.xlsm
    26.4 KB · Affichages: 36
  • cdefaxBASE.xlsm
    26.4 KB · Affichages: 37

Paf

XLDnaute Barbatruc
Re : probleme de reinitialisation de variable

Re à tous

Code:
Sub control2()
 Dim MailAd As String, Msg As String, Subj As String, URLto As String, Etat As String
 Dim L As Integer, col As Integer, moncorps As String
 Dim c As Range
    'fin des déclarations  %0A POUR RETOUR LIGNE 'remplacer par  vbLf
    
 Etat = Sheets("Données").Range("A1").Value
 For Each c In Sheets("Données").Range("c1:c29")
    If c.Value = "1" Then
        'col = c.Columns.Count supprimé car c ne comporte qu'une colonne
        NbCol = Cells(c.Row, Columns.Count).End(xlToLeft).Column
        L = c.Row ' N° de ligne de la cellule
        MailAd = c.Cells(1, 2).Value
        Subj = "Commande de pièces à " & c.Cells(1, 0).Value & " du " & Etat
        For col = 3 To NbCol
            If c.Cells(1, col) <> "" Then
                moncorps = moncorps & " " & c.Cells(1, col) & vbLf
            Else
            'Exit For ' Exit supprimer il y a peut-être des données dans les colonnes suivantes
            End If
        Next col
        'moncorps = moncorps ' inutile
        Msg = moncorps & vbLf & "Merci d'avance"
   
        URLto = "mailto:" & MailAd & "?subject=" & Subj & "&body=" & Msg
        ActiveWorkbook.FollowHyperlink Address:=URLto
        'MsgBox MailAd & vbLf & Subj & vbLf & Msg
        
        moncorps = ""
    End If
 Next
End Sub

ça me parait plus simple, mais je ne sais pas si j'avais tous les éléments pour simplifier.

Il y avait un décalage dans la recherche des données avec l'utilisation de c.Cells(L, col), j'ai remplacé L par 1 et on reste sur la bonne ligne

A+

Edit d'ailleurs la ligne : L = c.Row peut être supprimée
J'ai utilisé vbLf pour des essais, il faudra les remplacer par "%0A" pour que ça fonctionne dans le message
 
Dernière édition:

camarchepas

XLDnaute Barbatruc
Re : probleme de reinitialisation de variable (résolu)

Dans ce cas , il suffit de régler la hauteur de ligne à 2 fois la normale .




Pourquoi ne pas faire de même avec les colonnes .




Une base de données est fait pour stockée les données pas être jolie ou pratique .




Il existe ensuite les formulaires ou pages d'accès pour faire joli.
 

Discussions similaires

Statistiques des forums

Discussions
312 480
Messages
2 088 757
Membres
103 950
dernier inscrit
Thomas Solioz