limiter champ d'action

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
 
P

phileas

Guest
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
 

myDearFriend!

XLDnaute Barbatruc
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
 
P

phileas

Guest
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
 

myDearFriend!

XLDnaute Barbatruc
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,
 
P

phileas

Guest
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
 

myDearFriend!

XLDnaute Barbatruc
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,
 

Discussions similaires

Statistiques des forums

Discussions
312 225
Messages
2 086 411
Membres
103 201
dernier inscrit
centrale vet