Petit problème dans VBA concernant les IF et les AND

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

vdh_xavier

XLDnaute Junior
Bonjour,

Je ne connais pas le VBA, mais j'essaie quand même de m'y mettre parce que je dois réaliser un classeur excel qui n'est pas faisable sans utiliser de macro.

J'aurais juste voulu savoir si quelqu'un pouvait m'indiquer l'erreur (ou les erreurs) qu'il y a dans la macro suivante :

"Sub Macro1()
'
' Macro1 Macro
'
IF Worksheets("Forfait ou pas").Range("D7").Value > Worksheets("Forfait ou pas").Range("D6").Value
AND Worksheets("Encodage").Range("B6") <> “”
AND Worksheets("Encodage").Range("B9") <> “”
AND Worksheets("Encodage").Range("B10") <> “”
AND Worksheets("Encodage").Range("B11") <> “”
AND Worksheets("Encodage").Range("B12") <> “”
THEN

Sheets("EFH").Select
Rows("25:27").Select
Selection.Delete Shift:=xlUp
Range("A24").Select
ActiveCell.FormulaR1C1 = "photocopie, fax téléphone"
Range("C24").Select
ActiveCell.FormulaR1C1 = "10 % ""lettre"""
Range("E24").Select
ActiveCell.FormulaR1C1 = "=0.1*R[-3]C"
Range("E27").Select

End Sub"

Je voudrais en effet que la 2 ème partie de ce que je viens d'écrire (la partie après le THEN) se réalise si :
- la cellule "D7" de la feuille "Forfait ou pas" est plus grande que la cellule "D6" de cette même feuille
- les cellules "B6", "B9", "B10", "B11", et "B12" de la feuille "Encodage" ne sont pas vides (autrement dit, je voudrais que la macro se réalise uniquement lorsque toutes ces cellules ont été remplies)

Je sais que la deuxième partie est correcte, car j'arrive à la faire marcher sans les 2 conditions. Or lorsque j'ajoute mes 2 conditions, il y a une erreur.

Ce serait sympa si quelqu'un voulait bien me venir en aide. Merci
 
Re : Petit problème dans VBA concernant les IF et les AND

Bonjour et bienvenue !!


Il n'y a pas d'erreur, il manque juste le "END IF" avant le End Sub

Cdt

Olivier

EDIT : il faut toutefois supprimer les retours chariots ou les remplacer par des " _ " (underscore avec espace) : Contrairement au SQL par exemple, les retour chariot sont interprété comme une fin d'insctruction
 
Dernière édition:
Re : Petit problème dans VBA concernant les IF et les AND

Bonjour
Tu peux faire plus simple
IF Worksheets("Forfait ou pas").Range("D7").Value <= Worksheets("Forfait ou pas").Range("D6").Value then exit sub
if Worksheets("Encodage").Range("B6") = “” then exit sub
if Worksheets("Encodage").Range("B9") = “” then exit sub
if Worksheets("Encodage").Range("B10") = “” then exit sub
if Worksheets("Encodage").Range("B11") = “” then exit sub
if Worksheets("Encodage").Range("B12") = “” then exit sub
et là le reste du prog...

A+ François
 
Re : Petit problème dans VBA concernant les IF et les AND

Merci beaucoup pour vos réponses.
Une dernière petite question : Est-il possible que la macro se réalise automatiquement une fois que les cellules "B6", "B9", "B10", "B11", et "B12" ont été remplies (pour autant que "D7">"D6") ?
Donc en gros, lorsque l'utilisateur de la feuille remplit successivement les cellules "B6", "B9", "B10", "B11", et "B12", je voudrais qu'une fois qu'il a rempli la dernière cellule et que si "D7">"D6", alors la macro se lance toute seule sans qu'il faille l'activer.

Merci d'avance
 
Re : Petit problème dans VBA concernant les IF et les AND

Encore une petite question, désolé.

Une des 2 conditions pour que la macro se réalise était en effet que les cellules "B6", "B9", "B10", "B11", et "B12" aient été complétées, càd ne soient pas vides.
Or lorsqu'il y a un 0 dans une de ces cellules, excel considère que cette cellule est vide. Mais s'il y a un 0 dans la cellule, c'est qu'il a été mis par l'utilisateur et donc que la cellule a été remplie (et donc la macro peut être effectuée).

