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

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 à 18:23
Ah, une troisième :
If bolEnvoiMail = False Then _
    MsgBox "Il n'y a aucune données à traiter dans les plages  L17:L66 et X15:X66", _
                    vbCritical, "Envoi de la pièce jointe annulée"
' manque un guillemet après la plage de cellule, dans le message !                               ^ici
End Sub 

@++

<hr size="2" width="100%" />
  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
<!--
3
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 à 09:07
Salut,

essai ceci :

Sub Cherche_Cellules_Vides_Dans_Selection()
Dim MaCell As Range
' *** sélectionne la zone de recherche dans ta feuille
' ou fait, par exemple, Range("A1:G100").Select

For Each MaCell In Selection
If MaCell.Value = "" Then MsgBox MaCell.Address & " est vide"
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 à 09:24
Merci pour ta réponse aussi rapide mais j'ai deux plages de cellules(L17,L38)et X15,X66) Entre les deux colonnes j'ai des informations qui ne sont pas à sélectionner
Je suis débutant et je n'ai pas réussi

J'ai fait un bouton envoyer pour envoyer un fichier joint directement par mail(bon de commande avec des cases)
je lui ai affecté une macro
et je ne veux pas qu'il envoie le fichier si les cellules sont vides(cela voudrait dire que la commande et vierge)

J'espère avoir été clair

Merci d'avance
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 à 09:36
Dim bolEnvoiMail As Boolean
' *** cette variable est à placer dans les déclarations

Sub Cherche_Cellules_Vides_Dans_Selection()
Dim MaCell1 As Range
Dim MaCell2 As Range
Dim MaCell As Range

bolEnvoiMail = True

Set MaCell1 = Range("L17:L38")
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

Ensuite dans ton CommandButton pour envoyer le ficher joint par mail :
' *** Ceci sera la première instruction de l'évènement Click de ce bouton :
If bolEnvoiMail = False Then Exit Sub

Voilà, tu as tous les éléments en main.

Bonne prog

++
0

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

Posez votre question
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 à 09:54
Merci vraiment je vais essayé
Voici pour info ma macro

Sub mail()
'
' mail Macro
' Macro enregistrée le 25/08/2006 par User name placeholder


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
Wbk.SendMail "[mailto:sylvie.r@wanadoo.fr sylvie.r@wanadoo.fr]", "COMMANDES DISPOSITIFS MEDICAUX"


Wbk.Close




Confirmation.Show


   
End Sub
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 à 10:05
Bah alors fais ceci :

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 "sylvie.r@wanadoo.fr", "COMMANDES DISPOSITIFS MEDICAUX"
.Close
End With

Confirmation.Show

End Sub

Sub Cherche_Cellules_Vides_Dans_Selection()
Dim MaCell1 As Range
Dim MaCell2 As Range
Dim MaCell As Range

bolEnvoiMail = True

Set MaCell1 = Range("L17:L38")
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 à 10:52
Dim bolEnvoiMail As Boolean
' *** cette variable est à placer dans les déclarations
Tu peux me dire ce que signifie les déclararations
++
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 à 11:05
Les déclarations c'est la partie où tu déclares tes variables public (accessibles par toutes tes procédures), les API, etc..

Bref, tu dois placer la variable en tout premier, au dessus de TOUTES tes procédures.

++
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 à 11:22
Je t'embête mais c'est mon dernière soucis pour que cela soit nickel
il faut que je le place dans la macro ou la feuil ou this workbook

Est-ce que j'ai bien compris ?

Dim bolEnvoiMail As Boolean

Sub mail()
'
' mail Macro
' Macro enregistrée le 25/08/2006 par User name placeholder
.....................
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 à 11:28
j'ai compris pour les déclartions
en fait on peut voir la macro mail et la même mais en choisissant déclarations
la macro mail declaration aura en plus
Dim bolEnvoiMail As Boolean

Sub mail()
'
' mail Macro
' Macro enregistrée le 25/08/2006 par User name placeholderer

Si tu pouvais me confirmer mais avec de la persévérance on y arrive
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 à 11:36
J'ai rien compris à ton explication !!

C'est simple, les décarations se trouvent aux plus haut.
Je peux pas mieux t'expliquer, c'est dans les premières lignes du module de code (que ce soit une Form ou un Module)

++
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 à 11:39
j'avais pas vu ton 1er message :

"Je t'embête mais c'est mon dernière soucis pour que cela soit nickel
il faut que je le place dans la macro ou la feuil ou this workbook"

Dans AUCUNES procédures, au dessus de toutes celle-ci ^^
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 à 11:44
Set MaCell1 = Range("L17:L66")
Set MaCell2 = Range("X15:X66")
J'ai bien avancé mais ce n'est pas encore ça
J'ai bien mis la macro mais il me slectionne les cellules de L17 à L66

En fait je voudrais qu'il teste la plage de cellules (les deux lignes au dessus ) et
ensuite afficher un msbox si ""

Pas simple ma demande
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 à 11:59
Pas simple, pas simple, t'as juste un copier collé à faire de ce que je t'ai fait !

Dans ton second message, tu dis "j'ai deux plages de cellules(L17,L38)et X15,X66)"
donc c'est normal qu'il y ait
Set MaCell1 = Range("L17:L66")
Set MaCell2 = Range("X15:X66")
la procédure teste donc ces deux plages !

++
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 à 12:11
Voilà ce que j'ai fait mëme si je mets 10 dans une cellule cela ne fonctionne pas

Je vais continuer à chercher

voivi la macro pour info

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


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
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 à 12:26
il faut que tu aies absolument des données dans :
K6
Q6
H68
L17:L66
X15:X66

Sinon, voici une simplification de ta procédure Mail :

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").Activate

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

Dim Wbk As Workbook
ActiveSheet.Copy
Set Wbk = ActiveWorkbook

With Wbk
.SendMail "sylvie.r@wanadoo.fr", "COMMANDES DISPOSITIFS MEDICAUX"
.Close
End With

Confirmation.Show

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 à 13:11
il faut que j' ai absolument des données dans :
K6
Q6
H68
et il faut que si toutes les cellules sont vides en même temps de
L17 à L66 et aussi surtout en même temps
X15 à X66 alors msbox

autrement j'ai essaye ce que tu m'as donné et j'ai une erreur sur
Call Cherche_Cellules_Vides_Dans_Selection

erreur de compilation
sub ou fonction non definie

De toute façon, je ne vais pas lâcher le morceau et il faut que je trouve d'ici demain soir car je présente mon projet lundi

a+
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 à 13:29
Ta as bien insérer tes codes dans un Module ?

Pour ma procédure je viens de la retester, ça fonctionne chez moi !
Place le curseur dans MA procédure et appuie du F8 (exécution pas à pas), et dis moi sur quelle ligne ça plante.
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 à 13:41
oui j'ai copié mon classeur pour être sûre de ne pas faire de connerie

J'ai remplacé ta procédure dans le module j'avais ma macro mail
et ça plante sur cette ligne
Call Cherche_Cellules_Vides_Dans_Selection
je l'ai mise en rouge
pour info
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").Activate


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


Dim Wbk As Workbook
ActiveSheet.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
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 à 13:57
Bonjour,
Il faut que ta Sub Cherche_Cellules_Vides_Dans_Selection()
Soit déclarée Public dans le Module , non ?
0
Rejoignez-nous