Metodo Autofill malfunzionante



  • Metodo Autofill malfunzionante
    di nichicanta data: 04/03/2014 10:17:57

    Buongiorno amici, ho assemblato un codice che mi deve permetter di creare un progressivo in una determinata colonna, solo in presenza di dati nelle celle adiacenti e con dati presenti.
    Appena inseriti i dati nelle colonne adiacenti, appena lancio la macro ( che vi riporto sotto) mi appare il seguente messaggio di errore:Errore di Run time 1004 " metodo "Range" dell'oggetto Global non riuscito.
    L'errore segnalato mi evidenzia queste righe:.Range("A5:A6").AutoFill _
    Destination:=Range("A5:A" & _
    UltRiga)
    Mi aiutate a capire perchè non funziona, quando in realtà dovrebbe funzionare bene poichè le celle a5 e A6 contengono i valori 1 e 2.
    Grazie per l'aiuto che vorrete darmi buona, giornata a tutti.
     
    Public Sub progressivo()
    
        'dichiaro le variabili
        Dim wk As Workbook
        Dim sh As Worksheet
        Dim lUltRiga As Long
    
        'metto un riferimento al worksbook
        'che contiene il codice
        Set wk = ThisWorkbook
    
        'metto un riferimento al Foglio1
        With wk
            Set sh = .Worksheets("DATI")
        End With
    
        With sh
            'trovo l'ultima riga con
            'dati della colonna C
            lUltRiga = .Range("C" & _
                .Rows.Count).End(xlUp).Row
               
                 'valorizzo A5 e A6
            .Range("A5").Value = 1
            .Range("A6").Value = 2
            'le seleziono
            .Range("A5:A6").Select
            
            'AutoFill
              
             
             .Range("A5:A6").AutoFill _
             Destination:=Range("A5:A" & _
             UltRiga)
            
            End With
        
        'Set a Nothing delle variabili oggetto
        Set sh = Nothing
        Set wk = Nothing
    
    End Sub



  • di Grograman (utente non iscritto) data: 04/03/2014 10:38:48

    CIT: "Mi aiutate a capire perchè non funziona"

    Perchè non hai messo la dichiarazione obbligatoria delle variabili



  • di patel data: 04/03/2014 10:48:55

    devo ammettere che hai ragione, però basterebbe lanciare la macro con F8 e leggere i valori delle variabili al momento dell'errore





  • di scossa data: 04/03/2014 11:16:56

    cit. patel: "...però basterebbe lanciare la macro con F8 e leggere i valori delle variabili al momento dell'errore "

    che è sicuramente più semplice, rapido, immediato, efficiente ed efficace, e quindi preferibile, al dichiarare le variabilii.



  • di nichicanta data: 04/03/2014 11:22:25

    Ciao Grograman, ciao Patel, innanzitutto sono contento di vedervi e colgo l'occasione per salutarvi con molto piacere.
    Gro, hai ragione ho attivato la dichiarazione obbligatoria delle variabili e mi sono accorto dell'errore:mancava la L alla variabile: UltRiga.
    Colgo l'ocasione per richiedervi un ulteriore aiuto, ho notato che la macro allegata funziona bene ( dopo la tua segnalazione carissimo Gro...) con dati presenti nella prima e seconda riga (colonna C in particolar modo) ma quando eseguo lo stesso codice, ed è solo presente il dato nella prima riga ( nel mio caso specifico la riga 5 cella da A5 a H5) il codice mi va in errore.
    Come posso risolvere (magari con un msgbox e/o altro, a voi la scelta) questo inconveniente?
    Grazie, siete fantasctici



  • di nichicanta data: 04/03/2014 11:25:47

    ops, anche se in ritardo saluto con affetto il carissimo scossa.
    Ciao scossa, hai qualche novità sul file che ti ho inviato tempo fa ( è lo stesso sul quale continuo, anche con questa discussione, a chiedere migliorie e aggiornamenti).
    Saluto tutti con grande stima e affetto.




  • di scossa data: 04/03/2014 11:29:26

    cit.: "hai qualche novità sul file che ti ho inviato tempo fa"

    no, sinceramente non riesco a ritagliarmi un tempo sufficientemente lungo da potermi dedicare al tuo file in modo utile; riesco a trovare pochi minuti ogni tanto per sbirciare i forum e dare qualche rapida risposta.



  • di patel data: 04/03/2014 11:30:43

    cit. scossa
    che è sicuramente più semplice, rapido, immediato, efficiente ed efficace, e quindi preferibile, al dichiarare le variabilii.

    ovviamente no, tu e Grograman e gli altri avete ragionissima, ma io provengo dal FORTRAN dove dichiarare le variabili era un imperativo categorico e passando al basic mi sono trovato bene senza farlo, esorto tutti gli altri a NON seguire il mio esempio.





  • di Grograman data: 04/03/2014 11:34:17

    ma si tanto nè io nè Marco demordiamo dal tentare di convincerti a dichiararle nonostante il tuo ostruzionismo


    Per la domanda originale invece, l'utilizzo di un autofill per un progressivo numerico è obbligatorio, o è una soluzione a cui sei arrivato senza considerare altre alternative?

    Eccom come ovviare in altor modo:
     
    Option Explicit
    Public Sub progressivo()
    
    'dichiaro le variabili
    Dim wk As Workbook
    Dim sh As Worksheet
    Dim lUltRiga As Long
      
      'metto un riferimento al worksbook
      'che contiene il codice
      Set wk = ThisWorkbook
      
      'metto un riferimento al Foglio1
      With wk
      Set sh = .Worksheets("DATI")
      End With
      
      With sh
        'trovo l'ultima riga con
        'dati della colonna C
        lUltRiga = .Range("C" & .Rows.Count).End(xlUp).Row
        .Range("A5:A" & lUltRiga).FormulaLocal = "=R[-1]C+1"
        .Range("A5:A" & lUltRiga) = .Range("A5:A" & lUltRiga).Value
      End With
      
      'Set a Nothing delle variabili oggetto
      Set sh = Nothing
      Set wk = Nothing
    
    End Sub
    



  • di nichicanta data: 04/03/2014 11:41:38

    Scossa, non ti preoccupare, tanto vi sto richiedendo l'aiuto su questo bellissimo forum, e ci siamo poichè il file lo utilizzo da qualche giorno e all'occorrenza, vi posto i problemi da risolvere ( e fin qui tutto benissimo perchè li avete risolti brillantemente).
    Per il carissimo Grograman, mi sono aiutato molto con internet e non ho pensato ad altre soluzioni, ma nel momento dell'utilizzo mi sono accorto di ulteriri esigenze che vi sto segnalando.
    Provo il tuo codice e ti faccio sapere ecc.
    Grazie infinite.



  • di nichicanta data: 04/03/2014 11:47:46

    Ciao Gro, la tua macro appena lanciata mi riporta nelle celle della colonna A, precisamente da A5 in poi questo: "VALORE" (cioè mi sballa tutto) e non i numeri in progressione, c'è qualcosa da cambiare ecc..






  • di nichicanta data: 04/03/2014 13:42:28

    Ciao Gro.., puoi visionare quello che ti ho segnalato poco fa e se ci sono delle modifiche da apportare al tuo codice.
    Ti ringrazio, diversamente ritengo conclusa la discussione, ringraziandovi come sempre per il vostro prezioso aiuto.



  • di Grograman (utente non iscritto) data: 04/03/2014 14:35:14

    Non è da cambiare, è da adattare!
    Io sono andato a caso, non avendo files su cui lavorare e non sapendo da dove partono i dati e dove sono disposti



  • di patel data: 04/03/2014 14:38:22

    ormai dovresti sapere che per ottenere un buon servizio occorre procurare il file





  • di nichicanta data: 04/03/2014 14:59:16

    Vi allego il file chiamato "Prova", uguale per dati e colonne a quello che utilizzo.
    Noterete che riporta nella colonna A quello che bìvi ho segnalato precedentemente.
    Vi saluto e vi ringrazio per il vostro prezioso aiuto.



  • di nichicanta data: 04/03/2014 15:00:59

    Scusatemi mi sono accorto che non ha salvato la macro inserita, lo riallego con lo stesso nome



  • di Grograman (utente non iscritto) data: 04/03/2014 15:06:35

    Come supponevo c'era del testo in A4
     
      With sh
        'trovo l'ultima riga con
        'dati della colonna C
        lUltRiga = .Range("C" & .Rows.Count).End(xlUp).Row
        .Range("A5:A" & lUltRiga).FormulaR1C1 = "=IFERROR(R[-1]C+1,1)"
        .Range("A5:A" & lUltRiga) = .Range("A5:A" & lUltRiga).Value
      End With



  • di nichicanta data: 04/03/2014 15:33:49

    Non avvevo dubbi era solo ed esclusivamente questione di tempo ( mi riferisco alla tua risposta al quesito posto).
    Grazie Gro, cosa dire ancora, siete splendidi e fantastici.