VBA seleziono cella

Versione Completa   Stampa   Cerca   Utenti   Iscriviti     Condividi : FacebookTwitter
valegig
00mercoledì 25 gennaio 2017 15:49
Buonasera,
avrei bisogno di selezionare la cella della colonna A e poi cancellarne il contenuto, qualora contenga il valore contenuto in cella B2...
in VBA...
Grazie 1000!!!!!!
alfrimpa
00mercoledì 25 gennaio 2017 15:56
Ciao Valentina

Mi sfugge un po' l'utilità della cosa ma il cliente ha sempre ragione [SM=g27828]

Prova questa macro da inserire nel modulo di classe del foglio interessato (sai farlo?)
vb
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, Range("a1")) Is Nothing Then
    If Target.Value = Range("b2").Value Then
        Target.ClearContents
    End If
End If
End Sub


Magari se alleghi il solito file di esempio spiegando meglio quello che vuoi fare riesco a fare qualcosa in più.
valegig
00mercoledì 25 gennaio 2017 16:12
Ciao Alfredo,
vorrei che la macro mi permettesse di cercare la cella di colonna H che contenga il valore contenuto in cella C14.
Ad esempio se scrivo "D" nella cella C14 la macro mi dovrebbe permettere di cancellare il contenuto della cella H4.
[SM=x423017]
alfrimpa
00mercoledì 25 gennaio 2017 16:27
Ecco ora è decisamente meglio anche perché la precedente domanda non aveva molto senso.

Un consiglio: quando poni domande allega sempre un file di esempio che rispecchi il quesito magari inserendo a mano il risultato che vuoi ottenere.

Dammi pochi minuti e ti rispondo.

Solo per capire: ma tu hai una qualche conoscenza di VBA? Mi occorre saperlo solo per "tarare" al meglio la risposta in modo che possa essere per te la più comprensibile possibile.

Se ti scrivo del codice hai bisogno sempre del relativo file allegato o sei in grado di gestirlo da sola?

Sembra un terzo grado ma è solo per aiutarti meglio.
valegig
00mercoledì 25 gennaio 2017 17:01
ho cominciato ad usare le macro da meno di una settimana....
per ora registro la macro e poi vado a modificarla... se le istruzioni sono basiche mi sembra di capirci un pochino, ma pochino pochino
alfrimpa
00mercoledì 25 gennaio 2017 17:37
Ciao Valentina eccoti la macro
vb
Private Sub Worksheet_Change(ByVal Target As Range)
Dim ur As Long
Dim rng As Range
Dim cel As Range
ur = Cells(Rows.Count, "h").End(xlUp).Row
Set rng = Range("h1:h" & ur)
If Not Intersect(Target, Range("C14")) Is Nothing Then
    For Each cel In rng
        If cel.Value = Target.Value Then
            cel.ClearContents
        End If
    Next cel
End If
End Sub
alfrimpa
00mercoledì 25 gennaio 2017 17:46
Questa è una macro "particolare" nel senso che va inserita non in un modulo standard ma nel modulo di classe del foglio interessato (conosci la differenza tra i due?)

Per farlo segui questa procedura.

1) Apri l'editor di VBA con Alt+F11
2) Nella finestra in alto a sinistra fai doppio clic sul foglio ""INSERISCI PERSONALE"
3) Nella finestra in alto a destra copia e incolla il codice della macro
4) Torna al foglio e salva.

Ora, d'ora in avanti, ogni volta che vai a scrivere qualcosa in cella C14 questo verrà cancellato - se presente - in colonna H.

Tieni presente che la macro, per le istruzioni che contiene (dichiarazione di variabili, presenza di un ciclo For), non può essere registrata.

Se hai bisogno di chiarimenti/spiegazioni sul codice chiedimi pure.

Non ti allego il file per "stimolarti" un po' [SM=g27828]

Comunque se vuoi saperne di più riguardo al VBA ti allego link dove trovi un corso veramente ben fatto dove tutte le lezioni sono scaricabili in PDF.

http://forum.wintricks.it/showthread.php?t=155252
valegig
00mercoledì 25 gennaio 2017 17:51
Ciao Alfredo,
cosa sto sbagliando???????
[SM=x423054]
valegig
00mercoledì 25 gennaio 2017 17:53
scusa leggo solo ora il tuo ultimo messaggio... ora sono fusa domani mattina studio, lo giuro!!
ancora grazie!!!!!!!!!!!!!
alfrimpa
00mercoledì 25 gennaio 2017 18:02
Fidati che funziona! [SM=g27828]

Comunque ti do qualche ragguaglio sul codice

Righe 2 - 4

Dichiaro le variabili necessarie

Riga 5

memorizzo nella variabile ur il numero di riga dell'ultima cella piena in colonna H

Riga 6

Memorizzo nella variabile di tipo Range rng l'intervallo di ricerca dalla cella H1 sino all'ultima cella piena.

Riga 7

Se la cella oggetto di modifica è la C14 inizia un ciclo

Righe 8 -12

Viene esaminata ogni cella dell'intervallo di ricerca e se il valore della cella è uguale a quello di C14 viene cancellato.

Spero ti sia tutto chiaro.

Ora mi raccomando studia che poi ti interrogo [SM=g27828]
valegig
00giovedì 26 gennaio 2017 10:29
Buongiorno Alfredo,
non ci riesco... ci sto provando da un paio di ore... credo di aver seguito le tue istruzioni ma evidentemente sbaglio qualcosa....
alfrimpa
00giovedì 26 gennaio 2017 11:25
Valentina perdonami è colpa mia [SM=x423054].

Nel codice che ti ho dato mi è saltata questa istruzione.

Option Compare Text


