[Excel VBA] empêcher suppresion cellules
Résolu
Gorion87
Messages postés
55
Date d'inscription
Statut
Membre
Dernière intervention
-
Gorion87 Messages postés 55 Date d'inscription Statut Membre Dernière intervention -
Gorion87 Messages postés 55 Date d'inscription Statut Membre Dernière intervention -
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.
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.
A voir également:
- [Excel VBA] empêcher suppresion cellules
- Formule excel pour additionner plusieurs cellules - Guide
- Liste déroulante excel - Guide
- Verrouiller cellules excel - Guide
- Word et excel gratuit - Guide
- Excel compter cellule couleur sans vba - Guide
5 réponses
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
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
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.
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.
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.
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.
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
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question