Pagina precedente | 1 | Pagina successiva
Vota | Stampa | Notifica email    
Autore

Attivazione Macro

Ultimo Aggiornamento: 08/06/2018 10:08
Post: 27
Registrato il: 15/07/2011
Età: 46
Utente Junior
excel 2010
OFFLINE
06/06/2018 11:11

Buongiorno,
Sto provando a modificare un foglio di calcolo per un fantacalcio in modo che le colonne sotto le rose(dove vengono specificati quanti giocatori ci sono di ogni nazione) si aggiornassero dallalto verso il basso in maniera decresciente es. 5,4,3,2,1,0.
Avevo visto questo in giro questo codice:

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, [B3:B35,E3:E35,H3:H35,K3:K35,N3:N35,Q3:Q35,T3:T35,W3:W35,Z3:Z35,AC3:AC35]) Is Nothing Then
' il tuo codice
End If
End Sub

Il problema è che non riesco ad adattarlo essendo abbastanza ignorante in materia.
Sullo stesso foglio c'è già un codice con Worksheet_Change.
Qualcuna sa darmi una dritta?
Post: 3.522
Registrato il: 28/06/2011
Città: AGORDO
Età: 70
Utente Master
2013
OFFLINE
06/06/2018 11:20

vb
Private Sub Worksheet_Change(ByVal Target As Range) 
If Not Intersect(Area_precedente)Is Nothing Then
' il primo codice
End If
If Not Intersect(Target, [B3:B35,E3:E35,H3:H35,K3:K35,N3:N35,Q3:Q35,T3:T35,W3:W35,Z3:Z35,AC3:AC35]) Is Nothing Then
' il secondo codice
End If 
End Sub 
Excel 2013
Post: 27
Registrato il: 15/07/2011
Età: 46
Utente Junior
excel 2010
OFFLINE
06/06/2018 11:37

Re:
sul seconda macro dovrei metterci la macro con ordinamento della colonna ma sulla prima macro che ci metto?
Sul primo mess avevo postato il file ma penso che non ci sono riuscito vero?
Post: 3.523
Registrato il: 28/06/2011
Città: AGORDO
Età: 70
Utente Master
2013
OFFLINE
06/06/2018 17:47

Carino il codice che Ti fà apparire la Combobox, brutto il fatto di dover premere invio
Premesso che è un Worksheet_SelectionChange..., che è differente da Worksheet_Change
L'attuale Worksheet_Change si riferisce ad un'altro foglio che non è presente nell'allegato
Inoltre sarebbe più corretto un EVALUTATE, dato che la cella non cambia. Varia solo il risultato della formula

Comunque se Tu vorresti (ad ogni modifica), ordinare le celle più sotto riga37:riga68 in base ai goal?
Sostituisci la ComboBox1_KeyDown con questo
vb
Private Sub ComboBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    If ComboBox1 = "" Then Exit Sub
    If KeyCode = 13 Then
        Application.EnableEvents = False
        Cells(rr, cc) = ComboBox1.Value
        ComboBox1.Value = ""
        ComboBox1.Visible = False
    Range(Cells(37, cc), Cells(68, cc + 1)).Activate
    ActiveWorkbook.Worksheets("Rose").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Rose").Sort.SortFields.Add Key:=Range(Cells(37, cc + 1), Cells(68, cc + 1)), _
        SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
    ActiveWorkbook.Worksheets("Rose").Sort.SortFields.Add Key:=Range(Cells(37, cc), Cells(68, cc)), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("Rose").Sort
        .SetRange Range(Cells(37, cc), Cells(68, cc + 1))
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
Cells(rr, cc).Activate
        Application.EnableEvents = True
    End If
End Sub
[Modificato da raffaele1953 06/06/2018 17:54]
Excel 2013
Post: 28
Registrato il: 15/07/2011
Età: 46
Utente Junior
excel 2010
OFFLINE
06/06/2018 18:44

a fianco al nome del giocatore c'è la sua nazione di appartenenza e sotto mi deve dare il numero di persone che ho per ogni nazione.
Così è perfetta!
Hai proprio ragione del fatto che è scomodo premere ogni volta invio come è scomodo che bisogna premere per forza il tasto del menù a tendina se vuoi andar a trovare il nome!
hai qualche soluzione?
[Modificato da sindaco77 06/06/2018 19:02]
Post: 3.525
Registrato il: 28/06/2011
Città: AGORDO
Età: 70
Utente Master
2013
OFFLINE
07/06/2018 03:14

