limiter champ d'action

  • Initiateur de la discussion Initiateur de la discussion phileas
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

P

phileas

Guest
je cherche à limiter le champ d'action d'une macro.
j'ai créé une macro simple qui permet d'inserer dans la cellule activeve une ligne.
Je veux que cette action n'intervienne que si la cellule active fait partie d'un champ de cellule bien défini.
sinon, pas d'action + message d'erreur

clair ? pas clair ?
merci de vos conseils

Phileas
 
bingo !
bravo !

respect !
merci

encore une petite chose
est il possible de définir la limite d'un champ de cellules autrement que par les N° de cellule mais par leur caractéristique ou contenu
ex : A1:cellule rouge (ou cellule avec mot 'fin')
au lieu de
a1:A10

phileas
 
Bien sûr phileas,

Dans l'expression :
If Not Application.Intersect(ActiveCell, PLAGE) Is Nothing Then
... tu peux définir la plage comme tu le souhaites.

Ci-dessous un exemple de code qui, en amont, permet de définir une Plage1 correspondant à toutes les cellules comportant le mot 'fin' et une Plage2 rassemblant l'ensemble des cellules avec un fond rouge :
Dim Plage1 As Range, Plage2 As Range, Cellule As Range

      For Each Cellule In Sheets('Feuil1').UsedRange
            'Définit la Plage1 représentant l'ensemble des cellules
            'contenant le mot 'fin'
            If Cellule.Value Like '* fin *' Then
                  If Plage1 Is Nothing Then
                        Set Plage1 = Cellule
                  Else
                        Set Plage1 = Union(Plage1, Cellule)
                  End If
            End If
            'Définit la Plage2 représentant l'ensemble des cellules
            'comportant un fond rouge
            If Cellule.Interior.ColorIndex = 3 Then
                  If Plage2 Is Nothing Then
                        Set Plage2 = Cellule
                  Else
                        Set Plage2 = Union(Plage2, Cellule)
                  End If
            End If
      Next Cellule
Cordialement,

Message édité par: myDearFriend!, à: 29/09/2005 02:43
 
Merci.
Que siginfie 'en amont'.
Dois je créer une macro spécifique qui défini les plages1 et 2.
Cette macro doit se lancer à l'ouverteure du classeur, non ?
Si oui comment fait on ?
Si non faut il réécrire le code sur chaque macro qui nécessite la définition des plages 1 et 2 ?

cordialement

phileas
 
Bonsoir phileas,

'En amont' veut dire 'avant'... cela signifie que tu dois définir la plage souhaitée avant de t'en servir...
Autrement dit, pour l'exemple précédent, si tu veux pouvoir contrôler que la cellule active appartient bien à une certaine plage avant traitement, cette dernière représentant l'ensemble des cellules contenant le mot 'fin' :
Sub Traitement()
Dim Plage As Range, Cellule As Range
      'Définit la Plage représentant l'ensemble des cellules contenant le mot 'fin'
      For Each Cellule In Sheets('Feuil1').UsedRange
              If Cellule.Value Like '* fin *' Then
                        If Plage Is Nothing Then
                                Set Plage = Cellule
                        Else
                                Set Plage = Union(Plage, Cellule)
                        End If
              End If
      Next Cellule
      'Traitement
      If Not Application.Intersect(ActiveCell, Plage) Is Nothing Then
              'Ton code d'insertion ICI...
      Else
              MsgBox 'Hors limite !'
      End If
End Sub
Cela dit, l'exemple est ici assez mal choisi finalement car avec ce qui suit, tu devrais obtenir la même chose !
Sub Traitement2()
      If ActiveCell.Value Like '* fin *' Then
              'Ton code d'insertion ICI...
      Else
              MsgBox 'Hors limite !'
      End If
End Sub
Cordialement,
 
merci beaucoup
je ne suis pas sur de m'être bien exprimé, je souhaite non pas définir les caractéristiques d'une plage mais de ses limites.
je veux insérer des lignes entre deux cellules l'une s'appelant 'debut'
l'autre 'fin'.
il est entendu que la colonne ainsi définie A1:A2 (A1=début, A2=fin)s'étend à chaque insertion
 
Re phileas,

Bon, on efface tout et on reprend...:silly:

Soit les deux mots 'debut' et 'fin' (dans l'ordre !) apparaissant chacun dans une cellule de la colonne A, la procédure ci-dessous insèrera une ligne entière juste avant la cellule contenant le mot 'fin' :
Sub Inserer()
Dim C As Range
      Set C = ActiveSheet.Columns(1).Find('fin', LookIn:=xlValues)
      If Not C Is Nothing Then
            C.EntireRow.Insert
      End If
End Sub
Bon courage pour la suite...

Cordialement,
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
5
Affichages
196
Réponses
4
Affichages
312
Réponses
5
Affichages
665
Retour