Questa fa si che la macro funzioni sia che la lettera inserita sia maiuscola o minuscola.

A te non funzionava perché tu digitavi la lettera minuscola ed in colonna H vi sono tutte maiuscole.

Questa istruzione va inserita in testa al modulo del foglio "INSERISCI PERSONALE".

Scusami ancora.
valegig
00giovedì 26 gennaio 2017 13:07
FUNZIONAAAAAAAAA!
GRAZIEEEEEEEEEEE!
Altra domanda [SM=x423063] : se io volessi far seguire altre istruzioni di seguito a quelle che mi hai dato come faccio?
Ho provato a incollare, prima di End Sub, le istruzioni (qui sotto) che fatte girare da sole mi funzionano:


Application.ScreenUpdating = False

'ordino secondo l'alfabeto le righe della colonna h

Columns("H:H").Select

ActiveWorkbook.Worksheets("INSERISCI PERSONALE").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("INSERISCI PERSONALE").Sort.SortFields.Add Key:=Range( _
"H1"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortTextAsNumbers
With ActiveWorkbook.Worksheets("INSERISCI PERSONALE").Sort
.SetRange Range("H1:I245")
.Header = xlNo
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With


'COPIO H1:H100 E INCOLLO VALORI IN M2:M101
Range("H1:H100").Select
Selection.Copy
Range("M2:M101").Select
ActiveSheet.Paste


'COPIO I1:I100
Range("I1:I100").Select
Application.CutCopyMode = False
Selection.Copy

'VADO IN M2 POI SCENDO NELLA PRIMA CELLA VUOTA E CI INCOLLO I VALORI
Range("M2").Select
Selection.End(xlDown).Select
ActiveCell.Offset(1, 0).Select

Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False



'CANCELLO C14
Range("E6").Select
Selection.ClearContents



'copio H1:H7 righi e li incollo nel foglio 'gennaio 1' in AS4:AS10

Range("H1:H7").Select
Selection.Copy
Sheets("gennaio 1").Select
Range("AS4").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

'COPIO H8:H100 E LI INCOLLO DA AS13 IN POI QUESTO PER LASCIARE DUE RIGHI BIANCHI
Sheets("INSERISCI PERSONALE").Select
Range("H8:H100").Select
Selection.Copy
Sheets("gennaio 1").Select
Range("AS13").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

Range("AS4").Select

Application.ScreenUpdating = True
MsgBox "AGGIORNAMENTO ESEGUITO"



Application.ScreenUpdating = True






alfrimpa
00giovedì 26 gennaio 2017 14:23
Ciao Valentina

Prova così:

vb
Private Sub Worksheet_Change(ByVal Target As Range)
Dim ur As Long
Dim rng As Range
Dim cel As Range
ur = Cells(Rows.Count, "h").End(xlUp).Row
Set rng = Range("h1:h" & ur)
If Not Intersect(Target, Range("C14")) Is Nothing Then
    For Each cel In rng
        If cel.Value = Target.Value Then
            cel.ClearContents
        End If
    Next cel
    Call macro1
    Call macro2
    Call macro3
    Call macro2
End If
End Sub


sostituendo macro1, macro2, macro3 e macro4 con i nomi delle tue macro.

Io ho supposto che siano 4; se son di più aggiungi un Call seguito dal nome della macro e se son di meno cancelli un Call.

Fammi sapere.
valegig
00venerdì 27 gennaio 2017 11:40
Buongiorno Alfredo!!!
ho aggiunto il call alla macro come mi hai insegnato

Option Compare Text
Private Sub Worksheet_Change(ByVal Target As Range)
Dim ur As Long
Dim rng As Range
Dim cel As Range
ur = Cells(Rows.Count, "h").End(xlUp).Row
Set rng = Range("h1:h" & ur)
If Not Intersect(Target, Range("C14")) Is Nothing Then
For Each cel In rng
If cel.Value = Target.Value Then
cel.ClearContents
End If
Next cel
Call aggiorna_cancella
End If
End Sub

ma excel mi restituisce un errore:
Error di run-time '28'
Spazio dello stack esaurito

la macro aggiorna_cancella funziona fintanto non la inserisco nel modulo di classe del foglio interessato a quel punto restituisce un errore pure quella.
Ancora grazie!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
[SM=x423047]
alfrimpa
00venerdì 27 gennaio 2017 11:49
Ciao valentina

Purtroppo andiamo un po' a tentoni comunque prova questa

vb
Private Sub Worksheet_Change(ByVal Target As Range)
Dim ur As Long
Dim rng As Range
Dim cel As Range
ur = Cells(Rows.Count, "h").End(xlUp).Row
Set rng = Range("h1:h" & ur)
If Not Intersect(Target, Range("C14")) Is Nothing Then
    For Each cel In rng
        If cel.Value = Target.Value Then
            cel.ClearContents
        End If
    Next cel
Application.EnableEvents = False
    Call macro1
    Call macro2
    Call macro3
    Call macro2
Application.EnableEvents = True
End If
End Sub
valegig
00venerdì 27 gennaio 2017 16:57
SEI UN MITO!!!!!!!!!!!!!!!!!!!!!
GRAZIEEEEEEEEEEEEEEEEEEEEEE
alfrimpa
00venerdì 27 gennaio 2017 17:23
Fiuuuuuuuuu!!! Temevo di non farcela [SM=g27828]

Mi devi una "fiorentina" [SM=g27828] [SM=g27829] [SM=g27828]

Questa è la versione 'lo-fi' del Forum Per visualizzare la versione completa clicca qui
Tutti gli orari sono GMT+01:00. Adesso sono le 02:36.
Copyright © 2000-2024 FFZ srl - www.freeforumzone.com