[Excel VBA] empêcher suppresion cellules

Résolu/Fermé
Gorion87 Messages postés 55 Date d'inscription vendredi 20 février 2009 Statut Membre Dernière intervention 28 février 2011 - Modifié par Gorion87 le 10/01/2011 à 10:32
Gorion87 Messages postés 55 Date d'inscription vendredi 20 février 2009 Statut Membre Dernière intervention 28 février 2011 - 10 janv. 2011 à 13:52
Bonjour à tous,

Après plusieurs recherches sur internet je n'ai pas trouvé mon bonheur alors je me tourne vers vous, spécialistes de la macro.

Voici mon problème :
Dans un formulaire de saisies crée Excel comportant 7 colonnes avec pour première ligne contenant les intitulés les cellules de B27 à O27 (7 colonnes car cellules fusionnées).
La ligne 28 est la première ligne ou les données sont à remplir.
Ensuite en cliquant sur un bouton contenant la macro ci-dessous, les cellules B28 à O28 sont copiées, puis insérées :

Application.ScreenUpdating = False
Range("B28:O28").Select
Selection.Copy
Range("B28:O28").Select
Selection.Insert Shift:=xlDown
Application.CutCopyMode = False
Range("B28").Select
Application.ScreenUpdating = True

Cette opération permet d'augmenter le nombre de lignes de saisie comportant les mêmes caractéristiques que la ligne initiale (liste déroulante, format, etc).

Mon problème est le suivant, j'ai créé un bouton permettant la suppression de lignes une par une avec le code suivant :

Application.ScreenUpdating = False
Range("B44").End(xlUp).Select
ActiveCell.Offset(-1, 0).Select
Range(ActiveCell, ActiveCell.Offset(0, 11)).Select
Selection.Delete
Range("B28").Select
Application.ScreenUpdating = True

Pour info : la cellule B44 contient du texte invisible contenant le mot "END" afin que la macro puisse être exploitable, je n'ai pas trouvé mieux sachant qu'il y a d'autres parties à remplir en dessous.

Pas de problème ca fonctionne, mais par une erreur d'inattention, un utilisateur pourrait continuer à supprimer jusqu'à la première ligne, la 28ème voir même au delà.

Je voudrais une macro permettant de supprimer les lignes une par une (comme ci-dessus), et une fois arrivé à la ligne 28 que cette opération ne soit plus possible, afin de protéger les données sources, avec pourquoi pas un message d'alerte

Merci pour votre aide.

5 réponses

Utilisateur anonyme
10 janv. 2011 à 11:35
Bonjour Gorion87,

J'ai compris que quand on supprime une ligne, les données source remontent, une fois qu'elles ont atteint la ligne 28, l'utilisateur ne doit plus supprimer de ligne.

Est-ce que tu ne peux pas créer un test sur la ligne 28 avec deux ou trois cellules (caractéristiques) de tes données sources afin d'arrêter la macro?

Exemple
sub Mamcro
if cells(28,1) ="data1" or cells(28,3)= "data2" or cells(28,5)= "data3" then Exit sub
end sub

Cordialement
0
Gorion87 Messages postés 55 Date d'inscription vendredi 20 février 2009 Statut Membre Dernière intervention 28 février 2011 19
10 janv. 2011 à 11:50
Bonjour AGI67.fr,

Je ne comprend pas trop ta macro sachant que les cellules sont vides à l'origine tant que l'utilisateur n'a pas fait de choix dans la liste déroulante et qu'il peut les supprimer/ajouter comme bon lui semble afin de dimensionner son nombre de lignes en fonction de ses besoins.

En fait ce sont les 2 premières cellules fusionnées qui contiennent des listes déroulantes :
- B28:D28 => 1 cellule (ex de liste déroulante : Jean, Simon, Robert, Romain...)
- E28 => non fusionnée (ex : Brun, Blond, Roux).

Si ca peut t'éclairer et moi aussi pour ta macro par la même occasion :)

Merci.
0
Utilisateur anonyme
10 janv. 2011 à 12:10
Pourrais-tu mettre un fichier exemple sans données confidentielles sur http://www.cijoint.fr
Cdlmnt
0
Gorion87 Messages postés 55 Date d'inscription vendredi 20 février 2009 Statut Membre Dernière intervention 28 février 2011 19
10 janv. 2011 à 12:25
https://www.cjoint.com/?0bkmwZrXaFF

Voici le lien.

Les zones blanches contiennent normalement des données mais pour des raisons de confidentialité elles ont été supprimées.
Concernant les données du tableau restantes ce sont évidemment des exemples.
Les "END" sont normalement en blanc afin de ne pas être visible.

Merci beaucoup de ton aide.
0
Utilisateur anonyme
10 janv. 2011 à 13:27
C'est mieux avec l'exemple.

Je te propose ta macro un peu modifiée:

Sub Suppr_ligne()

Application.ScreenUpdating = False
Range("B44").End(xlUp).Select
ActiveCell.Offset(-1, 0).Select
Range(ActiveCell, ActiveCell.Offset(0, 11)).Select

a = ActiveCell.Address
If Right(ActiveCell.Address, 2) <> 28 Then
Selection.Delete
End If
If Right(ActiveCell.Address, 2) = 28 Then
For i = 2 To 11
Cells(28, i) = ""
Next i
End If
Range("B28").Select
Application.ScreenUpdating = True

End Sub

Tiens moi au courant

Cdlmnt

Patrice
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Gorion87 Messages postés 55 Date d'inscription vendredi 20 février 2009 Statut Membre Dernière intervention 28 février 2011 19
10 janv. 2011 à 13:52
Merci beaucoup sincèrement, c'est parfait ca fonctionne nickel !!!!!

Ce site est vraiment génial et c'est grâce à des personnes généreuses comme toi que je peux avancer dans mon boulot !!

Merci encore et bonne fin de journée :)
0