Macro, si case vide, afficher un message + stopper l'execution.

Résolu/Fermé
Alexver Messages postés 44 Date d'inscription lundi 1 juillet 2013 Statut Membre Dernière intervention 21 août 2013 - 23 juil. 2013 à 11:21
Alexver Messages postés 44 Date d'inscription lundi 1 juillet 2013 Statut Membre Dernière intervention 21 août 2013 - 23 juil. 2013 à 12:10
Bonjour,

Je travail sous microsoft Office 2007.

J'utilise la macro ci-dessous et j'aimerais qu'une personne me donne une phrase de code pour qu'elle fasse quelquechose en plus :).

La voici:
Sub ajouter_un_produit()
Application.ScreenUpdating = False
Sheets("ajout_produit_composant").Range("D3,D4,D5,D6,D7,D8,D9,D10,D11,D12,D13,D14,D15").Copy
Set Derligne = Sheets("tableau").Range("$A$65536").End(xlUp).Offset(1, 0)
Derligne.PasteSpecial Paste:=xlAll, Operation:=xlNone, Transpose:=True
Application.ScreenUpdating = False
Sheets("ajout_produit_composant").Range("G3,G4,G5,G6,G7,G8,G9,G10,G11,G12,G13,G14,G15,G16").Copy
Set Derligne = Sheets("tableau").Range("$A$65536").End(xlUp).Offset(0, 13)
Derligne.PasteSpecial Paste:=xlAll, Operation:=xlNone, Transpose:=True
Sheets("ajout_produit_composant").Range("D3,D4,D5,D6,D7,D8,D9,D10,D11,D12,D13,D14,D15,G3,G4,G5,G6,G7,G8,G9,G10,G11,G12,G13,G14,G15,G16").ClearContents
Application.CutCopyMode = False
End Sub

En gros, elle copie des cellules D et G de la feuille 2 et les colles sur la feuille 1. Ensuite cela supprime les case D et G. et Arrête le mode copier avec le Application.CutCopyMode=False.

Cette macro fonctionne parfaitement, celle-ci m'aide dans une sorte de questionnaire.


Dans ce questionnaire j'aimerais qu'aucune cellule D et G ne soit vide avant d'être copier. J'aimerais donc ajouter une phrase qui permettrait de vérifier si les celllules D et G sont vides, et si l'une est vide pouvoir afficher le message: Veuillez répondre à toutes les questions. Et que cela stop la suite de la macro.

Si les cellules sont vides c'est bien évidement grâce à la phrase ClearContents. Afin que chaque utilisateur soit en face d'un questionnaire sans réponses.

J'espère avoir était claire.

Merci d'avance si une personne a la solution.

Alex

4 réponses

pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
Modifié par pijaku le 23/07/2013 à 11:31
Bonjour,
1- si toutes tes cellules sont contigües, tu peux utiliser la syntaxe : Range("A1:A10").
Dans ton exemple :
Range("D3,D4,D5,D6,D7,D8,D9,D10,D11,D12,D13,D14,D15")
s'écrit avantageusement :
Range("D3:D15")

2- pour ton test :
Il te faut réaliser une boucle sur ce Range.
Tu peux procéder comme ceci, ajoute ce code en début de ta macro :
Dim MaPlage As Range, Cel As Range

Set MaPlage = Sheets("ajout_produit_composant").Range("D3:D15")
For Each Cel In MaPlage 'pour toutes les cellules de la plage
    If Cel.Value = "" Then 'si elle est vide alors
        'message à l'utilisateur
        MsgBox "La cellule : " & Cel.Address & " n'est pas remplie."
        'sortie de la procédure
        Exit Sub
    End If
Next


Cordialement,
Franck P
5