TEST CELLULES VIDES

Résolu
Messages postés
71
Date d'inscription
lundi 24 juillet 2006
Statut
Membre
Dernière intervention
6 septembre 2006
-
Messages postés
71
Date d'inscription
lundi 24 juillet 2006
Statut
Membre
Dernière intervention
6 septembre 2006
-
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

Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
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"
<!--
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
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

++
Messages postés
71
Date d'inscription
lundi 24 juillet 2006
Statut
Membre
Dernière intervention
6 septembre 2006

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
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
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

++
Messages postés
71
Date d'inscription
lundi 24 juillet 2006
Statut
Membre
Dernière intervention
6 septembre 2006

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
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
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

++
Messages postés
71
Date d'inscription
lundi 24 juillet 2006
Statut
Membre
Dernière intervention
6 septembre 2006

Dim bolEnvoiMail As Boolean
' *** cette variable est à placer dans les déclarations
Tu peux me dire ce que signifie les déclararations
++
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
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.

++
Messages postés
71
Date d'inscription
lundi 24 juillet 2006
Statut
Membre
Dernière intervention
6 septembre 2006

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
Messages postés
71
Date d'inscription
lundi 24 juillet 2006
Statut
Membre
Dernière intervention
6 septembre 2006

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
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
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)

++
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
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 ^^
Messages postés
71
Date d'inscription
lundi 24 juillet 2006
Statut
Membre
Dernière intervention
6 septembre 2006

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
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
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 !

++
Messages postés
71
Date d'inscription
lundi 24 juillet 2006
Statut
Membre
Dernière intervention
6 septembre 2006

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
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
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
Messages postés
71
Date d'inscription
lundi 24 juillet 2006
Statut
Membre
Dernière intervention
6 septembre 2006

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+
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
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.
Messages postés
71
Date d'inscription
lundi 24 juillet 2006
Statut
Membre
Dernière intervention
6 septembre 2006

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
Messages postés
1883
Date d'inscription
samedi 1 avril 2006
Statut
Membre
Dernière intervention
20 novembre 2007
2
Bonjour,
Il faut que ta Sub Cherche_Cellules_Vides_Dans_Selection()
Soit déclarée Public dans le Module , non ?