.cells(chk... comment le renseigner .

Marboi

XLDnaute Occasionnel
Bonjour le forum,

Je refais un tableau avec une recherche de prix sur une autre feuille en utilisant ce code VBA et des checkbox :

Public Sub cocher()
Dim i As Byte, ligne As Byte

Dim chk

ligne = 25

For Each chk In Array(1, 2, 3, 4, 5, 6, 7, 8, 10, 27)
If Controls("Checkbox" & chk) = True Then

Select Case chk

Case 1, 2, 3, 4, 5, 6, 7, 8
With Sheets("Tarif")
Cells(ligne, 9) = .Cells(chk + 51, 1)
Cells(ligne, "l") = .Cells(chk + 51, 3)
End With

Case 10
With Sheets("Tarif")
Cells(ligne, 9) = .Cells(chk + 50, 1)
Cells(ligne, "n") = .Cells(chk + 50, 5)
End With

Case 27
With Sheets("Tarif")
Cells(ligne, 9) = .Cells(chk + 35, 1)
Cells(ligne, "n") = .Cells(chk + 35, 5)
End With
End Select
ligne = ligne + 1
End If
Next chk

End Sub

Ça fonctionne à merveille mais est-ce que l'on pourrait m'expliquer à quoi correspondent les chiffres après .Cells(chk + ou - et un numéro. Ce numéro ne correspond pas à la ligne du tableau 1,2,3,4 etc mais ça me paraît aléatoire (ce qui m'étonnerait beaucoup dans Excel). Comme j'ai refais ma grille de tarification et changé pas mal la mise en page, je galère pour trouver la bonne ligne (au pif !...) alors que je suis sûr qu'il y a une logique, mais je ne la comprend pas.
Je prends par exemple, la ligne A52 et pour trouver cette ligne ça se transforme en .Cells(chk + 51, 1) alors que la ligne a60 c'est égal à .Cells(chk + 50, 1)

Merci de votre aide.
 

kjin

XLDnaute Barbatruc
Re : .cells(chk... comment le renseigner .

Bonjour,
Si toi-même avec le fichier sous les yeux tu as déjà du mal...!
Une chose est sûr....doit y avoir un truc...mais sans fichier, difficile de dire lequel
A+
kjin
 

Marboi

XLDnaute Occasionnel
Re : .cells(chk... comment le renseigner .

Merci, je pensais que l'explication pouvait être simple pour des aguerris comme vous d'excel.

Je joins le fichier que j'ai un peu épuré
 

Pièces jointes

  • Devis ESSAI_Forum.zip
    77.5 KB · Affichages: 41

Robert

XLDnaute Barbatruc
Repose en paix
Re : .cells(chk... comment le renseigner .

Bonjour Marboi, Kjin, bonjour le forum,

Dans ton UserForm Boîte_de_Saisie tu as 28 checkboxes nommées CheckBox1 à ChekBox28. chk correspond au numéro de la checkbox (1 à 28). Voir commentaires ci-dessous :
Code:
ligne = 25 'définit la ligne de départ
'boucle sur les checkboxes 1 à 8, 10 et 27
For Each chk In Array(1, 2, 3, 4, 5, 6, 7, 8, 10, 27)
    'condition : si la checkbox est cochée
    If Controls("Checkbox" & chk) = True Then
    
    Select Case chk 'agit en fonction du numéro de la chekbox
        
        Case 1, 2, 3, 4, 5, 6, 7, 8 'cas de 1 à 8
            With Sheets("Tarif") 'prend en compte l'onglet "Tarif"
                'la cellule I25 (ligne=25, colonne=9) prend la valeur
                'de la cellule A52 (ligne=51+1, colonne=1) si la ChekBox1 est cochée
                'de la cellule A53 (ligne=51+2, colonne=1) si la ChekBox2 est cochée
                'de la cellule A54 (ligne=51+3, colonne=1) si la ChekBox3 est cochée
                'de la cellule A55 (ligne=51+4, colonne=1) si la ChekBox4 est cochée
                'de la cellule A56 (ligne=51+5, colonne=1) si la ChekBox5 est cochée
                'de la cellule A57 (ligne=51+6, colonne=1) si la ChekBox6 est cochée
                'de la cellule A58 (ligne=51+7, colonne=1) si la ChekBox7 est cochée
                'de la cellule A59 (ligne=51+8, colonne=1) si la ChekBox8 est cochée
                Cells(ligne, 9) = .Cells(chk + 51, 1)
                
                'idem, la cellule L25 (ligne=25, colonne=L) prend la valeur
                'de la cellule C52 (ligne=51+1, colonne=1) si la ChekBox1 est cochée
                'de la cellule C53 (ligne=51+2, colonne=1) si la ChekBox2 est cochée
                'de la cellule C54 (ligne=51+3, colonne=1) si la ChekBox3 est cochée
                'de la cellule C55 (ligne=51+4, colonne=1) si la ChekBox4 est cochée
                'de la cellule C56 (ligne=51+5, colonne=1) si la ChekBox5 est cochée
                'de la cellule C57 (ligne=51+6, colonne=1) si la ChekBox6 est cochée
                'de la cellule C58 (ligne=51+7, colonne=1) si la ChekBox7 est cochée
                'de la cellule C59 (ligne=51+8, colonne=1) si la ChekBox8 est cochée
                Cells(ligne, "l") = .Cells(chk + 51, 3)
 

Marboi

XLDnaute Occasionnel
Re : .cells(chk... comment le renseigner .

Merci Robert,

Mais je ne comprends pas l'explication. Pour exemple :

Public Sub cocher3()
Dim i As Byte, ligne As Byte

Dim chk

ligne = 11

For Each chk In Array(14)
If Controls("Checkbox" & chk) = True Then

Select Case chk

Case 14 'démarches
With Sheets("Tarif")
Cells(ligne, 1) = .Cells(chk - 10, 1)
Cells(ligne, "e") = .Cells(chk - 10, 3)
End With

End Select
ligne = ligne + 1
End If
Next chk
End Sub

ça me prend bien les démarches du tarif (ligne A4 et C4) pour me les placer dans le devis à partir de la ligne 11 (A4 du devis) alors que d'après ton explication, il faudrait que je précise ligne =3 et ensuite ( + 1, 1) (tarif et A4) ce qui donnerait : Cells(ligne, 1) = .Cells(chk +1, 1) et là ça ne marche pas. En fait, la cellule n'est pas précisée comme dans ton exemple alors je suis un peu perdu car je n'arrive pas à indiquer la façon de trouver les autres informations pour les autres checkbox.

Merci de m'éclairer
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : .cells(chk... comment le renseigner .

Bonjour Marboi, Kjin, bonjour le forum,

C'est pas compliqué pourtant ! chk est le numéro de la checkbox... Dans la procédure cocher3 il n'y a qu'une seule checkbox, la CheckBox14. La boucle est donc inutile et superflue (ou le contraire si tu veux). Le code ci-dessous aurait le même effet :
Code:
Public Sub cocher3()
If CheckBox14 = True Then 'condition : si la CheckBox14 est cochée
    With Sheets("Tarif") 'prend en compte l'onglet "Tarif"
        'la cellule A11 de l'onglet actif (ligne:=11 et colonne:=1 soit A) prend la valeur
        'de la cellule A4 (ligne:ckh=14;14-10=4; colonne:=1 soit A) de l'onglet "Tarif"
        Cells(11, 1) = .Cells(4, 1)
 
        'la cellule E11 de l'onglet actif (ligne:=11 et colonne:=e) prend la valeur
        'de la cellule C4 (ligne:ckh=14;14-10=4; colonne:=3 soit C) de l'onglet "Tarif"
        Cells(11, "e") = .Cells(4, 3)
    End With 'fin de la prise en compte de l'onglet "Tarif"
End If 'fin de la condition
End Sub

ça me prend bien les démarches du tarif (ligne A4 et C4) pour me les placer dans le devis à partir de la ligne 11 (A4 du devis) alors que d'après ton explication, il faudrait que je précise ligne =3 et ensuite ( + 1, 1) (tarif et A4) ce qui donnerait : Cells(ligne, 1) = .Cells(chk +1, 1) et là ça ne marche pas. En fait, la cellule n'est pas précisée comme dans ton exemple alors je suis un peu perdu car je n'arrive pas à indiquer la façon de trouver les autres informations pour les autres checkbox.
Non non, d'après mes explications ça ne devrait bien prendre que A4 et C4... Puisqu'il n'y a qu'une seule checkbox (CheckBox14) dans cette procédure !


Dans la procédure cocher (que je t'avais commentée), la variable ligne était incrémentée de 1 à chaque passage sur une nouvelle checkbox avec la boucle sur les 10 checkboxes (de 1 à 8, 10 et 27). Cela signifiait que si c'était la première chekbox qui était cochée (ChekBox1) la variable ligne valait 25. Si c'était la Checkbox2 qui était cochée, la variable ligne prenait la valeur de 25 + 1 = 26. 27 pour la ChexkBox3, etc..., 34 pour la CheckBox27... Avec ce système plusieurs checkboxes pouvaient être cochées et cela irait agir sur la ligne correspondante.
Comme en plus le numéro de la chekbox chk est une variale dans le code, la cellule modifiée Cells(ligne, 9) prenait la valeur d'une cellule de la colonne A de l'onglet Tarif dont la ligne dépendait de chk : .Cells(chk + 51, 1).
Donc la valeur de .A52 si la Checkbox1 est cochée, .A53 si la Checkbox2 est cochée, .A54 si la Checkbox3 est cochée, etc..., .A61 si la Checkbox10 est cochée, .A78 si la Checkbox27 est cochée.

Si les checkboxes s'étaient suivies numériquement (Chekcbox1 à CheckBox10) une seule variable aurait pu suffire et le code aurait pu être :
Code:
ligne = 25 'définit la ligne de départ
For Each chk In Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10) 'boucle sur les checkboxes 1 à 10
    If Controls("Checkbox" & chk) = True Then 'condition : si la checkbox est cochée
        Select Case chk 'agit en fonction du numéro de la chekbox
            Case 1, 2, 3, 4, 5, 6, 7, 8 'cas de 1 à 8
                With Sheets("Tarif") 'prend en compte l'onglet "Tarif"
                    'la cellule I25 (ligne=25, colonne=9) prend la valeur
                    Cells(ligne, 9) = .Cells(ligne + 27, 1)
                    Cells(ligne, "l") = .Cells(ligne + 27, 3)
                End With
            Case 9, 10 'cas 9 à 10
            '.....
        End Select 'fin de l 'action en fonction...
    End If 'fin de la conditon
ligne = ligne + 1 'incrément la ligne
Next chk 'prochaine checkbox de la boucle

Ouf... j'espère que c'est clair sinon j'abandonne...
 

Marboi

XLDnaute Occasionnel
Re : .cells(chk... comment le renseigner .

Merci Robert et désolé de t'avoir mis dans cet état. Pour ce qui était des chk, ça je savais !

Pour les boucles, effectivement il y avait plusieurs checkboxes dans mon projet que j'ai déplacées au fur et à mesure de l'avancement ; c'est pourquoi je n'ai pas modifié (et je n'y ai même pas pensé !).

Moi j'ai compris que ligne = 25 (par exemple) permettait la copie à cette ligne définie dans l'onglet défini. Ce que je ne comprends pas c'est dans l'exemple d'une seule checkbox : chk=14; 14-10=4 ? En fait en y allant à tâton j'ai réussi, mais je me retrouve avec des -10, + 12, -20 etc sans vraiment comprendre pourquoi. Le numéro de la checkbox a t'il à voir dans ce calcul de ligne ?

Une autre question dans la foulée, si tu ne t'es pas encore suicidé !..., comment effacer la ligne que le checkbox à copier lorsque que je le déselectione ?

Merci de t'attarder sur mon cas.
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : .cells(chk... comment le renseigner .

Bonjour le fil, bonjour le forum,

Moi j'ai compris que ligne = 25 (par exemple) permettait la copie à cette ligne définie dans l'onglet défini. Ce que je ne comprends pas c'est dans l'exemple d'une seule checkbox : chk=14; 14-10=4 ? En fait en y allant à tâton j'ai réussi, mais je me retrouve avec des -10, + 12, -20 etc sans vraiment comprendre pourquoi. Le numéro de la checkbox a t'il à voir dans ce calcul de ligne ?
Arrrrrrrrrgh !!! Mais p... c'est ce que je t'ai expliqué dans mon post précédent !!!! Sinon, comment veux-tu qu'on le sache nous ? Là il te faut voir directement avec le créateur du code. Pourquoi prend-il la valeur d'une ligne 51+chk (dans cocher), chk-10 (dans cocher3) ? Toi qui utilise le fichier tu dois le comprendre non ??!!
 

kjin

XLDnaute Barbatruc
Re : .cells(chk... comment le renseigner .

Bonsoir, salut Robert :) (nervous break down ?),
Moi ce que je ne comprends pas, c'est carrément l'intérêt de ce formulaire !
Dans ton devis, puisque tu reprends l'ensemble des tarifs, autant le remplir directement en passant par des listes de validation et qq formules !
Une autre chose me surprends, la TVA n'apparait pas...
A+
kjin
 

Marboi

XLDnaute Occasionnel
Re : .cells(chk... comment le renseigner .

Bonsoir,

Je ne reprends pas systématiquement l'ensemble des tarifs et c'est juste une petite partie du travail définitif. Une liste de validation est trop longue à manipuler.

Bon, de toutes façons, ça finira par fonctionner, même si je dois y passer beaucoup de temps. J'y suis déjà arrivé une première fois, donc ! Même si effectivement le code est un peu de bric et de broc, tant que ça marche. La TVA sera calculée à la fin !

Par contre Kjin, si tu as la réponse lorsque la checkBox est "dévalidée" ça m'intéresserait, car j'ai dû énerver Robert et il n'est sans doute pas allé au bout du post et pas prêt de me répondre à nouveau : (Une autre question dans la foulée, si tu ne t'es pas encore suicidé !..., comment effacer la ligne que le checkbox à copier lorsque que je le décoche ?)


Bonne soirée.
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : .cells(chk... comment le renseigner .

Re,

J'ai pris le temps d'ouvrir ton fichier et de faire un exemple... Dans l'onglet Devis je clique sur le bouton Boîte de Saisie et l'Userform Boîte de Saisie s'affiche. Je laisse tomber les différentes textboxes et les boutons d'option et je coche les options suivantes :
1 Démarches et Formalités (CheckBox15 qui lance la procédure cocher3)
2 Soins (CheckBox16 qui lance la procédure cocher3)
3 Toilette (CheckBox17 qui lance la procédure cocher3)
4 DEPOT1 (CheckBox1 qui lance la procédure cocher)
5 Véhicule avec (CheckBox13 qui lance la procédure cocher2)

Voyons comment réagit le code...
1 - À peine la CheckBox15 était cliquée que la procédure cocher3 se lançait :
Code:
Public Sub cocher3()
Dim i As Byte, ligne As Byte
Dim chk
ligne = 11
For Each chk In Array(15, 16, 17, 14, 19, 20, 11, 24, 26)
    If Controls("Checkbox" & chk) = True Then
 
    Select Case chk
 
       Case 15 'démarches
            With Sheets("Tarif")
                Cells(ligne, 1) = .Cells(chk - 11, 1)
                Cells(ligne, "e") = .Cells(chk - 11, 3)
            End With
 
        Case 16 'soins
            With Sheets("Tarif")
                Cells(ligne, 1) = .Cells(chk - 11, 1)
                Cells(ligne, "f") = .Cells(chk - 11, 4)
            End With
 
        Case 17 'toilette
            With Sheets("Tarif")
                Cells(ligne, 1) = .Cells(chk - 11, 1)
                Cells(ligne, "f") = .Cells(chk - 11, 4)
            End With
 
        Case 14 'admission
            With Sheets("Tarif")
                Cells(ligne, 1) = .Cells(chk - 12, 1)
                Cells(ligne, "f") = .Cells(chk - 12, 4)
            End With
 
         Case 19 'presentation temp
            With Sheets("Tarif")
                Cells(ligne, 1) = .Cells(chk - 11, 1)
                Cells(ligne, "f") = .Cells(chk - 11, 4)
            End With
 
            Case 20 'presentation Perm
            With Sheets("Tarif")
                Cells(ligne, 1) = .Cells(chk - 6, 1)
                Cells(ligne, "f") = .Cells(chk - 6, 4)
            End With
 
            Case 11 'Celao
            With Sheets("Tarif")
                Cells(ligne, 1) = .Cells(chk - 5, 1)
                Cells(ligne, "f") = .Cells(chk - 5, 4)
            End With
 
            Case 24 'Vacations
            With Sheets("Tarif")
                Cells(ligne, 1) = .Cells(chk - 4, 1)
                Cells(ligne, "g") = .Cells(chk - 4, 5)
            End With
 
            Case 26 'Journaux
            With Sheets("Tarif")
                Cells(ligne, 1) = .Cells(chk - 3, 1)
                Cells(ligne, "g") = .Cells(chk - 3, 5)
            End With
 
        End Select
    ligne = ligne + 1
    End If
Next chk
End Sub
c'est donc cette partie du code qui nous intéresse :
Code:
Case 15 'démarches
            With Sheets("Tarif")
                Cells(ligne, 1) = .Cells(chk - 11, 1)
                Cells(ligne, "e") = .Cells(chk - 11, 3)
            End With
La ligne = 11, chk = 15.
La cellule A11 (ligne=11, colonne=1) de l'onglet Devis va prendre la valeur de la cellule A4 (ligne=15-11=4, colonne=1) de l'onglet Tarif
la cellule E11 (ligne=11, colonne="e") de l'onglet Devis va prendre la valeur de la cellule C4 (ligne=15-11=4, colonne=3) de l'onglet Tarif.
la boucle continue dans le vide car seule la ChekBox15 est cochée, la variable ligne s'incrément pour rien...
tu comprends bien que dans ce cas, le rapport pour faire correspondre le numéro 15 de la CheckBox15 avec la ligne 4 du tatif "Démarches et formalités administratives" c'est : chk - 11 !

2 - À peine la CheckBox16 était cliquée que la procédure cocher3 se lance à nouveau avec cette partie du code qui nous intérese :
Code:
       Case 15 'démarches
            With Sheets("Tarif")
                Cells(ligne, 1) = .Cells(chk - 11, 1)
                Cells(ligne, "e") = .Cells(chk - 11, 3)
            End With
 
        Case 16 'soins
            With Sheets("Tarif")
                Cells(ligne, 1) = .Cells(chk - 11, 1)
                Cells(ligne, "f") = .Cells(chk - 11, 4)
            End With
La boucle sur la CheckBox15 est refaite et réécrivant les données par dessus les anciennes (c'est un peu con quand même ce système !!!). La variable ligne s'incrémente à 12.
Nous avons donc ligne = 12, chk = 16.
la cellule A12 (ligne=12, colonne=1) de l'onglet Devis va prendre la valeur de la cellule A5 (ligne=16-11=4, colonne=1) de l'onglet Tarif
la cellule F12 (ligne=12, colonne="f") de l'onglet Devis va prendre la valeur de la cellule D5 (ligne=16-11=4, colonne=4) de l'onglet Tarif.
la boucle continue dans le vide car seule la ChekBox16 est cochée, la variable ligne s'incrément pour rien...
Dans ce cas, le rapport pour faire correspondre le numéro 16 de la CheckBox16 avec la ligne 5 du tatif "soins" c'est : chk - 11 ! On décale aussi la colonne de 1 pour faire correspondre le tarif

3 - À peine la CheckBox17 était cliquée que la procédure cocher3 se lance à nouveau... Bla bla bla idem. Boucles refaites sur CheckBox15, CheckBox16, ligne = 13, ckh = 17, etc... toujours le même rapport pour faire correspondre les lignes : chk - 11.

4 - À peine la CheckBox1 était cliquée que la procédure cocher se lançait... Bla bla bla idem. ligne = 25, ckh = 1, etc... le rapport pour faire correspondre les lignes : chk + 51. Il suffit de voir la référence dans l'onglet Tarif.

5 - À peine la CheckBox13 était cliquée que la procédure cocher2 se lançait... Bla bla bla idem. ligne = 15, ckh = 13, etc... le rapport pour faire correspondre les lignes : chk + 35. Il suffit de voir la référence dans l'onglet Tarif.

Bref, une belle usine à gaz qui réécrit le code autant de fois qu'il y a de cases cochées ! Autant le faire en dur pour chaque case à cochée. Du style :
Code:
Private Sub CheckBox1_Click()
If Range("L25").Value = "" Then
    Range("I25").Value = Sheets("Tarif").Range("A52").Value
    Range("L25").Value = Sheets("Tarif").Range("C52").Value
Else
    Range("I24").End(xlDown).Offset(1, 0).Value = Sheets("Tarif").Range("A52").Value
    Range("L24").End(xlDown).Offset(1, 0).Value = Sheets("Tarif").Range("C52").Value
End If
End Sub
'
Private Sub CheckBox2_Click()
If Range("L25").Value = "" Then
    Range("I25").Value = Sheets("Tarif").Range("A53").Value
    Range("L25").Value = Sheets("Tarif").Range("C53").Value
Else
    Range("I24").End(xlDown).Offset(1, 0).Value = Sheets("Tarif").Range("A53").Value
    Range("L24").End(xlDown).Offset(1, 0).Value = Sheets("Tarif").Range("C53").Value
End If
End Sub
etc... pour les autres checkboxes et supprimer les procédures cocher, cocher2 et cocher3...
 

Marboi

XLDnaute Occasionnel
Re : .cells(chk... comment le renseigner .

Robert, je te remercie et ENFIN, j'ai compris ! Je ne suis que novice et c'est un code que j'avais utiliser auparavant (issu du forum d'ailleurs) pour le même genre d'utilisation et comme je n'y connais rien dans les boucles, j'ai bêtement recopié... Bon ça marche, mais comme tu le dis, c'est une usine à gaz.

Je vais utiliser, si tu le permets, ton code en "dur" qui là me parle bien. Je ne me rappelait plus de la procédure pour copier à la suite et je vois que tu l'indique.

Merveilleux et encore désolé pour les cheveux blancs que j'ai pu te faire pousser en quelques secondes.
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : .cells(chk... comment le renseigner .

Bonsoir le fil, bonsoir le forum,

j'ai repéré des incohérences dans le code :
• la CheckBox14 "Admission" lance la procédure cocher dans laquelle n'est pas pris en compte le chk 14.
• la CheckBox20 "frais de séjour permanenetMF" n'a pas de de tarif indiqué dans l'onglet Tarif.
• la CheckBox11 "Formalités après" renvoie le tarif de "Toillette", le code devrait être :
Code:
            Case 11 'Celao
            With Sheets("Tarif")
                Cells(ligne, 1) = .Cells(chk - 1, 1)
                Cells(ligne, "f") = .Cells(chk - 1, 4)
            End With
chk - 1 au lieu de chk - 5.
• la CheckBox21 "Transport avant 50 km" ne lance aucune procédure.
• la CheckBox18 "Complément" ne lance aucune procédure.
• la CheckBox22 "Transport après (50 km)" ne lance aucune procédure.
• la CheckBox22 "Supplément km (au dela du forfait)" ne lance aucune procédure.
• tu as laissé 7 lignes pour les dépots dans l'onglet Devis et tu as 8 dépots. Il n'y a pas de ligne blanche de séparation si tu utilises les 8 dépots.
• le bouton Effacer TOUT n'efface pas la plage I31:N32.
• la CheckBox12 "A définit" lance la procédure cocher dans laquelle n'est pas pris en compte le chk 12.
• la CheckBox25 "Taxe 2" lance la procédure cocher3 dans laquelle n'est pas pris en compte le chk 25.
• la CheckBox24 "Vacation" récupère le tarif de Complément (A20 de Tarif), normalement défini par la CheckBox18.
• la CheckBox26 "Avis journaux" récupère l'étiquette Accessoires (A23 de Tarif).

C'est sûr que du doit avoir du mal à t'y retrouver dans un bordel pareil !!!

Pour ce qui est de supprimer en décochant je te propose une solution mais pas avec ton code qui me paraît trop confus.
Dans un premier temps tu nommes les différentes zones du Devis. j'ai nommé la plage A11:A22 : zone1. Voilà ce que ça donnerait sur trois cases à cochée de cette zone :
Code:
Private cel As Range
 
Private Sub CheckBox15_Click()
If CheckBox15.Value = True Then
    For Each cel In Range("zone1")
        If cel.Value = "" Then
            cel.Value = Sheets("Tarif").Range("A4")
            cel.Offset(0, 4).Value = Sheets("Tarif").Range("C4")
            Exit For
        End If
    Next cel
Else
    For Each cel In Range("zone1")
        If cel.Value = "Démarches et formalités administratives" Then
            cel.Value = ""
            cel.Offset(0, 4).Value = ""
            Exit For
        End If
    Next cel
End If
End Sub
 
Private Sub CheckBox16_Click()
If CheckBox16.Value = True Then
    For Each cel In Range("zone1")
        If cel.Value = "" Then
            cel.Value = Sheets("Tarif").Range("A5")
            cel.Offset(0, 5).Value = Sheets("Tarif").Range("D5")
            Exit For
        End If
    Next cel
Else
    For Each cel In Range("zone1")
        If cel.Value = "Soins " Then
            cel.Value = ""
            cel.Offset(0, 5).Value = ""
            Exit For
        End If
    Next cel
End If
End Sub
 
Private Sub CheckBox17_Click()
If CheckBox17.Value = True Then
    For Each cel In Range("zone1")
        If cel.Value = "" Then
            cel.Value = Sheets("Tarif").Range("A6")
            cel.Offset(0, 5).Value = Sheets("Tarif").Range("D6")
            Exit For
        End If
    Next cel
Else
    For Each cel In Range("zone1")
        If cel.Value = "Toilette" Then
            cel.Value = ""
            cel.Offset(0, 5).Value = ""
            Exit For
        End If
    Next cel
End If
End Sub

C'est sûr, tout est écrit en dur, ça fait beaucoup de code je te l'accorde (en do dièse majeur si tu veux) mais au moins on sait où on va...

[Édition]
Pas de problème pour les cheveux blancs au contraire. Le problème serait plutôt le manque de cheveux...
 
Dernière édition:

Marboi

XLDnaute Occasionnel
Re : .cells(chk... comment le renseigner .

Je te remercie beaucoup Robert,

Je vais essayer de mettre en page tout ça, effectivement pour le "décochage", ça fait pas mal de boulot. Mais bon, ça me permettra de me familiariser un peu plus dans la rédaction des macros.

Pour toi, j'ai l'impression que c'est une évidence innée.

Bonne soirée.
 

Discussions similaires

Réponses
2
Affichages
513
Réponses
17
Affichages
849

Statistiques des forums

Discussions
312 329
Messages
2 087 327
Membres
103 518
dernier inscrit
hbenaoun63