Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

avviare macro solo se cambia singola cella

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

avviare macro solo se cambia singola cella

Postdi raimea » 22/08/14 19:37

ciao
in un foglio ho una macro questa:
Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Target As Range)

'DISATTIVO LE APPLICATION PER VELOCIZZARE
'L'ESECUZIONE DELLA MACRO
Dim xlCal As XlCalculation
With Application
    .ScreenUpdating = False
    .EnableEvents = False
    xlCal = .Calculation
    .Calculation = xlCalculationManual
End With

Dim rLettera As Range
Dim rAreaCond As Range
Dim nUltB As Long
Dim sLettera As String
Dim cl As Range
Dim j As Long

UserForm1.Show vbModeless
DoEvents

If Target.Count = 1 Then
    sLettera = Me.Range("C3").Value
    If Not Intersect(Target, Me.Range("C3")) Is Nothing And sLettera <> "" Then
        j = 6
        nUltB = ultima(Foglio2.Range("B:B"))
        Set rLettera = Foglio2.Range("B7:B" & nUltB)
       
        Me.Range("b7:W" & Rows.Count).ClearContents
       
        For Each cl In rLettera
            Set rAreaCond = Foglio2.Range("M" & cl.Row & ":O" & cl.Row & _
            ",Q" & cl.Row & ":S" & cl.Row & ",U" & cl.Row & ":V" & cl.Row)
            If cl.Value = sLettera And Application.WorksheetFunction.Count(rAreaCond) > 0 Then
                j = j + 1
                Foglio2.Range("b" & cl.Row, "W" & cl.Row).Copy
               
                Me.Range("b" & j).PasteSpecial xlPasteValues
            End If
        Next cl
       
        Me.Range("b7").Activate
       
        Application.CutCopyMode = False
        Set rLettera = Nothing
        Set rAreaCond = Nothing
    End If
End If


'--metto bianco sfondo--------------
    Range("G7:H500").Select
    With Selection.Interior
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .ThemeColor = xlThemeColorDark1
        .TintAndShade = 0
        .PatternTintAndShade = 0
    End With

Call separaorario

ActiveWindow.DisplayGridlines = False

'RIATTIVO LE APPLICATION
With Application
    .Calculation = xlCal
    .EnableEvents = True
    .ScreenUpdating = True
End With

Unload UserForm1

End Sub