Rivedendo l'attuale Worksheet_Change, credo che fosse solo una prova fatta da Te, pertanto ho inserito il codice fatto prima
Per la facenda "il tasto del menù a tendina", per forza se non vuoi scrivere i nomi, magari sbagliando
Per la facenda dell'invio (cancella tutto ed inserisci questo)
Ps. in listaAZ ho cancellato la cella A2
vb
Option Explicit
Private rr As Long, cc As Long
Private Sub ComboBox1_Change()
    Cells(rr, cc) = ComboBox1.Value
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim Lc, Ar, Ur As Long
If rr = 1 Then Exit Sub
If Target.Count > 1 Then Exit Sub ' <<<<<<<<<<<<<
    If Not Intersect(Target, [B3:B35,E3:E35,H3:H35,K3:K35,N3:N35,Q3:Q35,T3:T35,W3:W35,Z3:Z35,AC3:AC35]) Is Nothing Then
        Ur = Sheets("listaAZ").Range("A" & Rows.Count).End(xlUp).Row
        rr = Target.Row
        cc = Target.Column
        Lc = Target.Width
        Ar = Target.Height
        With Target.Parent
            .ComboBox1.Top = Target.Offset(0, 0).Top + 1
            .ComboBox1.Left = Target.Offset(0, 0).Left + 1
            .ComboBox1.Width = Lc
            .ComboBox1.Height = Ar
            .ComboBox1.ListFillRange = ("listaAZ!A2:A" & Ur)
            .ComboBox1.Visible = True
        End With
    End If
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, [B3:B35,E3:E35,H3:H35,K3:K35,N3:N35,Q3:Q35,T3:T35,W3:W35,Z3:Z35,AC3:AC35]) Is Nothing Then
ComboBox1.Visible = False
Application.EnableEvents = False
    Range(Cells(37, cc), Cells(68, cc + 1)).Activate
    ActiveWorkbook.Worksheets("Rose").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Rose").Sort.SortFields.Add Key:=Range(Cells(37, cc + 1), Cells(68, cc + 1)), _
        SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
    ActiveWorkbook.Worksheets("Rose").Sort.SortFields.Add Key:=Range(Cells(37, cc), Cells(68, cc)), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("Rose").Sort
        .SetRange Range(Cells(37, cc), Cells(68, cc + 1))
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
Cells(rr, cc).Activate
Application.EnableEvents = True
End If
End Sub
[Modificato da raffaele1953 07/06/2018 03:17]
Excel 2013
Post: 29
Registrato il: 15/07/2011
Età: 46
Utente Junior
excel 2010
OFFLINE
07/06/2018 10:13

Re:
raffaele1953, 07/06/2018 03.14:

Rivedendo l'attuale Worksheet_Change, credo che fosse solo una prova fatta da Te, pertanto ho inserito il codice fatto prima
Per la facenda "il tasto del menù a tendina", per forza se non vuoi scrivere i nomi, magari sbagliando
Per la facenda dell'invio (cancella tutto ed inserisci questo)
Ps. in listaAZ ho cancellato la cella A2
vb
Option Explicit
Private rr As Long, cc As Long
Private Sub ComboBox1_Change()
    Cells(rr, cc) = ComboBox1.Value
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim Lc, Ar, Ur As Long
If rr = 1 Then Exit Sub
If Target.Count > 1 Then Exit Sub ' <<<<<<<<<<<<<
    If Not Intersect(Target, [B3:B35,E3:E35,H3:H35,K3:K35,N3:N35,Q3:Q35,T3:T35,W3:W35,Z3:Z35,AC3:AC35]) Is Nothing Then
        Ur = Sheets("listaAZ").Range("A" & Rows.Count).End(xlUp).Row
        rr = Target.Row
        cc = Target.Column
        Lc = Target.Width
        Ar = Target.Height
        With Target.Parent
            .ComboBox1.Top = Target.Offset(0, 0).Top + 1
            .ComboBox1.Left = Target.Offset(0, 0).Left + 1
            .ComboBox1.Width = Lc
            .ComboBox1.Height = Ar
            .ComboBox1.ListFillRange = ("listaAZ!A2:A" & Ur)
            .ComboBox1.Visible = True
        End With
    End If
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, [B3:B35,E3:E35,H3:H35,K3:K35,N3:N35,Q3:Q35,T3:T35,W3:W35,Z3:Z35,AC3:AC35]) Is Nothing Then
ComboBox1.Visible = False
Application.EnableEvents = False
    Range(Cells(37, cc), Cells(68, cc + 1)).Activate
    ActiveWorkbook.Worksheets("Rose").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Rose").Sort.SortFields.Add Key:=Range(Cells(37, cc + 1), Cells(68, cc + 1)), _
        SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
    ActiveWorkbook.Worksheets("Rose").Sort.SortFields.Add Key:=Range(Cells(37, cc), Cells(68, cc)), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("Rose").Sort
        .SetRange Range(Cells(37, cc), Cells(68, cc + 1))
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
Cells(rr, cc).Activate
Application.EnableEvents = True
End If
End Sub




Post: 30
Registrato il: 15/07/2011
Età: 46
Utente Junior
excel 2010
OFFLINE
07/06/2018 10:15

E' perfetta.
Scusa se ti rompo ma se io volessi mettere una formula sulla lista giocatori che ho sul foglio listaAZ in modo che mi vada a cancellare il giocatore già preso dovrei modificare il codice?
Post: 3.527
Registrato il: 28/06/2011
Città: AGORDO
Età: 70
Utente Master
2013
OFFLINE
08/06/2018 10:08

NO, non influenza il codice. Un esempio di una formula in F3 da inserire sul Tuo files in A3
In questo allegato lo fà il VBA, ho eliminato il Worksheet_Change. Nell'altro foglio ho bloccato Worksheet_Change con un 2 finale (creava casini). Sembra funzionare bene, però devi rispettare la procedura. EX se inserisci un giocatore e per caso Ti sei sbagliato, devi obbligatoriamte riselezionare la combobox e scegliere una casella vuota. Il VBA ripristina il nominativo nella lista della combobox e se vorrai dopo potrai scegliere un'altro giocatore. Vedi Tu quale metodo migliore.
Excel 2013
Vota: 15MediaObject5,0049 4
Amministra Discussione: | Chiudi | Sposta | Cancella | Modifica | Notifica email Pagina precedente | 1 | Pagina successiva
Nuova Discussione
 | 
Rispondi
Cerca nel forum
Tag discussione
Discussioni Simili   [vedi tutte]
Feed | Forum | Bacheca | Album | Utenti | Cerca | Login | Registrati | Amministra
Tutti gli orari sono GMT+01:00. Adesso sono le 00:43. Versione: Stampabile | Mobile | Regolamento | Privacy
FreeForumZone [v.6.1] - Copyright © 2000-2024 FFZ srl - www.freeforumzone.com