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 à 16:38
Bah t'as le choix ^^

Sinon, dans

MaCell2.Select  

For Each MaCell In Selection      If MaCell.Value   ""  Then bolEnvoiMail  True: Exit Sub  ' *** remplace "" par <>
Next MaCell  

End Sub  

@++

<hr size="2" width="100%" />
  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
<!--
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
26 août 2006 à 16:48
Tu pourrais ausi te simplifier la vie si tu mettais un total d'items dans une cellule quelconque, disons A50, du genre

=NBVAL(L17:L38) + NBVAL(X15:X66)


Donc, si la valeur de la cellule est supérieure à 0, tu as au moins un article d'inscrit dans ta commande et tu peux envoyer

Donc, en début de ta procédure Mail()

If Range("A50") = 0 then

msgbox "La commande est vide"
exit sub

End if


MPi
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:54
oui j'avais essayé cela cette nuit
mais je n'ais pas réussi à trouver la command pour dire toutes cellules des plages sont
supérieures à 0 alors commande vide
tu connais peut-être la commande pour tester plusieurs cellules en même temps
++
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:57
Je suis à 200 % d'accord avec MPi, excel est l'outil le plus puissant de la suite Office, autant s'en servir, étant l'application hôte !
(et ça t'économisera moultes lignes de code, obsolètes, en utilisant la fonction proposée par MPi)

Bien vu MPi

@++

<hr size="2" width="100%" />
  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
<!--
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 à 17:08
ta dernière macro a marche
il m'a bien bloquer l'envoi mais il n' a pas eu de msbox commande vide

MPI a raison mais comme je l'ai dit j'avais réussi que pour une seule cellule

merci c'est déjà une avancée

On voit qu'il s'électionne les plages pour faire le contrôle dans ta macro
est-ce qu'il est possible de ne pas le voir ?

Je suis peut-être un peu lourd mais il faut que mon projet soit nickel car il sera utilisé
par plus de 500 personnes
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 à 17:17
"On voit qu'il s'électionne les plages pour faire le contrôle dans ta macro
est-ce qu'il est possible de ne pas le voir ?"
Peux tu donner plus de précisions stp ? (merci)

Pour ton message, voici la modif :

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 

' *** rajoute juste la prochaine instruction :
If bolEnvoiMail = False Then MsgBox "Il n'y a aucune données à traiter dans les plages  " & _
    MaCell1.Address & " et " & MaCell2.Address, vbCritical, "Envoi de la pièce jointe annulée"

@++

<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 à 17:27
/!\ Attention, j'ai refait la même erreur que tout à l'heure :

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   ' <--*** en rouge
Next MaCell 

' *** rajoute juste la prochaine instruction :
If bolEnvoiMail = False Then MsgBox "Il n'y a aucune données à traiter dans les plages  " & _
    MaCell1.Address & " et " & MaCell2.Address, vbCritical, "Envoi de la pièce jointe annulée"

@++

<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 à 17:31
En fait cela fait comme si je sélectionne dans excel avec ma souris plsieurs cellules
A ce moment là, il les met en bleu avec un cadre

++
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 à 17:38
Tu commences à fatiguer , cher Marathon Man.
Prends une pause.
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
26 août 2006 à 17:42
Au début de la macro, tu peux écrire

Application.ScreenUpdating = False

et à la fin Application.ScreenUpdating = True


et mettre Application.ScreenUpdating = True avant le ou les exit sub de ta macro


Aussi, après que les sélections et vérifications ont été faites, tu peux mettre

Range("A1").select

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 à 17:49
modifs faites, t'as plus que les copier/coller à faire :

<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 
' *** 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  
Range("L17:L66").Clear 
Range("X15:X66").Clear 
End Sub  

Public Sub Cherche_Cellules_Vides_Dans_Selection()  
    Dim MaCell As Range  

bolEnvoiMail = False

For Each MaCell In Range("L17:L66")
    If MaCell.Value <> "" Then bolEnvoiMail = True: Exit Sub 
Next MaCell  

For Each MaCell In Range("X15:X66")
    If MaCell.Value = <> Then bolEnvoiMail = True: Exit Sub  
Next MaCell  

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"

End Sub 

<small> Coloration syntaxique automatique </small>

@++

<hr size="2" width="100%" />
  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
<!--
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 à 17:52
il faut initialiser bolEnvoiMail à True
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 à 17:54
Merci à tous car grâce à vous j'ai réussi
c'est vraiment un travil d'équipe
deux dernières choses pour finr

tout à la finde ma macro mail
 Que dois-je mettre pour qu'il ne me demande pas d'enregistrer les modificatons, en fait forcer le choix ?
Et je voudrais repartir vers une autre feuille qui est un menu ?
Après j'ai fini

je vous ai mis la fin de la macro

ActiveWorkbook.SendMail "[mailto:sylvie.r@wanadoo.fr sylvie.r@wanadoo.fr]", "COMMANDES DISPOSITIFS MEDICAUX"


Confirmation.Show
MaCell1.Clear
MaCell2.Clear
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 à 17:56
bolEnvoiMail = False

For Each MaCell In Range("L17:L66")
    If MaCell.Value <> "" Then bolEnvoiMail = True: Exit Sub 
Next MaCell  

For Each MaCell In Range("X15:X66")
    If MaCell.Value = <> "" Then bolEnvoiMail = True: Exit Sub  
Next MaCell 

Il ne l'est que si la condition est vérifiée !
Si MaCell contient une valeur, bolEnvoiMail passe à true.

(il doit être false car si la condition n'est pas vérifiée, il le reste, et dans la proc Mail, si c'est False, il n'exécute pas la procédure)

@++

<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 à 17:58
Avant le ActiveWorkbook.SendMail, place
ActiveWorkBook.Saved = True
(fait comme s'il a été enregistré)

et avant le End Sub
Sheets("Nom de la feuille").Select

@++

<hr size="2" width="100%" />
  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
<!--
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 à 17:59
Autant pour moi,
Je croyais que c' était If MaCell.Value = = "" Then bolEnvoiMail = False: Exit Sub  
Bon c' est terminé les gars
Qui veut un café ?
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 à 18:05
Ah non ! Pas Exit Sub mais Exit For
Pour faire tout les tests
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 à 18:06
Ouaich !
(bonne idée)

Marathon Man, ton topic, malgrè le record des visités pour la journée ainsi que des réponses, doit être valider si une réponse te convient pour le clotûrer !
(et puis ça nous fera plaisir, après avoir passé 10 heures à t'aider)
Pour mémoire :
Sujet |                                           Rép. |, , Date        |Auteur         |Vus |
[infomsg_TEST-CELLULES-VIDES_802946.aspx#57 TEST CELLULES VIDES], 57, 08:44, Marathon Man, 338

@++

<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 à 18:09
Chaibat, pas besoin non plus, une seule valeur lui satisfait !
S'il y'en a une, pourquoi s'embêter à faire le test de l'autre plage ?
1/ qques milisecondes de gagner, c'est toujours ça
2/ ça bouffent des ressources.

@++

<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 à 18:15
pas de problème mais j'ai deux erreurs dans ta dernière macro
l'une que j'ai résolu et l'autre que je ne n'avais pas c'est our cela que je regarde ton avant
dernière macro
A tout de suite
0
Rejoignez-nous