Aiuto Macro



  • Aiuto Macro
    di Joyfult (utente non iscritto) data: 01/05/2014 01:24:30

    Salve a tutti,

    Vorrei una mano in creare una macro che da una colonna mi selezioni solamente le celle "piene" e mi copi il contenuto in un altro foglio. Oltre al contenuto delle celle piene, ho bisogno che mi copi anche il valore corrispondente che si trova nella colonna adiacente. Esempio:
    colonna A e colonna B
    selezionare le celle "piene" della colonna B e copiarle (insieme al contenuto della stessa riga però della colonna A).

    Spero mi possiate aiutare.

    Grazie in anticipo!



  • di Mister_x (utente non iscritto) data: 01/05/2014 01:58:33

    ciao

    da mettere nel foglio dove devi copiare i dati
    destinazione al foglio2

    ciao

     
    Sub copia1_scrive2()
    Dim i As Long
    Dim nriga As Long
    nriga = 1
    For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row
     If Cells(i, 2) <> "" Then
      Sheets(2).Cells(nriga, 1) = Cells(i, 1)
      Sheets(2).Cells(nriga, 2) = Cells(i, 2)
      nriga = nriga + 1
     End If
    Next i
    End Sub





  • Aiuto Macro
    di Joyfult (utente non iscritto) data: 01/05/2014 04:59:53

    Grazie per l'aiuto, però la macro mi copia tutte le celle nel foglio 2 (piene o non piene).
    Per il momento la mia macro è questa:

    Range("A4:B4").Select
    Selection.Copy
    Sheets("Foglio2").Select
    Range("A65536").End(xlUp).Offset(1, 0).Select
    With ActiveCell
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
    End With
    Range("A1").Select
    Sheets("Foglio1").Select
    Range("A2").Select
    End Sub

    Però mi permette di copiare nel secondo foglio solamente i valori presenti nel range A4:B4 (del foglio1).
    Avrei bisogno della stessa macro, però che automaticamente mi selezioni (e copi nel foglio2) SOLAMENTE le celle piene della colonna B e le corrispondenti della colonna A (del foglio1).

    Grazie!



  • di lepat (utente non iscritto) data: 01/05/2014 08:09:39

    allega un file di esempio con anche il risultato desiderato, secondo me la macro di Mister_x è corretta, è inutile che tu ripeta la richiesta senza spiegare cosa non ti va bene


  • Aiuto Macro
    di Joyfult (utente non iscritto) data: 01/05/2014 14:44:08

    Salve,

    La macro funziona benissimo (scusate ma ieri l'ho provata senza metterci troppa attenzione).
    Per far si che mi copi i dati nel foglio2 nella prima cella vuota (per creare un elenco), cosa dovrei aggiungere?

    Grazie e scusate ancora.



  • di Mister_x (utente non iscritto) data: 01/05/2014 17:23:26

    ciao

    visto che la calma e' la virtu' dei forti!!

    alla sub() in questione ho aggiunto un rilevamento del numero di riga e un controllo della riga

    ciao
     
    Sub copia1_scrive2()
    Dim i As Long
    Dim nriga As Long
    nriga = Sheets(2).Cells(Rows.Count, 1).End(xlUp).Row ''Rilevamento numero riga
    If nriga > 1 Then nriga = nriga + 1  ''controlla se e' la riga numero 1
    For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row
     If Cells(i, 2) <> "" Then
      Sheets(2).Cells(nriga, 1) = Cells(i, 1)
      Sheets(2).Cells(nriga, 2) = Cells(i, 2)
      nriga = nriga + 1
     End If
    Next i
    End Sub





  • Aiuto Macro
    di Joyfult (utente non iscritto) data: 01/05/2014 18:24:58

    Grazie mille Mister_x

    Da comune mortale, ti chiederei perfavore la spiegazione della macro.
    Sto cercando di imparare a programmare in VBA e se conosci un corso gratis online con/o senza video, ti sarei molto, ma molto grato.

    Grazie ancora.

    Saluti


  • Aiuto Macro
    di Joyfult (utente non iscritto) data: 01/05/2014 19:05:43

    Mister_x scusami ma la tua macro funziona perfettamente in un nuovo file excel, però quando la implemento nel mio, copia i valori in tutt'altra parte. Potresti cortesemnte spiegarmi la macro così da permetermi di poterla adattare al mio file?

    Grazie per la pazienza

    Saluti



  • di alfrimpa (utente non iscritto) data: 01/05/2014 19:16:20

    Ciao Joyfult

    Di video corsi su Excel su Youtube ce ne sono molti (basta semplicemente cercarli). Molti di meno sono quelli specifici sul vba e tra questi sono ancora meno quelli in italiano (comunque qualcosa c'è).

    In alternativa, puoi andare sul sito archi.forumup.it (mi è impossibile inserire qui il link diretto) e nella sezione Programmazione e corsi VBA troverai un corso articolato in molte lezioni che a mio avviso ti potrà essere utile.

    Il mio consiglio è comunque quello di acquistare qualche buon testo (su Amazon ne trovi a decine) e cominciare a studiare

    Alfredo





  • di Mister_x (utente non iscritto) data: 01/05/2014 19:25:08

    ciao

    quando sei nella Home-page, guarda in fondo che trovi - Corso base excel VBA - clicca su quella frase e ti si aprira' una maschera da dove potrai cominciare ad avvicinarti al VBA com molte lezioni teoriche pratiche e altre utilita'

    parti da quiì e segui sempre gli interventi che vengono fatti , cercando di capire la struttura della sub() proposta
    PS sappi a priori che le vie per arrivare al dunque sono molte, bisogna pero' cercare la piu breve

    spiegare la sub()
    Sub copia1_scrive2()
    Dim i As Long
    Dim nriga As Long
    indicizzo le variabili--------------------
    nriga = Sheets(2).Cells(Rows.Count, 1).End(xlUp).Row ''Rilevamento numero riga
    If nriga > 1 Then nriga = nriga + 1 ''controlla se e' la riga numero 1
    conto le righe occupate in foglio2 colonna A e se la riga occupata e' maggire di 1 aggiungo una riga altrimenti quando riporto i dati scrivo sopra all'ultima
    -------------------
    creo un ciclo for
    For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row
    non sapendo quante sono le righe da visionare con --Cells(Rows.Count, 1).End(xlUp).Row-- rilevo quante sono per stabilire quanti step il ciclo for deve fare
    -------------------- e qui controllo se la cella di colonna B in riga x e' nulla o occupata
    If Cells(i, 2) <> "" Then
    Sheets(2).Cells(nriga, 1) = Cells(i, 1)
    Sheets(2).Cells(nriga, 2) = Cells(i, 2)
    nriga = nriga + 1
    End If
    se in quella cella e' compreso un valore co copio in foglio2 altrimenti se la cella e' nulla salto il passaggio

    comunque tutto questo lo troverai nelle lezioni che farai
    PS non avere fretta, ricordati che non si smette mai di imparare e se trovi problemi esponili che qualcuno troverai sempre ad aiutarti a proseguire

    ciao






  • Aiuto Macro
    di Joyfult (utente non iscritto) data: 02/05/2014 00:29:47

    Mister_X, sono riuscito ad utilizzare la tua macro nel mio file.
    Solamente una cosa ancora non quadra:

    Quando la utilizzo la prima volta, la macro funziona alla perfezione, però quando per esempio, cambio i valori nella colonna B (del foglio1) e utilizzo nuovamente la macro per continuare l'elenco nella prima cella vuota del foglio2, la macro mi copia anche l'intestazione (il titolo) delle colonne A e B del foglio 1.

    Non so se sono riuscito a spiegarmi bene.

    Grazie.


  • Aiuto Macro
    di Joyfult (utente non iscritto) data: 02/05/2014 07:22:04

    Mister_x, voglio solamente essere il più preciso e descrittivo possibile:
    Nel foglio1 ho 2 colonne con 2 titoli: Colonna A, cella A1 (prodotto) e Colonna B, cella B1 (quantità).
    I dati iniziano rispettivamente dalle celle A2 e B2.
    Quando utilizzo la tua macro la prima volta, mi copia perfettamente i valori, mentre utilizzandola una seconda o terza ecc.. volta, mi copia "anche" i titoli delle 2 colonne (prodotto e quantità).
    Sinceramente non riesco a capire il perchè.
    Cortesemente, ho bisogno dinuovo del tuo prezioso aiuto.

    Come sempre ti ringrazio.

    Saluti



  • di lepat (utente non iscritto) data: 02/05/2014 07:44:44

    prova così:
     
    Sub copia1_scrive2()
    Dim i As Long
    Dim nriga As Long
    nriga = Sheets(2).Cells(Rows.Count, 1).End(xlUp).Row ''Rilevamento numero riga
    rigainizio = 1
    If nriga > 1 Then 
      nriga = nriga + 1  ''controlla se e' la riga numero 1
      rigainizio = 2
    end if
    For i = rigainizio To Cells(Rows.Count, 1).End(xlUp).Row
     If Cells(i, 2) <> "" Then
      Sheets(2).Cells(nriga, 1) = Cells(i, 1)
      Sheets(2).Cells(nriga, 2) = Cells(i, 2)
      nriga = nriga + 1
     End If
    Next i
    End Sub


  • Aiuto Macro
    di Joyfult (utente non iscritto) data: 02/05/2014 15:08:42

    Grazie lepat, ha funzionato.
    Peró ancora non mi spiego perché la prima volta che si utilizza la macro, fa il suo dovere e dalla seconda volta in poi, no.
    Saresti cosí gentile da spiegrmelo, perfavore?
    Se puoi, spiegami anche la modifica che hai apportato a la macro.

    Grazie ancora.

    Saluti


  • Aiuto Macro
    di Joyfult (utente non iscritto) data: 02/05/2014 21:45:01

    Volevo solamente ringraziare tutti per l'aiuto e mettere la spunta di risolto al thread.
    P.S. Se qualcuno di buon cuore puó spiegarmi perché la prima volta che si utilizzava la macro, faceva il suo dovere e dalla seconda volta in poi, no, gli sarei molto grato.
    E se mi spiegate anche l'ultima modifica apportata a la macro, ancora meglio.

    Saluti



  • di Vecchio Frac data: 03/05/2014 13:17:48

    cit. Regolamento:
    "3) Oggetto delle discussioni
    Il titolo delle discussioni deve essere chiaro, sintetico, significativo e non generico.
    I titoli devono solo dare l'idea dell'argomento che riguarda il problema e non devono contenere domande o parole inutili come "aiuto", "help", "urgente" o "domanda". Nell'apposito spazio si può specificare anche la versione dell'applicativo in uso.
    Così facendo si può ottenere una risposta più immediata al problema e si migliora la rintracciabilità della discussione mediante il motore di ricerca."





  • di Joyfult (utente non iscritto) data: 03/05/2014 13:37:26

    Scusa Vecchio Frac, no si ripeterà.

    Grazie.



  • di lepat (utente non iscritto) data: 03/05/2014 13:58:31

    la prima volta vuoi copiare le intestazioni, quindi rigainizio = 1, le volte seguenti non vuoi le intestazioni, quindi devi inserire in controllo su nriga in modo da capire se è la prima volta o no.


  • Aiuto Macro
    di Joyfult (utente non iscritto) data: 05/05/2014 18:25:55

    Salve, ho transformato l'elenco dove la macro copia i file in una tabella ed adesso la macro mi copia i valori saltando una riga (la prima).

    Alcun suggerimento?

    Grazie.



  • di Vecchio Frac data: 05/05/2014 22:19:42

    Una soluzione alternativa.
    Mi raccomando mettete sempre Option Explicit in cima ai moduli.
     
    Option Explicit
    
    Sub copia1_scrive2_vfrac()
    Dim j As Long, ac As Range
    
        j = 0
        Foglio2.Range("A:B").ClearContents
        With Foglio1
            For Each ac In .Range(.Cells(1, "B"), .Cells([COUNTA(A:A)], "B"))
                If Trim(ac) <> "" Then
                    j = j + 1
                    Foglio2.Cells(j, "A") = ac.Offset(, -1)
                    Foglio2.Cells(j, "B") = ac
                End If
            Next
        End With
        
    End Sub






  • di Joyfult (utente non iscritto) data: 05/05/2014 22:45:44

    Vecchi frac, con questa nuova macro quando copio i dati la prima volta, funziona perfettamente, peró quando la utilizzo una seconda o terza volta, inizia sempre a copiarli sulla prima riga (A2:B2) (e non sulla prima riga "vuota" in sequenza).

    Saluti



  • di Vecchio Frac data: 05/05/2014 23:34:39

    Eccoti la modifica richiesta.
     
    Option Explicit
    
    Sub copia1_scrive2_vfrac()
    Dim j As Long, ac As Range
    
        j = [COUNTA(Foglio2!B:B)]
     
        With Foglio1
            For Each ac In .Range(.Cells(1, "B"), .Cells([COUNTA(A:A)], "B"))
                If Trim(ac) <> "" Then
                    j = j + 1
                    Foglio2.Cells(j, "A") = ac.Offset(, -1)
                    Foglio2.Cells(j, "B") = ac
                End If
            Next
        End With
        
    End Sub






  • di Joyfult (utente non iscritto) data: 05/05/2014 23:57:37

    Vecchio frac, la modifica non funziona. Mi copia sempre nella prima riga (non vuota) e adesso copia anche le intestazioni delle colonne A e B del foglio1.
    Hai dato un occhiata al file che ho allegato all'altro thread? come ti sembra? é possibile migliorarlo ulteriormente?

    Grazie.



  • di Joyfult (utente non iscritto) data: 06/05/2014 15:14:11

    Ci sono novitá?
    Per favore, perché é un file che sto trattando di implementare al lavoro.

    Grazie!



  • di Vecchio Frac data: 06/05/2014 16:57:53

    Davvero strano, a me funziona con il file di esempio che hai postato.
    Riallego il file con le mie modifiche ("Cartel1_vfrac.rar").
    Variando i dati, questi si posizionano correttamente in coda a quelli esistenti nel foglio2.






  • di Joyfult (utente non iscritto) data: 07/05/2014 15:11:40

    Vecchio frac, potresti gentilmente controllare il file che metto in allegato (file3.xls)?
    Ho abbandonato l'idea di usare la macro. Sto provando la doppia convalikda dei dati.
    Ti spiego il problema: nel foglio elaborazione requerimiento (il file é in spagnolo), nella colonna F (stock proyectado), vorrei utilizzare la formula cerca.vert per cercare (come riferimento) il valore della colonna C (articulo) nel foglio "listado productos" e riportare il valore della colonna F del foglio listado productos (consumo diario x pax), peró per una ragione a me sconosciuta, non funziona.

    Puoi dargli un occhiata perfavore?

    Grazie



  • di Joyfult (utente non iscritto) data: 07/05/2014 20:12:57

    Perfavore ragazzi, se qualcuno puó aiutsrmi con il file3.xls che ho allegato, ve ne sarei grato, perché é un file che utilizzo al lavoro.

    Grazie.

    Saluti



  • di Joyfult (utente non iscritto) data: 07/05/2014 23:59:04

    Ragazzi, per favore se possibile, aiutatemi.
    Mi manca davvero poco per completare il file e semplificare un pó il lavoro.

    Grazie per la pazienza.



  • di Joyfult (utente non iscritto) data: 08/05/2014 06:05:20

    Help me please..



  • di lepat (utente non iscritto) data: 08/05/2014 06:23:50

    leggi bene la guida h t t p://office.microsoft.com/it-it/excel-help/cerca-vert-HP005209335.aspx
    CERCA.VERT
    Cerca un valore nella PRIMA colonna di una matrice tabella e restituisce un valore sulla stessa riga in un'altra colonna della matrice tabella.



  • di Textomb data: 08/05/2014 08:47:15

    il CERCA.VERT non funziona per come lo hai interpretato per due ragioni.
    1) la colonna dei valori su cui cercare il riferimento deve essere in ordine crescente.
    2) il riferimento va cercato nella prima colonna della matrice tabella.
    Come suggerito da lepat leggi bene la guidi in linea che è abbastanza esaustiva.
    In questo caso quindi dovresti usare un'altra formula più appropriata:
    nella cella F2 del foglio Elaborazione Requerimento e poi trascini in basso.
    ciao
     
    =SE.ERRORE(SCARTO(INDICE('LISTADO PRODUCTOS'!$C$2:$C$98;CONFRONTA('ELABORAZIONE REQUERIMIENTO'!C2;'LISTADO PRODUCTOS'!$C$2:$C$98;0););0;3);"")



  • di Joyfult (utente non iscritto) data: 08/05/2014 16:41:53

    Ragazzi grazie mille per l'aiuto!
    Come potete vedere dal codice che sto postando, sto cercando di eseguire una sottrazione all'interno della stessa formula concatenata. Peró controllando il risultato finale, non é corretto. Ë come se sbagliasse la sottrazione.

    Come sempre, perfavore, aiutatemi.

    Grazie.
     
    =SI.ERROR(SI(E2-DESREF(INDICE('LISTADO PRODUCTOS'!$A$2:$F$98,COINCIDIR('ELABORAZIONE REQUERIMIENTO'!C2,'LISTADO PRODUCTOS'!$C$2:$C$98,0),),0,3)*$J$2*$L$2<0,0,E2-DESREF(INDICE('LISTADO PRODUCTOS'!$A$2:$F$98,COINCIDIR('ELABORAZIONE REQUERIMIENTO'!C2,'LISTADO PRODUCTOS'!$C$2:$C$98,0),),0,3))*$J$2*$L$2,"")



  • di Textomb data: 08/05/2014 17:18:17

    Secondo me manca una parentesi prima delle E2 nella seconda parte della formula...
    Te la ripropongo (in italiano) leggermente modificata ma con il medesimo significato.
     
    =SE(E2-(INDICE('LISTADO PRODUCTOS'!$C$2:$F$98;CONFRONTA('ELABORAZIONE REQUERIMIENTO'!C2;'LISTADO PRODUCTOS'!$C$2:$C$98;0);4))<0;0;(E2-INDICE('LISTADO PRODUCTOS'!$C$2:$F$98;CONFRONTA('ELABORAZIONE REQUERIMIENTO'!C2;'LISTADO PRODUCTOS'!$C$2:$C$98;0);4))*$J$2*$L$2)



  • di Joyfult (utente non iscritto) data: 09/05/2014 21:23:22

    Grazie a tutti per l'aiuto.
    Ho risolto i miei problemi riguardo il file per il lavoro.
    Se mi verrá in mente qualche altra cosa per migliorarlo e non sapró come fare, vi importuneró nuovamente.

    Grazie ancora.

    Saluti