Checkbox et vérification de condition

Résolu
fcsjeux Messages postés 10 Statut Membre -  
fcsjeux Messages postés 10 Statut Membre -
Bonjour à vous les balaises du VBA !

Vous vous en doutez si je suis de ce coté du forum c'est bien parce que je ne comprend pas bien comment utiliser la VBA sur Excel.
Je travail actuellement sur un classeur Excel de paramétrage automatique pour pouvoir calculer toutes les dimensions d'un système mécanique en fonction de 3 ou 4 données d'entrées.
Jusque là j'arrivais à me débrouiller en parcourant tous les forums possible. Mais là, la macro me semble de taille.

Pour faire simple, voici une simplification de mon cas avec le dimensionnement des diamètres intérieur et extérieur d'un cylindre :

Soit 2 feuilles F1 et F2.
Sur F1, l'opérateur entre les deux diamètres en A1 (intérieur) et A2 (extérieur). A ces cellules est associé une checkbox.
Une fois activé, cette Checkbox permet de copier les valeurs de A1 et A2 vers les cases B1 et B2 de F2.
Sur F2, en B3, une formule condition impose que A1<A2/2

Si la condition est validée, rien ne se passe; sinon un message d'erreur apparait pour prévenir que la condition n'est pas respectée. Je pense pouvoir être capable de faire cette dernière partie de macro mais je mettrais 2h à la faire contre 2 minutes pour vous... ;)

Voilà j'espère avoir été clair et que quelqu'un saura me donner la clés...
François

3 réponses

  1. Barb38
     
    Bonjour François,
    voici ce qu'il faut faire
    Private Sub CheckBox1_Click() 'c'est la Checkbox en question
    If CheckBox1.Value = True Then
    Dim A1, A2, Msg As String
    With Worksheets(1)
    A1 = .Range("A1")
    A2 = .Range("A2")
    End With
    If A1 < A2 / 2 Then
    Msg = "ATTENTION!" & vbCrLf & "La valeur de la cellule " & Chr(91) _
    & "A1" & Chr(93) & " doit être strictement supèrieure " & vbCrLf & _
    " à la valeur de la cellule " & Chr(91) & "A2/2" & Chr(93) & " !"
    MsgBox Msg, vbOKOnly + vbCritical, "ERREUR"
    Exit Sub
    End If
    With Worksheets(2)
    .Range("B1") = A1
    .Range("B2") = A2
    End With
    End If
    End Sub

    Mes salutations
    Barb38
    0
  2. fcsjeux Messages postés 10 Statut Membre
     
    Bonsoir !

    Merci beaucoup de ta réponse, je ne m'attendais pas à autant !

    Seulement, j'ai fait un essai en m'adaptant avec ta macro pour le nom des feuilles mais vu que mon Excel est en français (et version 2007... moins claire qu'au bon vieux temps !) j'ai une "Case à cocher". J'ai donc aussi adapté la macro de cette manière :
    "Sub Caseàcocher1_Clic()
    If Caseàcocher1.Value = True Then
    Dim A1, A2, Msg As String
    With Worksheets(1)
    ...etc"

    Ensuite, lorsque je lance la machine j'ai un message d' "erreur d'exécution '424': Objet requis". Lorsque je clique "débogage" on me sélectionne la seconde ligne en jaune...

    Il y a t-il une raison à cela ...?

    François
    0
  3. fcsjeux Messages postés 10 Statut Membre
     
    Bon finalement j'ai essayé ta macro sur Excel 2003 en anglais.
    Een restant sur ta base, j'ai fait quelques modifs comme :
    - la condition mathématique
    - le message d'erreur
    - un "décochage" automatique de la CheckBox
    et voici :

    Private Sub CheckBox1_Click()
    If CheckBox1.Value = True Then
    Dim C10, C17, Msg As String
    With Worksheets(1)
    C7 = .Range("C7")
    C13 = .Range("C13")
    End With
    If (C13 < C7 + (15 * C7 / 100)) Then
    Msg = "ATTENTION !" & vbCrLf & "diam_ext_a < diam_int_a+15% !" & vbCrLf & "Modifiez les données d'entrée." & vbCrLf & "Valeur minimale pour diam_ext_a:" & vbCrLf & C7 & "+ 10% =" & C7 + 15 * C7 / 100 & "."
    MsgBox Msg, vbOKOnly + vbCritical, "ERREUR"
    CheckBox1.Value = False
    Exit Sub
    End If
    With Worksheets(2)
    .Range("C7") = C7
    .Range("C13") = C13
    End With
    Call attendre2
    CheckBox1.Value = False
    End If
    End Sub

    Sub attendre2()
    ' Attendre 1 secondes
    nvlleHeure = Hour(Now())
    nvlleMinute = Minute(Now())
    nvlleSeconde = Second(Now()) + 1
    waitTime = TimeSerial(nvlleHeure, nvlleMinute, nvlleSeconde)
    Application.Wait waitTime
    End Sub

    Et le pire !! c'est que ça fonctionne !!!!!!!! :D
    Un grand merci Barb38 !
    0