Valeur par défaut de cases sur tout un classeur

Bonjour,

Sur un classeur, j'ai des questionnaires dans plusieurs feuilles auxquels je dois répondre à des question soit par oui ou non ou NA en cochant les cases correspondantes

Il s'agit d'un dossier annuel que je copierai pour l'année suivante. J'aimerais pouvoir d'un seul clic réinitialiser les questionnaires (supprimer les croix des cases) et cocher par défaut les cases "non " de l'ensemble du classeur.

De plus sur chaque feuille il y aura un commentaire que je voudrais pouvoir supprimer d'un seul clic sur toutes les feuilles.

Avez-vous une astuce ?

10classeur1.xlsx (31.97 Ko)

Bonjour,

supprimer erreur de selection

crdlt,

André

Merci

Et pour les cases "non", si au lieu d'effacer je veux mettre une "x",

Par quoi devrais-je remplacer "Selection.ClearContents" ?

Bonsoir,

Salut André !

Qu'est-ce que c'est que ce code totalement indigent ! On n'arrête pas de rabacher que les Select sont inutiles et ne font que ralentir l'exécution, et tu proposes un code qui n'est autre qu'une liste de Select !

Cyberyan:

Il faudrait être plus précis dans ta demande ! tu as deux types de feuilles. A-priori la zone à effacer s'efface globalement en un fois : J7:R29 sur le premier type, et I6:M15 pour le second (à condition que tu aies fourni un modèle conforme.

Donc chaque fois une ligne de code, mais il faut savoir combien de feuille à effacer, ce qui les distingue dans le classeur original... pour que l'on puisse bâtir une procédure qui fasse tout le boulot.

Maintenant, si il y a des mentions à placer après nettoyage, il faut aussi le préciser dès le départ. On efface, et on place les mentions voulu, ce qui fera une ou deux lignes de code de plus...

Il faudrait aussi arranger tes MFC : il ne devrait y avoir qu'une MFC définie par couleur de mise en forme et pas une au niveau de chaque cellule ! Un nettoyage utile à faire.

Cordialement.

Bonjour,

Ci-joint le classeur excel un peu modifié et épuré pour la MFC.

MFerrand a écrit :

A-priori la zone à effacer s'efface globalement en un fois : J7:R29 sur le premier type, et I6:M15 pour le second (à condition que tu aies fourni un modèle conforme.

En fait non, il y aura un commentaire possible sous certaines questions (cellules fusionnées, cf fichier joint).

MFerrand a écrit :

mais il faut savoir combien de feuille à effacer, ce qui les distingue dans le classeur original... pour que l'on puisse bâtir une procédure qui fasse tout le boulot.

Il y a une quinzaine de feuille qui seront identiques soit à l'une ou l'autre des deux feuilles du fichier joint.

Merci pour votre aide

5classeur2.xlsm (14.72 Ko)

Bonjour,

tu n'as qu'à copier l'original que tu gardes vide.

ou bien l'enregistrer en modèle (*.xltx ou *.xltm) qui te créera un nouveau fichier à chaque ouverture, préservant l'original.

eric

eriiic a écrit :

Bonjour,

tu n'as qu'à copier l'original que tu gardes vide.

ou bien l'enregistrer en modèle (*.xltx ou *.xltm) qui te créera un nouveau fichier à chaque ouverture, préservant l'original.

eric

Merci mais non car il y a d'autres infos qui auront un caractère permanent ou pluri-annuel...

Bonjour,

La suggestion d'Eric [Salut !] paraît la plus économique ! Et elle doit certainement pouvoir être adaptée...

Voici toujours cependant une proc. de réinitialisation pour montrer comment on peut opérer lorsqu'on n'a pas pris soin à la conception de prévoir des dispositions facilitant la réalisation de toutes les opérations ultérieures, en évitant un volume de code déraisonnable qui opèrerait quasiment cellule par cellule...

Sub Réinitialiser()
    Dim ws As Worksheet, eff(1), initnon, fus(1), non(1), t%, i%
    eff(0) = Split("J6:N10 J14:N14 J18:N18 J22:N22")
    eff(1) = Split("K5:S6 K9:S15 K18:S28")
    fus(0) = Array(12, 16, 20, 28): fus(1) = Array(8, 17)
    initnon = Split("L1:L28 M1:M22")
    non(0) = Array(6, 10, 14, 18, 22)
    non(1) = Array(6, 10, 12, 15, 19, 22, 25, 28)
    Application.ScreenUpdating = False
    For Each ws In Worksheets
        With ws
            t = IIf(.Range("B1") <> "", 0, 1)
            For i = 0 To UBound(eff(t))
                .Range(eff(t)(i)).ClearContents
            Next i
            For i = 0 To UBound(fus(t))
                .Cells(fus(t)(i), 2).MergeArea.ClearContents
            Next i
            With .Range(initnon(t))
                For i = 0 To UBound(non(t))
                    .Cells(non(t)(i), 1) = "X"
                Next i
            End With
        End With
    Next ws
End Sub

Cordialement.

ou bien :

sélectionner tous les oui et commentaires et nommer la sélection plage1

Faire de même avec les non et nommer plage2.

Et :

[plage1] = ""
[plage2] = "x"

avantage : si les cellules sont déplacées rien à faire. Si leur nombre change il n'y a que le nom à modifier, pas le code.

eric

Rechercher des sujets similaires à "valeur defaut cases tout classeur"