TEST CELLULES VIDES

Résolu
cs_Marathon Man Messages postés 71 Date d'inscription lundi 24 juillet 2006 Statut Membre Dernière intervention 6 septembre 2006 - 26 août 2006 à 08:44
cs_Marathon Man Messages postés 71 Date d'inscription lundi 24 juillet 2006 Statut Membre Derniè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.

101 réponses

cs_Marathon Man Messages postés 71 Date d'inscription lundi 24 juillet 2006 Statut Membre Derniè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
0
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
26 août 2006 à 14:15
Restons sur l' erreur
Call Cherche_Cellules_Vides_Dans_Selection

Est ce que tu as déclaré 
Public Sub Cherche_Cellules_Vides_Dans_Selection
?
0
cs_Marathon Man Messages postés 71 Date d'inscription lundi 24 juillet 2006 Statut Membre Dernière intervention 6 septembre 2006
26 août 2006 à 14:38
non je ne sais ce que tu entends pas déclaré
il faut le faire dans un module ou thisworkbook......

je suis un débant
0
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
26 août 2006 à 14:50
et il faut le faire dans un module .
0
cs_Marathon Man Messages postés 71 Date d'inscription lundi 24 juillet 2006 Statut Membre Dernière intervention 6 septembre 2006
26 août 2006 à 14:59
j'essaye et je te dis
merci
0
cs_Marathon Man Messages postés 71 Date d'inscription lundi 24 juillet 2006 Statut Membre Derniè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


End Sub


 
0
cs_Marathon Man Messages postés 71 Date d'inscription lundi 24 juillet 2006 Statut Membre Derniè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


End Sub


 
0
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
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.
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
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 

End Sub 

<small> Coloration syntaxique automatique </small>

@++

<hr size="2" width="100%" />
  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
<!--
0
cs_Marathon Man Messages postés 71 Date d'inscription lundi 24 juillet 2006 Statut Membre Derniè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

Je vais essayé ta macro
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 22
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

  MsgBox ("Indiquer votre service SVP"): Exit Sub

End If
................

................

MPi
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
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"
<!--
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
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"
<!--
0
cs_Marathon Man Messages postés 71 Date d'inscription lundi 24 juillet 2006 Statut Membre Derniè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

Merci à vous deux
0
cs_Marathon Man Messages postés 71 Date d'inscription lundi 24 juillet 2006 Statut Membre Dernière intervention 6 septembre 2006
26 août 2006 à 16:15
Autrement MPI

Il y a deux parties pour ta macro.
Faut-il les mettre dans deux modules différents ?
 ++
0
cs_Marathon Man Messages postés 71 Date d'inscription lundi 24 juillet 2006 Statut Membre Derniè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

j'espère avoir été clair
++
0
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
26 août 2006 à 16:28
Testes uniquement sur les cellules qui doivent obligatoiremenr être renseignées.
s' il manque une , tu annules l' envoi.
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 22
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

  MsgBox ("Indiquer votre service SVP"): Exit Sub

End If

................

................


En espérant être plus clair...
MPi
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
26 août 2006 à 16:36
Je t'ai fais qques modifs :

<small> Coloration syntaxique automatique </small>
' *** jusqu'au trait, mettre ceci 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 
_________________________________________________________ 

' *** 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  


ActiveWorkbook.SendMail "sylvie.r@wanadoo.fr", "COMMANDES DISPOSITIFS MEDICAUX"  


Confirmation.Show  
MaCell1.Clear 
MaCell2.Clear 
End Sub  

Public Sub Cherche_Cellules_Vides_Dans_Selection()  
    Dim MaCell As Range  


bolEnvoiMail = False 

Set MaCell1 = Range("L17:L66")  
Set MaCell2 = Range("X15:X66")  


MaCell1.Select  

For Each MaCell In Selection  
    If MaCell.Value <> "" Then bolEnvoiMail = True: Exit Sub 
Next MaCell  


MaCell2.Select  

For Each MaCell In Selection  
    If MaCell.Value = "" Then bolEnvoiMail = True: Exit Sub  
Next MaCell  

End Sub  
<small> Coloration syntaxique automatique </small>

@++

<hr size="2" width="100%" />
  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
<!--
0
Rejoignez-nous