Le signe "" signifie donc que la cellule est nulle.
Existe-t-il un signe ou quelque chose qui signifie que la cellule n'a pas été complétée ?

Merci
 
Re : Petit problème dans VBA concernant les IF et les AND

Bonjour
Pour l'execution automatique, à mettre dans le code DE LA FEUILLE. cela s'exécute lorsque la selection change
Et si la sélection est égale à B12 (la dernière cellule à remplir) alors lancement de la macro1
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Address = "$B$12" Then
    Call Macro1
End If

End Sub

Et pour le problème du '0', il suffit de mettre Range("B6").value = ""


Cdt
Olivier
 
Re : Petit problème dans VBA concernant les IF et les AND

Bonjour
Je te propose ceci
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim A As Boolean

If Target.Address = "$B$12" Then

    If Not IsEmpty(Range("B6")) And Not IsEmpty(Range("B9")) And _
        Not IsEmpty(Range("B10")) And Not IsEmpty(Range("B11")) _
        And Not IsEmpty(Range("B12")) And Worksheets("Forfait ou pas").Range("D7") > Worksheets("Forfait ou pas").Range("D6") Then A = True

        With Sheets("EFH")
            .Rows("25:27").Delete Shift:=xlUp
            .Range("A24") = "photocopie, fax téléphone"
            .Range("C24") = "10 % lettre"
            .Range("E24") = E21 * 0.1
        End With
    End If

End Sub
 
Re : Petit problème dans VBA concernant les IF et les AND

Merci beaucoup pour vos réponses.

Odesta, tout fonctionne très bien, mais il y a un petit problème. Pour que la macro se fasse, je dois cliquer une fois sur la cellule "B12". En effet, je remplis mes cellules jusqu'à "B12", mais une fois cela fait, la macro ne se lance pas d'elle-même. Je dois encore une fois cliquer sur la cellule. Est-il possible de changer ça? Merci

Misange, je vais tester ta solution maintenant. Mais est-ce que je dois introduire cela dans le code de la feuille ou en tant que macro? Merci
 
Re : Petit problème dans VBA concernant les IF et les AND

Il suffit que la macro ote la protection, puis la remette en place.

L'enregistreur de macro pourra vous montrer le code.
Si vous souhaitez un mots de passe, il va falloir l'écrire dans votre code. Mais ensuite vous pouvez mettre un mots de passe à votre code.

Cdt
 
Re : Petit problème dans VBA concernant les IF et les AND

J'ai encore un petit souci en fait, sorry sorry.

Donc lorsque je fais ce que tu me dis, Odesta, j'obtiens la macro suivante :

Sheets("EFH").Select
ActiveSheet.Unprotect
Rows("25:27").Select
Selection.Delete Shift:=xlUp
Range("A24").Select
ActiveCell.FormulaR1C1 = "photocopies, fax, téléphone"
Range("C24").Select
ActiveCell.FormulaR1C1 = "10% ""lettre"""
Range("E24").Select
ActiveCell.FormulaR1C1 = "=0.1*R[-3]C"
Range("E25").Select
ActiveSheet.Protect DrawingObjects:=False, Contents:=True, Scenarios:= _
False, AllowFormattingCells:=True, AllowFormattingColumns:=True, _
AllowFormattingRows:=True, AllowInsertingColumns:=True, AllowInsertingRows _
:=True, AllowInsertingHyperlinks:=True, AllowDeletingColumns:=True, _
AllowDeletingRows:=True, AllowSorting:=True, AllowFiltering:=True, _
AllowUsingPivotTables:=True


On voit bien qu'il fait le "Unprotect", mais il ne retient pas le mot de passe que je lui donne, de sorte que l'utilisateur doit l'entrer lui-même lorsque la macro s'active.

Que puis-je faire pour que la macro "retienne" le mot de passe?

Merci
 
Re : Petit problème dans VBA concernant les IF et les AND

Re.
Pensez surtout à utiliser l'aide !! En faisant F1 sur Unprotect.

La solution :
Code:
ActiveSheet.Unprotect ("MDP")

De plus : pour plus de visibilité, vous pouvez pratiquement ôter tous les "select"
Et n'hésitez pas à mettre des commentaires, qui seront utile lorsque vous reviendrez dans le programme dans quelques semaines !

Bien cordialement
O
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
4
Affichages
243
Réponses
11
Affichages
784
  • Question Question
Microsoft 365 colorer une plage
Réponses
2
Affichages
872
Retour