cs_Marathon Man
Messages postés71Date d'inscriptionlundi 24 juillet 2006StatutMembreDernière intervention 6 septembre 2006
-
26 août 2006 à 08:44
cs_Marathon Man
Messages postés71Date d'inscriptionlundi 24 juillet 2006StatutMembreDernière intervention 6 septembre 2006
-
26 août 2006 à 22:44
Bonjour,
Je souhaiterais créer une macro afin de tester si plusieurs cellules sont vides sur plusieurs colonnes
Après des heures de recherche, je n'ai pas réussi.
Si vous avez une solution je vous en remercie par avance.
cs_Marathon Man
Messages postés71Date d'inscriptionlundi 24 juillet 2006StatutMembreDernière intervention 6 septembre 2006 26 août 2006 à 14:06
j'ai mis cela dans thisworkbook
Private Sub Workbook_Open()
Sheets("MENU").Select
Dim cmdB As CommandBar
For Each cmdB In Application.CommandBars
cmdB.Enabled = False
Next cmdB
' si tu veux masquer en plus la barre d'état
' la barre de formule
' les onglets...
With Application
.DisplayFullScreen = True
.DisplayStatusBar = False
.DisplayFormulaBar = False
End With
With ActiveWindow
.DisplayWorkbookTabs = False
.DisplayHeadings = False
End With
'
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim cmdB As CommandBar
For Each cmdB In Application.CommandBars
cmdB.Enabled = True
Next cmdB
With Application
.DisplayFullScreen = False
.DisplayStatusBar = True
.DisplayFormulaBar = True
End With
With ActiveWindow
.DisplayWorkbookTabs = True
.DisplayHeadings = True
End With
End Sub
chaibat05
Messages postés1883Date d'inscriptionsamedi 1 avril 2006StatutMembreDernière intervention20 novembre 20072 26 août 2006 à 14:48
Je veux dire qu' il fautt juste ajouter le mot Public devant
Sub Cherche_Cellules_Vides_Dans_Selection()
Dim MaCell1 As Range
Dim MaCell2 As Range
Dim MaCell As Range
.........
..........
End Sub
Pour avoir
Public Sub Cherche_Cellules_Vides_Dans_Selection()
Dim MaCell1 As Range
Dim MaCell2 As Range
Dim MaCell As Range
.........
..........
End Sub
Et pour que ta procédure Cherche_Cellules_Vides_Dans_Selection()
soit définie.
En réponse à l' erreur :
Sub Cherche_Cellules_Vides_Dans_Selection() non définie
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_Marathon Man
Messages postés71Date d'inscriptionlundi 24 juillet 2006StatutMembreDernière intervention 6 septembre 2006 26 août 2006 à 15:13
j'ai fait ceci mais en fait il me grise les les cellules vides
de 17 à66 t même si j'en renseigne une , il me les grise aussi
Mois il me faut un msbox si toutes les cellules qui sont comprisent entre les eux plages sont vides et sans exception
pas simple mon affaire
Dim bolEnvoiMail As Boolean
' *** cette variable est à placer dans les déclarations
Sub mail()
'
' mail Macro
' Macro enregistrée le 25/08/2006 par User name placeholder
Call Cherche_Cellules_Vides_Dans_Selection
If bolEnvoiMail = False Then Exit Sub
If Worksheets("DISPOSITIFS").Range("K6").Value = "" Then
MsgBox ("Indiquer votre service SVP"): Exit Sub
End If
If Worksheets("DISPOSITIFS").Range("Q6").Value = "" Then
MsgBox ("Veuillez indiquer votre Unité Fonctionnelle merci."): Exit Sub
End If
If Worksheets("DISPOSITIFS").Range("H68").Value = "" Then
MsgBox ("Veuillez indiquer votre Nom en bas de la feuille merci."): Exit Sub
End If
Dim Wbk As Workbook
ThisWorkbook.Sheets("DISPOSITIFS").Copy
Set Wbk = ActiveWorkbook
With Wbk
.SendMail "[mailto:sylvie.r@wanadoo.fr sylvie.r@wanadoo.fr]", "COMMANDES DISPOSITIFS MEDICAUX"
.Close
End With
Confirmation.Show
End Sub
Public Sub Cherche_Cellules_Vides_Dans_Selection()
Dim MaCell1 As Range
Dim MaCell2 As Range
Dim MaCell As Range
bolEnvoiMail = True
Set MaCell1 = Range("L17:L66")
Set MaCell2 = Range("X15:X66")
MaCell1.Select
For Each MaCell In Selection If MaCell.Value "" Then bolEnvoiMail False: Exit Sub
Next MaCell
MaCell2.Select
For Each MaCell In Selection If MaCell.Value "" Then bolEnvoiMail False: Exit Sub
Next MaCell
cs_Marathon Man
Messages postés71Date d'inscriptionlundi 24 juillet 2006StatutMembreDernière intervention 6 septembre 2006 26 août 2006 à 15:13
j'ai fait ceci mais en fait il me grise les les cellules vides
de 17 à66 t même si j'en renseigne une , il me les grise aussi
Mois il me faut un msbox si toutes les cellules qui sont comprisent entre les eux plages sont vides et sans exception
pas simple mon affaire
Dim bolEnvoiMail As Boolean
' *** cette variable est à placer dans les déclarations
Sub mail()
'
' mail Macro
' Macro enregistrée le 25/08/2006 par User name placeholder
Call Cherche_Cellules_Vides_Dans_Selection
If bolEnvoiMail = False Then Exit Sub
If Worksheets("DISPOSITIFS").Range("K6").Value = "" Then
MsgBox ("Indiquer votre service SVP"): Exit Sub
End If
If Worksheets("DISPOSITIFS").Range("Q6").Value = "" Then
MsgBox ("Veuillez indiquer votre Unité Fonctionnelle merci."): Exit Sub
End If
If Worksheets("DISPOSITIFS").Range("H68").Value = "" Then
MsgBox ("Veuillez indiquer votre Nom en bas de la feuille merci."): Exit Sub
End If
Dim Wbk As Workbook
ThisWorkbook.Sheets("DISPOSITIFS").Copy
Set Wbk = ActiveWorkbook
With Wbk
.SendMail "[mailto:sylvie.r@wanadoo.fr sylvie.r@wanadoo.fr]", "COMMANDES DISPOSITIFS MEDICAUX"
.Close
End With
Confirmation.Show
End Sub
Public Sub Cherche_Cellules_Vides_Dans_Selection()
Dim MaCell1 As Range
Dim MaCell2 As Range
Dim MaCell As Range
bolEnvoiMail = True
Set MaCell1 = Range("L17:L66")
Set MaCell2 = Range("X15:X66")
MaCell1.Select
For Each MaCell In Selection If MaCell.Value "" Then bolEnvoiMail False: Exit Sub
Next MaCell
MaCell2.Select
For Each MaCell In Selection If MaCell.Value "" Then bolEnvoiMail False: Exit Sub
Next MaCell
chaibat05
Messages postés1883Date d'inscriptionsamedi 1 avril 2006StatutMembreDernière intervention20 novembre 20072 26 août 2006 à 15:30
Désolé, mais ça devient un peu plus compliqué pour moi.
Peut être que quelqu' un d' autre pourras t' aider encore plus.
Tu auuras certainement d' autres réponses.
bon courage.
mortalino
Messages postés6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 décembre 201118 26 août 2006 à 15:34
Re,
Fais Insérer, Module, et colle ceci (et répond à ma question située dans ta procédure Mail stp, merci) :
<small> Coloration syntaxique automatique </small>
Dim bolEnvoiMail As Boolean
' *** cette variable est à placer dans les déclarations
Sub mail()
'
' mail Macro
' Macro enregistrée le 25/08/2006 par User name placeholder
Call Cherche_Cellules_Vides_Dans_Selection
If bolEnvoiMail = False Then Exit Sub
' *** laisse les ElseIf !
If Worksheets("DISPOSITIFS").Range("K6").Value = "" Then
MsgBox ("Indiquer votre service SVP"): Exit Sub
ElseIf Worksheets("DISPOSITIFS").Range("Q6").Value = "" Then
MsgBox ("Veuillez indiquer votre Unité Fonctionnelle merci."): Exit Sub
ElseIf Worksheets("DISPOSITIFS").Range("H68").Value = "" Then
MsgBox ("Veuillez indiquer votre Nom en bas de la feuille merci."): Exit Sub
End If
' *** Ca sert à quoi tout ça, que veux tu faire exactement :
' ########################################################
Dim Wbk As Workbook
ThisWorkbook.Sheets("DISPOSITIFS").Copy
Set Wbk = ActiveWorkbook
With Wbk
.SendMail "sylvie.r@wanadoo.fr", "COMMANDES DISPOSITIFS MEDICAUX"
.Close
End With
' ########################################################
Confirmation.Show
End Sub
Public Sub Cherche_Cellules_Vides_Dans_Selection()
Dim MaCell1 As Range
Dim MaCell2 As Range
Dim MaCell As Range
bolEnvoiMail = True
Set MaCell1 = Range("L17:L66")
Set MaCell2 = Range("X15:X66")
MaCell1.Select
For Each MaCell In Selection
If MaCell.Value = "" Then MsgBox "La cellule " & MaCell.Address & " est vide !": bolEnvoiMail = False: Exit Sub
Next MaCell
MaCell2.Select
For Each MaCell In Selection
If MaCell.Value = "" Then MsgBox "La cellule " & MaCell.Address & " est vide !": bolEnvoiMail = False: Exit Sub
Next MaCell
cs_Marathon Man
Messages postés71Date d'inscriptionlundi 24 juillet 2006StatutMembreDernière intervention 6 septembre 2006 26 août 2006 à 15:56
Réponse à ta question
' *** Ca sert à quoi tout ça, que veux tu faire exactement :
' ########################################################
Dim Wbk As Workbook
ThisWorkbook.Sheets("DISPOSITIFS").Copy
Set Wbk = ActiveWorkbook
With Wbk
.SendMail "sylvie.r@wanadoo.fr", "COMMANDES DISPOSITIFS MEDICAUX"
.Close
End With
J'envoie un mail avec une insertion automatique en pièce jointe du classeur qui est ouvert
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201822 26 août 2006 à 15:58
Salut,
Mortalino, je reprend ton bout de code pour le modifier selon ma
compréhension du problème. Ton code regarde s'Il y a une cellule vide
et empêche l'envoi le cas échéant.
Je pense plutôt qu'il faut vérifier si au moins une cellule contient quelque chose
dans l'une ou l'autre des 2 plages et accepter l'envoi si c'est le cas. Tout ça pour éviter d'envoyer un
bon de commande vide. Ça prend donc un seul item non vide pour que la commande soit valide et pouvoir
envoyer.
'Dim bolEnvoiMail As Boolean - On laisse tomber cette variable
' *** cette variable est à placer dans les déclarations
Function Cherche_Cellule_NonVide_Dans_Selection() As Boolean
Dim MaCell1 As Range
Dim MaCell2 As Range
Dim MaCell As Range
Set MaCell1 = Range("L17:L38")
Set MaCell2 = Range("X15:X66")
MaCell1.Select
For Each MaCell In Selection
If MaCell.Value <> "" Then Cherche_Cellule_NonVide_Dans_Selection = True: Exit Sub
Next MaCell
MaCell2.Select
For Each MaCell In Selection
If MaCell.Value <> "" Then Cherche_Cellule_NonVide_Dans_Selection = True: Exit Sub
Next MaCell
End Sub
Et dans la macro d'envoi
Sub mail()
'
' mail Macro
' Macro enregistrée le 25/08/2006 par User name placeholder
If Not Cherche_Cellule_NonVide_Dans_Selection ' si toutes les cellules sont vides
Msgbox "La commande est vide"
Exit Sub
Next
If Worksheets("DISPOSITIFS").Range("K6").Value = "" Then
mortalino
Messages postés6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 décembre 201118 26 août 2006 à 16:00
Je trouve donc ces syntaxes bizarres :
Dim Wbk As Workbook
ThisWorkbook.Sheets("DISPOSITIFS").Copy
Set Wbk = ActiveWorkbook
Le Wbk n'a pas vraiment lieu d'être, et le Copy, tu veux faire quoi avec, faire une copie de la feuille et l'enregistrer indépendemment du classeur actuellement ouvert ou tu veux juste envoyer le Mail, sans faire de copie ?
@++
<hr size="2" width="100%" />
--Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
<!--
mortalino
Messages postés6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 décembre 201118 26 août 2006 à 16:03
MPi, (salut)
il ne veut pas envoyer s'il y a au moins une donnée dans ces 2 plages de cellules, mais envoyer la pièce jointe si TOUTES les cellules des 2 plages sont remplies !
Donc, s'il y en a une vide, il faut arrêter l'exécution.
@++
<hr size="2" width="100%" />
--Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
<!--
cs_Marathon Man
Messages postés71Date d'inscriptionlundi 24 juillet 2006StatutMembreDernière intervention 6 septembre 2006 26 août 2006 à 16:11
si au moins une cellule contient quelque chose dans l'une ou l'autre des 2 plages et accepter l'envoi si c'est le cas. Tout ça pour éviter d'envoyer un bon de commande vide.
Mais s'il n'y a aucune donnée dans les deux plages alors message box commande vide
c'est exactement ça mais pas obligé d'avoir toutes cellules renseignées pour envoyer
cs_Marathon Man
Messages postés71Date d'inscriptionlundi 24 juillet 2006StatutMembreDernière intervention 6 septembre 2006 26 août 2006 à 16:20
je vais vous dire l'idée complète
Ensuite une fois que la personne a fait sa commande, elle clique sur envoyer
et ensuite l'email est envoyé directement avec en pièce jointe le classeur puis ensuite
je vide toutes les cellules afin qu'il soit ossible de refaire une commande avec un document propre
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201822 26 août 2006 à 16:34
Non, Il n'y a qu'une Function que tu peux mettre dans le même module que ta procédure Mail() pour envoyer
Le principe est de vérifier les 2 plages que tu as mentionnées.
Le code de Mortalino est parfait pour ça.
Le fait d'utiliser une Function AS BOOLEAN fait en sorte que cette
Function retourne VRAI ou FAUX selon qu'elle trouve ou non une cellule
remplie. Donc, dès qu'une cellule est remplie, on sort de la Function
en envoyant "Vrai" comme résultat.
Au début de ta macro d'envoi, tu vérifies si la Function retourne Vrai
ou Faux. Si c'est faux, donc toutes vides, tu envoies un message et tu
sors. Sinon, le code se continue.
Par contre, je viens de voir qu'il y a plusieurs "Sub" dans ma Function. Je refais un Copier/coller
Function Cherche_Cellule_NonVide_Dans_Selection() As Boolean
Dim MaCell1 As Range
Dim MaCell2 As Range
Dim MaCell As Range
Set MaCell1 = Range("L17:L38")
Set MaCell2 = Range("X15:X66")
MaCell1.Select
'sélection de la 1ere plage
' si une cellule n'est pas vide, on sort de la Function en retournant VRAI
For Each MaCell In Selection
If MaCell.Value <> "" Then Cherche_Cellule_NonVide_Dans_Selection = True: Exit Function
Next MaCell
MaCell2.Select
'même chose pour la 2e sélection
For Each MaCell In Selection
If MaCell.Value <> "" Then Cherche_Cellule_NonVide_Dans_Selection = True: Exit Function
Next MaCell
End Function
****************************************
Ça, c'était LA procédure (Function)
Maintenant, dans TA procédure d'envoi
Sub mail()
'
' mail Macro
' Macro enregistrée le 25/08/2006 par User name placeholder
If Not Cherche_Cellule_NonVide_Dans_Selection ' si toutes les cellules sont vides
Msgbox "La commande est vide"
Exit Sub
Next
If Worksheets("DISPOSITIFS").Range("K6").Value = "" Then
Dim cmdB As CommandBar
For Each cmdB In Application.CommandBars
cmdB.Enabled = False
Next cmdB
' si tu veux masquer en plus la barre d'état
' la barre de formule
' les onglets...
With Application
.DisplayFullScreen = True
.DisplayStatusBar = False
.DisplayFormulaBar = False
End With
With ActiveWindow
.DisplayWorkbookTabs = False
.DisplayHeadings = False
End With
'
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim cmdB As CommandBar
For Each cmdB In Application.CommandBars
cmdB.Enabled = True
Next cmdB
With Application
.DisplayFullScreen = False
.DisplayStatusBar = True
.DisplayFormulaBar = True
End With
With ActiveWindow
.DisplayWorkbookTabs = True
.DisplayHeadings = True
End With
End Sub
_________________________________________________________
' *** maintenant, insère ceci dans un Module (un seul, pas dans plusieurs) :
Dim bolEnvoiMail As Boolean
Dim MaCell1 As Range
Dim MaCell2 As Range
' *** ces variables sont à placer dans les déclarations
Sub mail()
'
' mail Macro
' Macro enregistrée le 25/08/2006 par User name placeholder
Call Cherche_Cellules_Vides_Dans_Selection
If bolEnvoiMail = False Then Exit Sub
Worksheets("DISPOSITIFS").Select
' *** laisse les ElseIf !
If Range("K6").Value = "" Then
MsgBox ("Indiquer votre service SVP"): Exit Sub
ElseIf Range("Q6").Value = "" Then
MsgBox ("Veuillez indiquer votre Unité Fonctionnelle merci."): Exit Sub
ElseIf Range("H68").Value = "" Then
MsgBox ("Veuillez indiquer votre Nom en bas de la feuille merci."): Exit Sub
End If