Modification dans un code VBA

Bonjour,

quelqu'un pourra m'aider à modifier le code VBA de mon fichier excel. Mot de passe : "Siva"

Ma feuille de calcul « Acceuil » est protégée. Mais comment fait-on pour ne pas supprimer les 5 boutons (contrôle de formulaire) : [Delete Database, Copy Sales, Delete Sales, Copy Stock Transfer et Delete Stock Transfer].

L’exécution de la macro « Delete Sales » dans la feuille « Acceuil » supprime les données de la cellule A2 au IV65536 dans la feuille « 7S-Sales ».

Modification dans le code à apporter dans « Delete Sales » :

Je souhaite supprimer carrément de la ligne de 2 à la ligne 65 536 et non supprimer les données dans les cellules.

Puis position de curseur en A2.

L’exécution de la macro « Delete Stock Transfer » dans la feuille « Acceuil » supprime les données de la cellule A2 au IV65536 dans la feuille « 7S-Stock Transfer ».

Modification dans le code à apporter dans « Delete Stock Transfer » :

Je souhaite supprimer carrément de la ligne de 2 à 65 536 et non supprimer les données dans les cellules.

Puis position de curseur en A2.

Merci d'avance

197s-master.zip (38.16 Ko)

Bonjour,

Pour ton premier point : la protection des boutons ... déprotège la feuille, clique à nouveau sur Protection et descends tout au bas de la liste ... tu y trouveras ton bonheur dans l'option : Modifier les objets.

Gelinotte

Bonjour,

La suppression demandée, pour la première feuille, c'est ce que fait déjà la macro !

Pour la 2e feuille, remplacer ClearContents par Clear. Le résultats sera identique à une suppression (et plus économique !)

(NB- L'utilisation de Clear dans la 1re feuille exigerait que la colonne E soit exclue de la plage à traiter [comme c'est le cas dans la 2e feuille] sinon le résultat serait une décoloration de cette colonne sur la partie traitée...)

NB- Il reste des Select et autres Activate à éliminer... !

Cordialement.

Bjr

Pour la réponse de Gelinotte : Merci beaucoup

Pour la réponse de MFerrand : Tu as écrit NB- Il reste des Select et autres Activate à éliminer... ! Je n'ai pas très bien compris. S'il y a des codes inutiles, pourras-tu apporter ces modificatifs directement sur le code ?

En faite ce je voudrais c'est de supprimer uniquement les lignes non vides à partir de la ligne 2 dans la feuille "7S-Stock Transfer"

cdl

siva

bjr MFerrand

autant pour moi, petite erreur sur précédent message

ce que je voudrais c'est :

Tu as écrit NB- Il reste des Select et autres Activate à éliminer... ! Je n'ai pas très bien compris. S'il y a des codes inutiles, pourras-tu apporter ces modificatifs directement sur le code ?

En faite ce je voudrais c'est de supprimer uniquement les données des cellules non vides à partir de la ligne 2 dans la feuille "7S-Stock Transfer"

cdl

siva

Bonjour,

L'utilisateur, pour identifier les objets sur lesquels agir n'a d'autre moyen que de mettre le doigt (le curseur de la souris...) dessus, VBA peut les identifier plus efficacement autrement.

Sélectionner ou activer est en VBA une action comme une autre. Elle est pleinement justifiée dès lors qu'il s'agit de mettre sous les yeux de l'utilisateur tel ou tel objet ou le résultat d'une action. Si ce n'est pas l'objectif de l'action en cours, toute commande Select ou Activate intercalée n'a pas d'autre effet que de ralentir l'exécution du code...

Or le code enregistré est truffé de Select tout simplement parce que l'enregistreur enregistre les mouvements de l'utilisateur pour lequel c'est le seul mode d'action. C'est l'un des défauts majeurs (mais non le seul hélas !) de tout code enregistré, qui nécessite pour le rendre efficace de le réécrire...

Ce que j'indiquais marginalement au vu de tes procédures.

Pour ce qui est de la question, j'ai bien compris que tu veux éliminer les données de tes deux feuilles à l'exception de la ligne d'en-tête, en insistant sur la suppression de lignes...

Les données étant dans des cellules, en supprimant des lignes, tu supprimes le support et les données avec. Les lignes supprimées sont remplacées par d'autres dont le format est le format par défaut des classeurs.

Tu peux aussi supprimer les données sans le support : 2 commandes à cet égard ont des effets différents. ClearContents supprime le contenu mais conserve les formats et la mise en forme. Clear supprime tout, ce qui aboutit au même résultat que la suppression de lignes pour ce qui concerne les données, sauf pour ta colonne de séparation, colorée sur l'ensemble de la feuile : la suppression de lignes, en faisant remonter les lignes qui suivent la conserve, alors que Clear en conservant les lignes mais supprimant données et mise en forme la décolore.

L'examen des 2 procédures qui opèrent sur chacune des feuilles montrent que sur la première la procédure supprime les lignes, ce qui correspond donc à ton souhait, il n'y a donc pas à y toucher.

La seconde procède par effacement (avec ClearContents), mais sans toucher à la colonne intermédiaire, donc en mettant Clear (à la place de ClearContents) tu obtiendras le même résultat sur cette feuille que la suppression de lignes !

Cordialement.

Bjr

Merci pour ta réponse, j'ai compris la différence entre Clear et ClearContents.

Quel sera le code si je veux sélectionner les cellules non vides à partir de la ligne 2 puis supprimer. Pouvez-vous corriger le code

Sub DeleteStockTransfer()

    rep = MsgBox("Are you sure you want to delete the data on 7S-Stock Transfer ?", 20)
    If rep = 7 Then
        Exit Sub
    End If

    Set fst = Sheets("7S-Stock Transfer")
    fst.Unprotect "Siva"

    Selection.EntireRow.Delete
    Set plage = Union(fst.Range("A1").CurrentRegion.Offset(1, 0), fst.Range("F1").CurrentRegion.Offset(1, 0))
    plage.Interior.Color = xlNone
    plage.Clear

    fst.Activate
    Range("A2").Select
    fst.Cells.Locked = True
    fst.Protect "Siva"
End Sub 

Je n'ai toujours pas compris si cette parti de code a une influence dans l'exécution

 If rep = 7 Then
        Exit Sub
 End If

que veut dire 7 et le 20 qui se trouve à la fin de

 rep = MsgBox("Are you sure you want to delete the data on 7S-Stock Transfer ?", 20)

pouvez-vous m'aider

167s-master.zip (33.28 Ko)

Cdl

Siva


bjr gmb

tu peut m'aider ?

Cdl

Siva

Utiliser les constantes VBA pour l'écriture du code le rend plus immédiatement lisible :

    rep = MsgBox("Are you sure you want to delete the data on 7S-Stock Transfer ?", vbCritical + vbYesNo)
    If rep = vbNo Then
        Exit Sub
    End If

Tu vois que le MsgBox va s'ouvrir avec une signalisation "erreur critique" et deux boutons : 'Oui' et 'Non'.

Et si tu réponds 'Non', la procédure est abandonnée.

Comme je l'ai déjà dit, dans cette procédure Clear a le même résultat que la suppression de lignes.

Tu peux même supprimer la ligne qui précède : plage.Interior.Color = xlNone, Clear y pourvoiera aussi !

Cordialement.

Bjr

Merci pour ta réponse

Cdl

Rechercher des sujets similaires à "modification code vba"