Bonjours, je cherche en VBA sur Excel comment savoir si une cellule est fusionner & comment rendre une cellule insaisissable pour que l'utilisateur saute les cellule. Merci d'avance
Bonjours, je cherche en VBA sur Excel comment savoir si une cellule est fusionner & comment rendre une cellule insaisissable pour que l'utilisateur saute les cellule. Merci d'avance
Bonjour meijin_ryu, bienvenue sur le forum.
Un peu de lecture http://www.developpez.net/forums/sho...d.php?t=553987
... Et puis comme tu es tout neuf chez nous, teste ça
A+
Code : Sélectionner tout - Visualiser dans une fenêtre à part If Range("a3").MergeCells Then
Bonne journée
PS - Pour corriger ton sujet de discussion, utilise le bouton Editer en bas de ton message. Merci
Pour éviter qu'un utilisateur modifie une cellule tu as deux solutions :
Une explication. Dans Format -> Cellules -> Verrouillage, par défaut toutes les cellules sont verrouillées.
Si tu protèges ta feuille, (Menu Outils -> Protection -> Feuille de calculs) aucune cellule ne pourra être modifiée.
Pour permettre de saisir des données dans certaines cellules, tu peux les déverrouiller avant de protéger ta feuille.
Seconde solution : Si l'utilisateur va sur une cellule, une macro le place automatiquement sur la suivante ou sur une autre colonne.
Le code à placer dans la feuille de code de la feuille de calculs (Menu Outils -> Macros -> VB Editor -> + 2 clics sur le nom de la feuille) où tu colles ce code :
A la place d'une cellule, tu peux désigner une colonne
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 Private Sub Worksheet_SelectionChange(ByVal Target As Range) AdresseDeLaCellule = "D10" 'Tu adaptes If Target.Address(0, 0) = AdresseDeLaCellule Then _ Target.Offset(1, 0).Select End Sub
auquel cas tu déplaces sur la colonne suivante
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 AdresseDeLaColonne = 4 If Target.Column = AdresseDeLaColonne Then
Voilà je crois que j'ai répondu à tes deux questions
Code : Sélectionner tout - Visualiser dans une fenêtre à part Target.Offset(0, 1).Select![]()
bonjour,
le titre n'est pas très explicite et tu pose deux questions mais bon
1 - Cellule fusionnée
2 - Saisie interdite
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Sub FusionOuNon() MsgBox Range("A1").MergeCells End Sub
Je te laisse adapter
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 Private Sub Worksheet_Change(ByVal Target As Range) 'Saisie interdite If Target.Address = "$B$2" Then Application.EnableEvents = False Application.Undo Application.EnableEvents = True MsgBox "Saisie interdite" End If End Sub
cordialement
merci pour la réponse si rapide.
Pour la fusion des cellule c'est OK, mais je voudrais connaitre en réalité les extrémité de la cellule (je suis revenu sur le topic pour des complément d'information).
Pour annulez la saisi d'une cellule, c'est pas ceux que j'attendais, je veux par exemple bloquer row(5) si l'utilisateur est sur row(4) et appuie sur bas, il est sur row(6), idem avec une plage de cellule. Exemple je bloque row(5) et row(7) si l'utilisateur sélectionne un plage de cellule dans row(6) il pourra pas déborder les ligne est ainsi il sera obliger de sélectionner une seule ligne est plusieurs colonne
PS : je regarde le lien tout de suite
re
Sinon tu as ta seconde réponse dans le code d'Ouskel'n'or, remplace column par row.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 Sub FusionOuNon() MsgBox Range("A1").MergeCells MsgBox Range("A1").MergeArea.Address End Sub
@+
EDIT merci d'avoir changé le titre
C'est le même principe, mais à la place des colonnes, c'est sur les lignes :Envoyé par meijin_ryu
'Je suppose les lignes 5 et 7 à bloquer
Après tu risques d'avoir les exceptions à traiter.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Row = 5 Or Target.Row = 7 Then _ Rows(Target.Offset(1, 0).Row).Select End Sub
Par exemple, ce code n'empêche pas de sélectionner les lignes 4 à 8 .
Tu dis
A+
merci ouskel'n'or, on se rapproche de mon problème, Je regarderais ça cette après-midis dans les détails.
Si on veux bien se comprendre je fais par exemple un clic sur range("$B$5"), je maintient le clic enfoncée, je mets la souris sur range("$E$10"), au final je veux que selection.address = "$B$5:$E$10". Je pense que j'arriverais a me débrouiller avec ce que vous m'avez passé, merci encore
Précisément, non ! Si la ligne 5 est bloquée et que tu la sélectionnes dans une plage, dans mon exemple, le code te placeras sur la ligne 6.
Pour sélectionner une plage $B$5:$E$10 malgré le blocage de la ligne 5, je n'ai pas (pas encore) la solution. Je réfléchisMais Fred l'a peut-être
A+
Partager