essa si avvia ogni volta cambio il valore in C3
ma si avvia anche quando scrivo in altre parti del foglio
(la relativa udf e' in un modulo)

ora ho la necessita di scrivere nello stesso foglio, quindi chiedo:
come posso modif la macro in modo si avvi solo se cambio il
valore in C3 e non si avvii se scrivo in altre celle del foglio stesso ?


mi potrebbe andare bene anche trasformarla in macro da mettere in un modulo
ed avviarla con pulsante.

grazie
ciao
http://www.lelugarine.eu
S.O. Seven7, Excell 2010
Avatar utente
raimea
Utente Senior
 
Post: 1101
Iscritto il: 11/02/10 07:33
Località: lago

Sponsor
 

Re: avviare macro solo se cambia singola cella

Postdi Zer0Kelvin » 22/08/14 22:34

Ciao.
Devi solo modificare la condizione dell'If:
Codice: Seleziona tutto
If Target.Count = 1 And Target.Address = "$C$3" Then
[Win7,Office2010]
Condividere la conoscenza aumenta la ricchezza di tutti(Z0°K)
Dai ad un uomo un pesce e lo avrai sfamato per un giorno;insegnagli a pescare e lo avrai sfamato per sempre(Confucio)
Il sonno della ragione genera mostri(Francisco Goya)
Avatar utente
Zer0Kelvin
Utente Senior
 
Post: 303
Iscritto il: 08/04/12 11:23

Re: avviare macro solo se cambia singola cella

Postdi raimea » 23/08/14 05:06

ciao
ho modificato if come tu mi hai indicato MA rimane stesso problema.

ogni volta che scrivo in un altra cella del foglio parte macro.

vi allego il file,
si tratta del foglio ---> filtra
[https://db.tt/K26IEURf

ciao
http://www.lelugarine.eu
S.O. Seven7, Excell 2010
Avatar utente
raimea
Utente Senior
 
Post: 1101
Iscritto il: 11/02/10 07:33
Località: lago

Re: avviare macro solo se cambia singola cella

Postdi Zer0Kelvin » 23/08/14 05:46

Scusa, ma davo per scontato che la if fosse messa al posto giusto:
Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rLettera As Range
Dim rAreaCond As Range
Dim nUltB As Long
Dim sLettera As String
Dim cl As Range
Dim j As Long
   If Target.Count = 1 And Target.Address = "$C$3" Then
   'DISATTIVO LE APPLICATION PER VELOCIZZARE
   'L'ESECUZIONE DELLA MACRO
      Dim xlCal As XlCalculation
      With Application
          .ScreenUpdating = False
          .EnableEvents = False
          xlCal = .Calculation
          .Calculation = xlCalculationManual
      End With
      UserForm1.Show vbModeless
      DoEvents
       sLettera = Me.Range("C3").Value
       If Not Intersect(Target, Me.Range("C3")) Is Nothing And sLettera <> "" Then
           j = 6
           nUltB = ultima(Foglio2.Range("B:B"))
           Set rLettera = Foglio2.Range("B7:B" & nUltB)
           Me.Range("b7:W" & Rows.Count).ClearContents
           For Each cl In rLettera
               Set rAreaCond = Foglio2.Range("M" & cl.Row & ":O" & cl.Row & _
               ",Q" & cl.Row & ":S" & cl.Row & ",U" & cl.Row & ":V" & cl.Row)
               If cl.Value = sLettera And Application.WorksheetFunction.Count(rAreaCond) > 0 Then
                   j = j + 1
                   Foglio2.Range("b" & cl.Row, "W" & cl.Row).Copy
                   
                   Me.Range("b" & j).PasteSpecial xlPasteValues
               End If
           Next cl
           Me.Range("b7").Activate
           Application.CutCopyMode = False
           Set rLettera = Nothing
           Set rAreaCond = Nothing
       End If
   '--metto bianco sfondo--------------
       Range("G7:H500").Select
       With Selection.Interior
           .Pattern = xlSolid
           .PatternColorIndex = xlAutomatic
           .ThemeColor = xlThemeColorDark1
           .TintAndShade = 0
           .PatternTintAndShade = 0
       End With
      Call separaorario
      ActiveWindow.DisplayGridlines = False
   'RIATTIVO LE APPLICATION
      With Application
          .Calculation = xlCal
          .EnableEvents = True
          .ScreenUpdating = True
      End With
      Unload UserForm1
   End If
End Sub
[Win7,Office2010]
Condividere la conoscenza aumenta la ricchezza di tutti(Z0°K)
Dai ad un uomo un pesce e lo avrai sfamato per un giorno;insegnagli a pescare e lo avrai sfamato per sempre(Confucio)
Il sonno della ragione genera mostri(Francisco Goya)
Avatar utente
Zer0Kelvin
Utente Senior
 
Post: 303
Iscritto il: 08/04/12 11:23

Re: avviare macro solo se cambia singola cella

Postdi raimea » 23/08/14 11:59

ciao
OTTIMO tutto ok
grazie :)
http://www.lelugarine.eu
S.O. Seven7, Excell 2010
Avatar utente
raimea
Utente Senior
 
Post: 1101
Iscritto il: 11/02/10 07:33
Località: lago


Torna a Applicazioni Office Windows


Topic correlati a "avviare macro solo se cambia singola cella":


Chi c’è in linea

Visitano il forum: Maury170419 e 17 ospiti