macro in vba



  • macro in vba
    di francesca (utente non iscritto) data: 14/10/2015 19:03:13

    ciao a tutti, è la prima volta che scrivo ma ho un bisogno DISPERATO DI AIUTO. Devo scrivere una macro che conta il numero di movimenti fatti per l'alimentazione di una linea, mi spiego meglio il mio file è fatto cosi:

    id Movimento| Data iniziale del movimento | Data finale del movimento| Codice | Causale di movimento|

    Vorrei creare una macro che conta i movimenti quindi la data di movimento dei codici con causale "SCARICO" e "RESO" separatamente. potete aiutarmi?



  • di alfrimpa data: 14/10/2015 19:34:50

    Ciao Francesca benvenuta e non disperare

    Ma non è ti può essere utile/sufficiente la funzione CONTA.SE()?

    Comunque la prima cosa che devi fare è quella di allegare un tuo file di esempio (senza dati sensibili) che riproduca la tua situazione ed ove mostri (magari inserito manualmente) il risultato che vuoi ottenere.

    Alfredo




  • la mia prima macro
    di francesca (utente non iscritto) data: 14/10/2015 21:35:26

    ciao Alfredo, grazie mille per la tua risposta è la prima macro che faccio e credevo fossero più semplici. il file che ho io è ad esempio questo:

    | Data iniziale del movimento | Data finale del movimento| Codice | Causale di movimento|
    25/09/2014 08:38 25/09/2014 08:38 ciao SCARICO LINEA
    25/09/2014 09:11 25/09/2014 09:13 pippo SPOSTA MAG
    ... ... ... RESO



    Di seguito ho riportato il codice che ho scritto, ovviamente non funziona, adesso provo a capire come scrivere una funzione CONTA SE come tu mi hai suggerito, io ho basi di java infatti credo di aver mischiato quello con vba. Ciò che voglio fare è contare gli SCARICHI in LINEA e i RESI LINEA separatamente.
     
    Sub movimenti()
    
    Dim Foglio1 As Worksheet
    
    For Each Worksheet In Worksheets
    If Worksheet.Name = "Foglio1" Then
    Set Foglio1 = Worksheet
    End If
    Next
    
    Dim count, i, j As Integer
    count = 2
    i = 1
    j = 0
    
    While Foglio1.Cells(conut, 3).Value <> ""
    If Foglio1.Cells(16, i).Value = "SCARICO LINEA" Then
    i = i + 1
    End If
    
    If Foglio1.Cells(16, i).Value = "RESO LINEA" Then
    j = j + 1
    End If
    
    Wend
    
    
    End Sub
    



  • di alfrimpa data: 14/10/2015 22:45:15

    Ciao Francesca

    Mi vedo costretto a ribadirti l'invito ad allegare un file di Excel con una o due decine di record (anche inventati) e sulla base di questi quali risultati ti attendi dalla macro.

    Forse mi sbaglio ma ho la sensazione che la cosa si possa anche risolvere con le sole formule, ma senza un file "coerente" con la tua situazion è difficile dire di più.

    Alfredo





  • di francesca (utente non iscritto) data: 15/10/2015 09:33:44

    buongiorno, ti ho caricato un file d'esempio come mi hai chiesto! Comunque devo per forza scrivere una macro perchè così mi è stato chiesto.
    Dalla macro mi attendo che mi vada a calcolare in numero degli SCARICHI LINEA e il numero dei RESI LINEA separatamente.



  • di alfrimpa data: 15/10/2015 11:13:07

    Ciao Francesca forse non ho capito io bene la tua richiesta ma ti allego file in cui tramite un CONTA.SE() ho il conteggio per ciascuna delle sottoindicate voci

    SPOSTA MAG-
    SPOSTA MAG +
    SCARICO LINEA
    RESO DA LINEA
    RIFORNIMENTO LINEE
    CARICO LINEA
    RICEVIMENTO LIBERO
    RICEVIMENTO MERCE
    RETTIFICA RICEVIMENTO MERCE

    Probabilmente l'ho fatta troppo facile; se non è questo che volevi cerca di spiegare meglio.

    Alfredo






  • di patel data: 17/10/2015 11:10:52

    prova questa 

    devi stare più attenta a ciò che scrivi, hai scritto conut invece che count, RESI LINEA invece che RESO DA LINEA
     
    Sub movimenti()
    riga = 2
    While Cells(riga, "F").Value <> ""
    If Cells(riga, "F").Value = "SCARICO LINEA" Then
      i = i + 1
    End If
    If Cells(riga, "F").Value = "RESO DA LINEA" Then
      j = j + 1
    End If
    riga = riga + 1
    Wend
    MsgBox "scarico " & i & " - Reso " & j
    End Sub






  • di francesca (utente non iscritto) data: 17/10/2015 11:39:35

    grazie mille delle vostre riposte. ho scritto questo codice ma mi dice "necessario oggetto" che cosa vuol dire?
     
    Sub movimenti()
    
    Worksheets("Foglio1").Activate
    
    
    i = 2
    contascarico = 0
    contareso = 0
    
    
    ActiveSheets.Cells(i, 18).Select
    
    Do Until Active.Cell.Text = ""
       
       If ActiveCell.Text = "SCARICO LINEA" Then
       contascarico = contascarico + 1
       End If
       
       If ActiveCell.Text = "RESO DA LINEA" Then
       contareso = contareso + 1
       End If
       
       i = i + 1
    
       ActiveSheet.Cells(i, 18).Select
       
    Loop
    
    ActiveSheet.Cells(6, 55).Select
    Cells(7, 55) = contascarico
    Cells(8, 55) = contareso
    
       
    End Sub
    
    
    
    



  • di Albatros54 data: 17/10/2015 11:55:52

    Do Until Active.Cell.value = ""

    Do Until ActiveCell.value = ""

    ActiveSheets.Cells(i, 18).Select

    Cells(i, 18).Select
    Ciao
    albatros54





  • di patel data: 17/10/2015 13:06:43

    francesca, mi sembra che vuoi fare un po' troppo come ti pare...
    la prima regola del vba è evitare il più possibile activecell e activesheet





  • di francesca (utente non iscritto) data: 28/10/2015 16:32:10

    Alla fine con una tabella pivot sono riuscita a risolvere, grazie a tutti!! ;)
    Ora avrei un altro problema : dovrei scrivere una macro che per ogni codice mi dica il magazzino logico in cui si trova, la sua scaffalatura, la sua posizione e il suo piano. Riuscite ad aiutarmi?



  • di francesca (utente non iscritto) data: 28/10/2015 16:38:21

    ho intuito che devo scrivere un vettore ma non so come dire alla macro di scrivere dentro a tale vettore.