Pb suite modification macro: ça fonctionne mal
agc
-
Patrice33740 Messages postés 8931 Date d'inscription Statut Membre Dernière intervention -
Patrice33740 Messages postés 8931 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
je viens sur le forum car je suis quasi novice en VBA et nécessite l'aide de pro du VBA;
j'utilise un macro qui a été écrite par un informaticien reconvertit dans la finance; cette macro a pour but de copier/coller dans un nouveau classeur certains onglets d'un fichier xls (2007) référencés dans les colonnes d'une feuille xls (onglet "paramètres") appartenant au même classeur et d'envoyer ce nouveau classeur composé des onglets précédemment copier via outlook à une liste de destinataires également référencés dans l'onglet "paramètre".
La macro s'arrete lorsqu'elle rencontre une cellule vide.
La macro d'origine était formatée pour 7 colonnes, j'ai ajouté 1 colonne et essayé d'adapter la macro pour 8 colonnes.
PB: la macro effectue parfaitement le premier envoi pouis s'arrête en positionnant la cellule active à la fin de la deuxième ligne (1ere cellule vide rencontrée de la deuxième ligne) mais pas d'envoi de la deuxième ligne.
je copie ci-dessous la macro d'origine (1) puis la macro adaptée (2):
Macro d'origine (1):
Sub ENVOI()
Dim NOM As String
Dim LAF1 As String
Dim LAF2 As String
Dim LAF3 As String
Dim LAF4 As String
Dim LAF5 As String
Dim LAF6 As String
Dim LAF7 As String
Dim LIBELLE As String
Dim PERSONNE As String
Dim SUJET As String
Dim MOIS As String
NOM = ActiveWorkbook.Name
'Pour que l'écran ne se modifie pas pendant l'exécution de la macro :
Application.ScreenUpdating = False
'Pour expliquer par message les erreurs pouvant avoir commises :
On Error GoTo TRAITERROR
'Message pour vérifier que le lancement de la macro est bien voulu :
Dim reponse As Integer
reponse = MsgBox("Avez-vous bien déplacer les onglets à envoyer à droite de l'onglet Paramètres ?", vbYesNo + vbQuestion)
If reponse = vbNo Then
MsgBox "Envoi par messagerie non effectué !"
Exit Sub
Else
MsgBox "Envoi par messagerie commencé. "
End If
'Message pour vérifier que la messagerie Outlook est ouverte :
Dim MESSAGERIE As Integer
MESSAGERIE = MsgBox("Est-ce que vous avez ouvert votre messagerie Outlook ?" & Chr _
(10) & "- Si OUI, choisir Oui" & Chr _
(10) & "- Si NON, choisir Non, car la macro ne pourra s'excécuter.", vbYesNo + vbQuestion)
If MESSAGERIE = vbNo Then
MsgBox "La macro s'est arrêtée. Ouvrez votre messagerie et relancez la macro."
Exit Sub
Else
End If
Sheets("Paramètres").Activate
Range("A16").Activate
PERSONNE = ActiveCell.Value
Range("B16").Activate
LAF1 = ActiveCell.Value
Range("C16").Activate
LAF2 = ActiveCell.Value
Range("D16").Activate
LAF3 = ActiveCell.Value
Range("E16").Activate
LAF4 = ActiveCell.Value
Range("F16").Activate
LAF5 = ActiveCell.Value
Range("G16").Activate
LAF6 = ActiveCell.Value
Range("H16").Activate
LAF7 = ActiveCell.Value
Range("I16").Activate
LIBELLE = ActiveCell.Value
MOIS = Sheets("Paramètres").Range("B26")
Do
If PERSONNE = "Pas de destinataire" Then
MsgBox "Pas de destinataire pour la feuille " & LIBELLE
Else
'Copier les 2 onglets ds nv classeur
Sheets(Array(LAF1, LAF2, LAF3, LAF4, LAF5, LAF6, LAF7)).Select
Sheets(Array(LAF1, LAF2, LAF3, LAF4, LAF5, LAF6, LAF7)).Copy
'Copier / collage spéciale valeur Page 1
Sheets(LAF1).Activate
Range("A1:DK3000").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Application.CutCopyMode = False
Range("A1").Select
'Copier / collage spéciale valeur Page 2
Sheets(LAF2).Select
Range("A1:DK3000").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Application.CutCopyMode = False
Range("A1").Select
'Copier / collage spéciale valeur Page 3
Sheets(LAF3).Select
Range("A1:DK3000").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Application.CutCopyMode = False
Range("A1").Select
'Copier / collage spéciale valeur Page 4
Sheets(LAF4).Select
Range("A1:DK3000").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Application.CutCopyMode = False
Range("A1").Select
'Copier / collage spéciale valeur Page 5
Sheets(LAF5).Select
Range("A1:DK3000").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Application.CutCopyMode = False
Range("A1").Select
'Copier / collage spéciale valeur Page 6
Sheets(LAF6).Select
Range("A1:DK3000").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Application.CutCopyMode = False
Range("A1").Select
'Copier / collage spéciale valeur Page 7
Sheets(LAF7).Select
Range("A1:DK3000").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Application.CutCopyMode = False
Range("A1").Select
'Retour sur la première feuille envoyée
Sheets(LAF1).Select
Range("A1").Select
SUJET = LIBELLE
ActiveWorkbook.SaveAs Filename:= _
"C:\Import\" & LIBELLE, FileFormat:=xlNormal, _
Password:="", WriteResPassword:="", ReadOnlyRecommended:=False _
, CreateBackup:=False
' virer les noms de champs pour gagner de la place
ActiveWorkbook.Names("Base_Planif").Delete
ActiveWorkbook.Names("Managers").Delete
ActiveWorkbook.Names("M").Delete
ActiveWorkbook.Names("N").Delete
ActiveWorkbook.Names("Services").Delete
ActiveWorkbook.SendMail Recipients:=PERSONNE, Subject:=SUJET, returnreceipt:=True
'MsgBox "Envoi par messagerie à " & PERSONNE
SendKeys "%N", False
ActiveWorkbook.Close (False)
End If
Sheets("Paramètres").Activate
ActiveCell.Offset(1, -8).Activate
PERSONNE = ActiveCell.Value
ActiveCell.Offset(0, 1).Activate
LAF1 = ActiveCell.Value
ActiveCell.Offset(0, 1).Activate
LAF2 = ActiveCell.Value
ActiveCell.Offset(0, 1).Activate
LAF3 = ActiveCell.Value
ActiveCell.Offset(0, 1).Activate
LAF4 = ActiveCell.Value
ActiveCell.Offset(0, 1).Activate
LAF5 = ActiveCell.Value
ActiveCell.Offset(0, 1).Activate
LAF6 = ActiveCell.Value
ActiveCell.Offset(0, 1).Activate
LAF7 = ActiveCell.Value
ActiveCell.Offset(0, 1).Activate
LIBELLE = ActiveCell.Value
Loop Until IsEmpty(ActiveCell)
'RETOUR SUR LA FEUILLE DE LANCEMENT DES MACROS
Sheets("Macro").Activate
MsgBox "L'envoi par messagerie à vos correspondants est terminé."
TRAITERROR:
Select Case Err
Case 1004
Resume Next
Exit Sub
Case 9
Resume Next
Exit Sub
End Select
'Remise à jour du raffaichissement de l'écran :
Application.ScreenUpdating = True
End Sub
Macro adapdtée (2):
Sub ENVOI()
Dim NOM As String
Dim LAF1 As String
Dim LAF2 As String
Dim LAF3 As String
Dim LAF4 As String
Dim LAF5 As String
Dim LAF6 As String
Dim LAF7 As String
Dim LAF8 As String
Dim LIBELLE As String
Dim PERSONNE As String
Dim SUJET As String
Dim MOIS As String
NOM = ActiveWorkbook.Name
'Pour que l'écran ne se modifie pas pendant l'exécution de la macro :
Application.ScreenUpdating = False
'Pour expliquer par message les erreurs pouvant avoir commises :
On Error GoTo TRAITERROR
'Message pour vérifier que le lancement de la macro est bien voulu :
Dim reponse As Integer
reponse = MsgBox("Avez-vous bien déplacer les onglets à envoyer à droite de l'onglet Paramètres ?", vbYesNo + vbQuestion)
If reponse = vbNo Then
MsgBox "Envoi par messagerie non effectué !"
Exit Sub
Else
MsgBox "Envoi par messagerie commencé. "
End If
'Message pour vérifier que la messagerie Outlook est ouverte :
Dim MESSAGERIE As Integer
MESSAGERIE = MsgBox("Est-ce que vous avez ouvert votre messagerie Outlook ?" & Chr _
(10) & "- Si OUI, choisir Oui" & Chr _
(10) & "- Si NON, choisir Non, car la macro ne pourra s'excécuter.", vbYesNo + vbQuestion)
If MESSAGERIE = vbNo Then
MsgBox "La macro s'est arrêtée. Ouvrez votre messagerie et relancez la macro."
Exit Sub
Else
End If
Sheets("Paramètres").Activate
Range("A16").Activate
PERSONNE = ActiveCell.Value
Range("B16").Activate
LAF1 = ActiveCell.Value
Range("C16").Activate
LAF2 = ActiveCell.Value
Range("D16").Activate
LAF3 = ActiveCell.Value
Range("E16").Activate
LAF4 = ActiveCell.Value
Range("F16").Activate
LAF5 = ActiveCell.Value
Range("G16").Activate
LAF6 = ActiveCell.Value
Range("H16").Activate
LAF7 = ActiveCell.Value
Range("I16").Activate
LAF8 = ActiveCell.Value
Range("J16").Activate
LIBELLE = ActiveCell.Value
MOIS = Sheets("Paramètres").Range("B26")
Do
If PERSONNE = "Pas de destinataire" Then
MsgBox "Pas de destinataire pour la feuille " & LIBELLE
Else
'Copier les 2 onglets ds nv classeur
Sheets(Array(LAF1, LAF2, LAF3, LAF4, LAF5, LAF6, LAF7, LAF8)).Select
Sheets(Array(LAF1, LAF2, LAF3, LAF4, LAF5, LAF6, LAF7, LAF8)).Copy
'Copier / collage spéciale valeur Page 1
Sheets(LAF1).Activate
Range("A1:DK3000").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Application.CutCopyMode = False
Range("A1").Select
'Copier / collage spéciale valeur Page 2
Sheets(LAF2).Select
Range("A1:DK3000").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Application.CutCopyMode = False
Range("A1").Select
'Copier / collage spéciale valeur Page 3
Sheets(LAF3).Select
Range("A1:DK3000").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Application.CutCopyMode = False
Range("A1").Select
'Copier / collage spéciale valeur Page 4
Sheets(LAF4).Select
Range("A1:DK3000").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Application.CutCopyMode = False
Range("A1").Select
'Copier / collage spéciale valeur Page 5
Sheets(LAF5).Select
Range("A1:DK3000").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Application.CutCopyMode = False
Range("A1").Select
'Copier / collage spéciale valeur Page 6
Sheets(LAF6).Select
Range("A1:DK3000").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Application.CutCopyMode = False
Range("A1").Select
'Copier / collage spéciale valeur Page 7
Sheets(LAF7).Select
Range("A1:DK3000").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Application.CutCopyMode = False
Range("A1").Select
'Copier / collage spéciale valeur Page 8
Sheets(LAF8).Select
Range("A1:DK3000").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Application.CutCopyMode = False
Range("A1").Select
'Retour sur la première feuille envoyée
Sheets(LAF1).Select
Range("A1").Select
SUJET = LIBELLE
ActiveWorkbook.SaveAs Filename:= _
"C:\Import\" & LIBELLE, FileFormat:=xlNormal, _
Password:="", WriteResPassword:="", ReadOnlyRecommended:=False _
, CreateBackup:=False
' virer les noms de champs pour gagner de la place
ActiveWorkbook.Names("Base_Planif").Delete
ActiveWorkbook.Names("Managers").Delete
ActiveWorkbook.Names("M").Delete
ActiveWorkbook.Names("N").Delete
ActiveWorkbook.Names("Services").Delete
ActiveWorkbook.SendMail Recipients:=PERSONNE, Subject:=SUJET, returnreceipt:=True
'MsgBox "Envoi par messagerie à " & PERSONNE
SendKeys "%N", False
ActiveWorkbook.Close (False)
End If
Sheets("Paramètres").Activate
ActiveCell.Offset(1, -8).Activate
PERSONNE = ActiveCell.Value
ActiveCell.Offset(0, 1).Activate
LAF1 = ActiveCell.Value
ActiveCell.Offset(0, 1).Activate
LAF2 = ActiveCell.Value
ActiveCell.Offset(0, 1).Activate
LAF3 = ActiveCell.Value
ActiveCell.Offset(0, 1).Activate
LAF4 = ActiveCell.Value
ActiveCell.Offset(0, 1).Activate
LAF5 = ActiveCell.Value
ActiveCell.Offset(0, 1).Activate
LAF6 = ActiveCell.Value
ActiveCell.Offset(0, 1).Activate
LAF7 = ActiveCell.Value
ActiveCell.Offset(0, 1).Activate
LAF8 = ActiveCell.Value
ActiveCell.Offset(0, 1).Activate
LIBELLE = ActiveCell.Value
Loop Until IsEmpty(ActiveCell)
'RETOUR SUR LA FEUILLE DE LANCEMENT DES MACROS
Sheets("Macro").Activate
MsgBox "L'envoi par messagerie à vos correspondants est terminé."
TRAITERROR:
Select Case Err
Case 1004
Resume Next
Exit Sub
Case 9
Resume Next
Exit Sub
End Select
'Remise à jour du raffaichissement de l'écran :
Application.ScreenUpdating = True
End Sub
Merci de votre aide !
je viens sur le forum car je suis quasi novice en VBA et nécessite l'aide de pro du VBA;
j'utilise un macro qui a été écrite par un informaticien reconvertit dans la finance; cette macro a pour but de copier/coller dans un nouveau classeur certains onglets d'un fichier xls (2007) référencés dans les colonnes d'une feuille xls (onglet "paramètres") appartenant au même classeur et d'envoyer ce nouveau classeur composé des onglets précédemment copier via outlook à une liste de destinataires également référencés dans l'onglet "paramètre".
La macro s'arrete lorsqu'elle rencontre une cellule vide.
La macro d'origine était formatée pour 7 colonnes, j'ai ajouté 1 colonne et essayé d'adapter la macro pour 8 colonnes.
PB: la macro effectue parfaitement le premier envoi pouis s'arrête en positionnant la cellule active à la fin de la deuxième ligne (1ere cellule vide rencontrée de la deuxième ligne) mais pas d'envoi de la deuxième ligne.
je copie ci-dessous la macro d'origine (1) puis la macro adaptée (2):
Macro d'origine (1):
Sub ENVOI()
Dim NOM As String
Dim LAF1 As String
Dim LAF2 As String
Dim LAF3 As String
Dim LAF4 As String
Dim LAF5 As String
Dim LAF6 As String
Dim LAF7 As String
Dim LIBELLE As String
Dim PERSONNE As String
Dim SUJET As String
Dim MOIS As String
NOM = ActiveWorkbook.Name
'Pour que l'écran ne se modifie pas pendant l'exécution de la macro :
Application.ScreenUpdating = False
'Pour expliquer par message les erreurs pouvant avoir commises :
On Error GoTo TRAITERROR
'Message pour vérifier que le lancement de la macro est bien voulu :
Dim reponse As Integer
reponse = MsgBox("Avez-vous bien déplacer les onglets à envoyer à droite de l'onglet Paramètres ?", vbYesNo + vbQuestion)
If reponse = vbNo Then
MsgBox "Envoi par messagerie non effectué !"
Exit Sub
Else
MsgBox "Envoi par messagerie commencé. "
End If
'Message pour vérifier que la messagerie Outlook est ouverte :
Dim MESSAGERIE As Integer
MESSAGERIE = MsgBox("Est-ce que vous avez ouvert votre messagerie Outlook ?" & Chr _
(10) & "- Si OUI, choisir Oui" & Chr _
(10) & "- Si NON, choisir Non, car la macro ne pourra s'excécuter.", vbYesNo + vbQuestion)
If MESSAGERIE = vbNo Then
MsgBox "La macro s'est arrêtée. Ouvrez votre messagerie et relancez la macro."
Exit Sub
Else
End If
Sheets("Paramètres").Activate
Range("A16").Activate
PERSONNE = ActiveCell.Value
Range("B16").Activate
LAF1 = ActiveCell.Value
Range("C16").Activate
LAF2 = ActiveCell.Value
Range("D16").Activate
LAF3 = ActiveCell.Value
Range("E16").Activate
LAF4 = ActiveCell.Value
Range("F16").Activate
LAF5 = ActiveCell.Value
Range("G16").Activate
LAF6 = ActiveCell.Value
Range("H16").Activate
LAF7 = ActiveCell.Value
Range("I16").Activate
LIBELLE = ActiveCell.Value
MOIS = Sheets("Paramètres").Range("B26")
Do
If PERSONNE = "Pas de destinataire" Then
MsgBox "Pas de destinataire pour la feuille " & LIBELLE
Else
'Copier les 2 onglets ds nv classeur
Sheets(Array(LAF1, LAF2, LAF3, LAF4, LAF5, LAF6, LAF7)).Select
Sheets(Array(LAF1, LAF2, LAF3, LAF4, LAF5, LAF6, LAF7)).Copy
'Copier / collage spéciale valeur Page 1
Sheets(LAF1).Activate
Range("A1:DK3000").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Application.CutCopyMode = False
Range("A1").Select
'Copier / collage spéciale valeur Page 2
Sheets(LAF2).Select
Range("A1:DK3000").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Application.CutCopyMode = False
Range("A1").Select
'Copier / collage spéciale valeur Page 3
Sheets(LAF3).Select
Range("A1:DK3000").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Application.CutCopyMode = False
Range("A1").Select
'Copier / collage spéciale valeur Page 4
Sheets(LAF4).Select
Range("A1:DK3000").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Application.CutCopyMode = False
Range("A1").Select
'Copier / collage spéciale valeur Page 5
Sheets(LAF5).Select
Range("A1:DK3000").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Application.CutCopyMode = False
Range("A1").Select
'Copier / collage spéciale valeur Page 6
Sheets(LAF6).Select
Range("A1:DK3000").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Application.CutCopyMode = False
Range("A1").Select
'Copier / collage spéciale valeur Page 7
Sheets(LAF7).Select
Range("A1:DK3000").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Application.CutCopyMode = False
Range("A1").Select
'Retour sur la première feuille envoyée
Sheets(LAF1).Select
Range("A1").Select
SUJET = LIBELLE
ActiveWorkbook.SaveAs Filename:= _
"C:\Import\" & LIBELLE, FileFormat:=xlNormal, _
Password:="", WriteResPassword:="", ReadOnlyRecommended:=False _
, CreateBackup:=False
' virer les noms de champs pour gagner de la place
ActiveWorkbook.Names("Base_Planif").Delete
ActiveWorkbook.Names("Managers").Delete
ActiveWorkbook.Names("M").Delete
ActiveWorkbook.Names("N").Delete
ActiveWorkbook.Names("Services").Delete
ActiveWorkbook.SendMail Recipients:=PERSONNE, Subject:=SUJET, returnreceipt:=True
'MsgBox "Envoi par messagerie à " & PERSONNE
SendKeys "%N", False
ActiveWorkbook.Close (False)
End If
Sheets("Paramètres").Activate
ActiveCell.Offset(1, -8).Activate
PERSONNE = ActiveCell.Value
ActiveCell.Offset(0, 1).Activate
LAF1 = ActiveCell.Value
ActiveCell.Offset(0, 1).Activate
LAF2 = ActiveCell.Value
ActiveCell.Offset(0, 1).Activate
LAF3 = ActiveCell.Value
ActiveCell.Offset(0, 1).Activate
LAF4 = ActiveCell.Value
ActiveCell.Offset(0, 1).Activate
LAF5 = ActiveCell.Value
ActiveCell.Offset(0, 1).Activate
LAF6 = ActiveCell.Value
ActiveCell.Offset(0, 1).Activate
LAF7 = ActiveCell.Value
ActiveCell.Offset(0, 1).Activate
LIBELLE = ActiveCell.Value
Loop Until IsEmpty(ActiveCell)
'RETOUR SUR LA FEUILLE DE LANCEMENT DES MACROS
Sheets("Macro").Activate
MsgBox "L'envoi par messagerie à vos correspondants est terminé."
TRAITERROR:
Select Case Err
Case 1004
Resume Next
Exit Sub
Case 9
Resume Next
Exit Sub
End Select
'Remise à jour du raffaichissement de l'écran :
Application.ScreenUpdating = True
End Sub
Macro adapdtée (2):
Sub ENVOI()
Dim NOM As String
Dim LAF1 As String
Dim LAF2 As String
Dim LAF3 As String
Dim LAF4 As String
Dim LAF5 As String
Dim LAF6 As String
Dim LAF7 As String
Dim LAF8 As String
Dim LIBELLE As String
Dim PERSONNE As String
Dim SUJET As String
Dim MOIS As String
NOM = ActiveWorkbook.Name
'Pour que l'écran ne se modifie pas pendant l'exécution de la macro :
Application.ScreenUpdating = False
'Pour expliquer par message les erreurs pouvant avoir commises :
On Error GoTo TRAITERROR
'Message pour vérifier que le lancement de la macro est bien voulu :
Dim reponse As Integer
reponse = MsgBox("Avez-vous bien déplacer les onglets à envoyer à droite de l'onglet Paramètres ?", vbYesNo + vbQuestion)
If reponse = vbNo Then
MsgBox "Envoi par messagerie non effectué !"
Exit Sub
Else
MsgBox "Envoi par messagerie commencé. "
End If
'Message pour vérifier que la messagerie Outlook est ouverte :
Dim MESSAGERIE As Integer
MESSAGERIE = MsgBox("Est-ce que vous avez ouvert votre messagerie Outlook ?" & Chr _
(10) & "- Si OUI, choisir Oui" & Chr _
(10) & "- Si NON, choisir Non, car la macro ne pourra s'excécuter.", vbYesNo + vbQuestion)
If MESSAGERIE = vbNo Then
MsgBox "La macro s'est arrêtée. Ouvrez votre messagerie et relancez la macro."
Exit Sub
Else
End If
Sheets("Paramètres").Activate
Range("A16").Activate
PERSONNE = ActiveCell.Value
Range("B16").Activate
LAF1 = ActiveCell.Value
Range("C16").Activate
LAF2 = ActiveCell.Value
Range("D16").Activate
LAF3 = ActiveCell.Value
Range("E16").Activate
LAF4 = ActiveCell.Value
Range("F16").Activate
LAF5 = ActiveCell.Value
Range("G16").Activate
LAF6 = ActiveCell.Value
Range("H16").Activate
LAF7 = ActiveCell.Value
Range("I16").Activate
LAF8 = ActiveCell.Value
Range("J16").Activate
LIBELLE = ActiveCell.Value
MOIS = Sheets("Paramètres").Range("B26")
Do
If PERSONNE = "Pas de destinataire" Then
MsgBox "Pas de destinataire pour la feuille " & LIBELLE
Else
'Copier les 2 onglets ds nv classeur
Sheets(Array(LAF1, LAF2, LAF3, LAF4, LAF5, LAF6, LAF7, LAF8)).Select
Sheets(Array(LAF1, LAF2, LAF3, LAF4, LAF5, LAF6, LAF7, LAF8)).Copy
'Copier / collage spéciale valeur Page 1
Sheets(LAF1).Activate
Range("A1:DK3000").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Application.CutCopyMode = False
Range("A1").Select
'Copier / collage spéciale valeur Page 2
Sheets(LAF2).Select
Range("A1:DK3000").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Application.CutCopyMode = False
Range("A1").Select
'Copier / collage spéciale valeur Page 3
Sheets(LAF3).Select
Range("A1:DK3000").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Application.CutCopyMode = False
Range("A1").Select
'Copier / collage spéciale valeur Page 4
Sheets(LAF4).Select
Range("A1:DK3000").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Application.CutCopyMode = False
Range("A1").Select
'Copier / collage spéciale valeur Page 5
Sheets(LAF5).Select
Range("A1:DK3000").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Application.CutCopyMode = False
Range("A1").Select
'Copier / collage spéciale valeur Page 6
Sheets(LAF6).Select
Range("A1:DK3000").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Application.CutCopyMode = False
Range("A1").Select
'Copier / collage spéciale valeur Page 7
Sheets(LAF7).Select
Range("A1:DK3000").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Application.CutCopyMode = False
Range("A1").Select
'Copier / collage spéciale valeur Page 8
Sheets(LAF8).Select
Range("A1:DK3000").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Application.CutCopyMode = False
Range("A1").Select
'Retour sur la première feuille envoyée
Sheets(LAF1).Select
Range("A1").Select
SUJET = LIBELLE
ActiveWorkbook.SaveAs Filename:= _
"C:\Import\" & LIBELLE, FileFormat:=xlNormal, _
Password:="", WriteResPassword:="", ReadOnlyRecommended:=False _
, CreateBackup:=False
' virer les noms de champs pour gagner de la place
ActiveWorkbook.Names("Base_Planif").Delete
ActiveWorkbook.Names("Managers").Delete
ActiveWorkbook.Names("M").Delete
ActiveWorkbook.Names("N").Delete
ActiveWorkbook.Names("Services").Delete
ActiveWorkbook.SendMail Recipients:=PERSONNE, Subject:=SUJET, returnreceipt:=True
'MsgBox "Envoi par messagerie à " & PERSONNE
SendKeys "%N", False
ActiveWorkbook.Close (False)
End If
Sheets("Paramètres").Activate
ActiveCell.Offset(1, -8).Activate
PERSONNE = ActiveCell.Value
ActiveCell.Offset(0, 1).Activate
LAF1 = ActiveCell.Value
ActiveCell.Offset(0, 1).Activate
LAF2 = ActiveCell.Value
ActiveCell.Offset(0, 1).Activate
LAF3 = ActiveCell.Value
ActiveCell.Offset(0, 1).Activate
LAF4 = ActiveCell.Value
ActiveCell.Offset(0, 1).Activate
LAF5 = ActiveCell.Value
ActiveCell.Offset(0, 1).Activate
LAF6 = ActiveCell.Value
ActiveCell.Offset(0, 1).Activate
LAF7 = ActiveCell.Value
ActiveCell.Offset(0, 1).Activate
LAF8 = ActiveCell.Value
ActiveCell.Offset(0, 1).Activate
LIBELLE = ActiveCell.Value
Loop Until IsEmpty(ActiveCell)
'RETOUR SUR LA FEUILLE DE LANCEMENT DES MACROS
Sheets("Macro").Activate
MsgBox "L'envoi par messagerie à vos correspondants est terminé."
TRAITERROR:
Select Case Err
Case 1004
Resume Next
Exit Sub
Case 9
Resume Next
Exit Sub
End Select
'Remise à jour du raffaichissement de l'écran :
Application.ScreenUpdating = True
End Sub
Merci de votre aide !
A voir également:
- Pb suite modification macro: ça fonctionne mal
- Suivi de modification word - Guide
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Modification dns - Guide
- Télécharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Jitbit macro recorder - Télécharger - Confidentialité
1 réponse
Bonjour,
Essaies ce code :
Cordialement
Patrice
Essaies ce code :
Sub ENVOI()
Dim WBK As Workbook
Dim WSH As Worksheet
Dim CEL As Range
Dim PLAGENOMMEE As Name
Dim NOM As String
Dim LAF1 As String
Dim LAF2 As String
Dim LAF3 As String
Dim LAF4 As String
Dim LAF5 As String
Dim LAF6 As String
Dim LAF7 As String
Dim LAF8 As String
Dim LIBELLE As String
Dim PERSONNE As String
Dim SUJET As String
Dim MOIS As String
Dim REPONSE As Integer
NOM = ActiveWorkbook.Name
'Pour que l'écran ne se modifie pas pendant l'exécution de la macro :
Application.ScreenUpdating = False
'Pour expliquer par message les erreurs pouvant avoir commises :
On Error GoTo TRAITERROR
'Message pour vérifier que le lancement de la macro est bien voulu :
REPONSE = MsgBox("Avez-vous bien déplacé les onglets à envoyer à droite de l'onglet Paramètres ?", vbYesNo + vbQuestion)
If REPONSE = vbNo Then
MsgBox "Envoi par messagerie non effectué !"
Exit Sub
Else
MsgBox "Envoi par messagerie commencé. "
End If
'Message pour vérifier que la messagerie Outlook est ouverte :
REPONSE = MsgBox("Est-ce que vous avez ouvert votre messagerie Outlook ?" & Chr(10) & _
"- Si OUI, choisir Oui" & Chr(10) & _
"- Si NON, choisir Non, car la macro ne pourra s'excécuter.", vbYesNo + vbQuestion)
If REPONSE = vbNo Then
MsgBox "La macro s'est arrêtée. Ouvrez votre messagerie et relancez la macro."
Exit Sub
End If
MOIS = Sheets("Paramètres").Range("B26")
Set CEL = Sheets("Paramètres").Range("A16")
Do
With CEL
PERSONNE = .Value
LAF1 = .Offset(0, 1).Value
LAF2 = .Offset(0, 2).Value
LAF3 = .Offset(0, 3).Value
LAF4 = .Offset(0, 4).Value
LAF5 = .Offset(0, 5).Value
LAF6 = .Offset(0, 6).Value
LAF7 = .Offset(0, 7).Value
LAF8 = .Offset(0, 8).Value
LIBELLE = .Offset(0, 9).Value
End With
If PERSONNE = "Pas de destinataire" Then
MsgBox "Pas de destinataire pour la feuille " & LIBELLE
Else
'Copier les onglets ds nv classeur
Sheets(Array(LAF1, LAF2, LAF3, LAF4, LAF5, LAF6, LAF7, LAF8)).Select
Sheets(Array(LAF1, LAF2, LAF3, LAF4, LAF5, LAF6, LAF7, LAF8)).Copy
Set WBK = ActiveWorkbook
'Copier / collage spécial valeur de chaque page
For Each WSH In WBK.Worksheets
WSH.UsedRange.Value = WSH.UsedRange.Value
WSH.Activate
WSH.Range("A1").Activate
Next WSH
'Retour sur la première feuille envoyée
WBK.Sheets(1).Activate
SUJET = LIBELLE
WBK.SaveAs Filename:="C:\Import\" & LIBELLE
' virer les noms de champs pour gagner de la place
If WBK.Names.Count > 0 Then
For Each PLAGENOMMEE In WBK.Names
PLAGENOMMEE.Delete
Next PLAGENOMMEE
End If
WBK.SendMail Recipients:=PERSONNE, Subject:=SUJET, returnreceipt:=True
' MsgBox "Envoi par messagerie à " & PERSONNE
SendKeys "%N", False
WBK.Close (False)
End If
Set CEL = CEL.Offset(1)
Loop Until IsEmpty(CEL)
'RETOUR SUR LA FEUILLE DE LANCEMENT DES MACROS
Sheets("Macro").Activate
MsgBox "L'envoi par messagerie à vos correspondants est terminé."
'Remise à jour du raffaichissement de l'écran :
Application.ScreenUpdating = True
Exit Sub
TRAITERROR:
Select Case Err.Number
Case 1004
Resume Next
Case Else
MsgBox "Erreur n° " & Err.Number & vbCr & _
Err.Description & vbCr & vbCr & _
"Envoi interrompu."
Exit Sub
End Select
'Remise à jour du raffaichissement de l'écran :
Application.ScreenUpdating = True
End Sub
Cordialement
Patrice