Condividi:        

composizione assemblea

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

composizione assemblea

Postdi lorenzo.casali » 26/06/17 18:04

ciao, dovrei comporre automaticamente un file word con i dati dell'assemblea dei soci.
dal foglio "elenco tadamon" nel file "prova"(allegato) sulle cui colonne "N" e "O" sono riportati i marcatori relativi ai soci, dovrei estrarre i nomi/cognomi e riportarli, accorpati per marcatore, nel file word (Allegato) che riepiloga l'assemblea.
ho una bozza di macro che lancio dal foglio "pannello controllo"dentro il file "prova" .... (nome: assemblea)
Sapreste indicarmi come incrementarla?
Grazie.
ciao
http://www.filedropper.com/prova_24 (elenco)
http://www.filedropper.com/assembleabil ... ione2017_1 (verbale assemblea)
lorenzo.casali
Utente Junior
 
Post: 24
Iscritto il: 05/07/16 15:25

Sponsor
 

Re: composizione assemblea

Postdi alfrimpa » 26/06/17 20:40

Ciao Lorenzo

Non conosco per nulla il VBA di Word per cui da questo punto di vista non posso aiutarti.

Se invece si potesse fare tutto in Excel forse qualcosa ne ricaviamo.

Ma i nominativi come devono essere disposti? Uno sotto l'altro o uno di seguito all'altro magari separati da una virgola?
Alfredo

Win7 + Office 2007
Avatar utente
alfrimpa
Utente Senior
 
Post: 1201
Iscritto il: 30/12/13 17:01
Località: Napoli

Re: composizione assemblea

Postdi Anthony47 » 27/06/17 01:11

Una assemblea soci e' un disastro ma fortunatamente si tiene poche volte all'anno quindi ti propongo un lavoro meno automatizzato ma probabilmente idoneo.
Usiamo le colonne R - S per il marcatore PLS.
In R2 metti la formula
Codice: Seleziona tutto
=SE(N2="pls";A2&" "&B2;"")

In S2 metti la formula
Codice: Seleziona tutto
=SE(R2="";SE(S1="";"";S1);SE(S1="";"";S1&"; "))&R2

Lasci S1 vuoto

Poi copi R2:S2 verso il basso; il contenuto dell'ultima cella e' quanto va copiato nel foglio Word alla voce PLS: copi la cella, vai al file Word, selezioni la posizione in cui vuoi incollare; scegli Incolla , Incolla speciale, Incolla collegamento e Testo non formattato.

In altre colonne crei l'elenco per gli altri marcatori, usando formule analoghe, e ne riporti il risultato su Word con procedimento analogo.

In questo modo, compilato il foglio Excel con le presenze e salvato, all'apertura del file Word i valori di Excel dovrebbero essere riportati nel testo del verbale.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: composizione assemblea

Postdi lorenzo.casali » 27/06/17 09:10

intanto grazie,
si i nominativi devono essere separati da virgola...
faccio una prova con quanto consigliatomi e intanto sto facendo dei tentativi per migliorare il codice.
proviamo ......
lorenzo.casali
Utente Junior
 
Post: 24
Iscritto il: 05/07/16 15:25

Re: composizione assemblea

Postdi alfrimpa » 27/06/17 11:27

Ciao Lorenzo

Ti allego file dove ho inserito un foglio "Verbale" che riproduce il documento Word.

Ho poi scritto due function che vanno a recuperare i nominativi dal foglio "ELENCO TADAMON"

Codice: Seleziona tutto
Function PRESENTI(rng As Range, lav As String)
Dim pres As String
Dim cel As Range
Dim scarto As Integer
For Each cel In rng
    If cel.Value = lav Then
        pres = pres & ", " & cel.Offset(0, 4).Value
    End If
Next cel
PRESENTI = Mid(pres, 3, 1000)
End Function

Function PRESENTI_AV(rng As Range, lav As String)
Dim pres As String
Dim cel As Range
For Each cel In rng
    If cel.Value = lav Then
        pres = pres & ", " & cel.Offset(0, 3).Value
    End If
Next cel
PRESENTI_AV = Mid(pres, 3, 1000)
End Function


Guardalo un po' e fai sapere.

http://www.filedropper.com/lorenzocasali
Alfredo

Win7 + Office 2007
Avatar utente
alfrimpa
Utente Senior
 
Post: 1201
Iscritto il: 30/12/13 17:01
Località: Napoli

Re: composizione assemblea

Postdi lorenzo.casali » 29/06/17 16:48

grazie
sto facendo delle prove ....
lorenzo.casali
Utente Junior
 
Post: 24
Iscritto il: 05/07/16 15:25

Re: composizione assemblea

Postdi grog05 » 30/06/17 21:06

propongo una versione che usa

nei riferimenti microsoft word XX object library

una matrice statica bidimesionale per gestire i gruppi

la funzione insertAfter abinati ai segnalibri di word

ecco il codice

Codice: Seleziona tutto
Option Compare Binary
Option Explicit

Public Sub Matrice()

' Metodo che utilizza matrici per gestire i tipi di soci
        ' Definisco costanti i tipi, possibile aggiungerne
    Const cTipo = "PLS,AL,PLDN,PLD,AV"
        ' Parte da 0, numero tipi (AGGIORNARE A MANO)
    Const cNTp = 4
   
        ' Dichiaro una matrice dinamica
    Dim aGroup() As String
    Dim i As Integer
    Dim colIndex As Integer
    Dim rwIndex As Integer
    Dim UltimaRigaX As Long
    Dim sTipoCell As String
    Dim sContentCell As String
   
    Dim dPath As String
    Dim myFile As String
   
   
    Dim oWordApp As Word.Application 'L'applicazione Word
    Dim oDoc As Word.Document 'Documento
    Dim oRange As Word.Range 'Oggetto Range
   
        ' assegno
    myFile = "AssembleaBM.dotx"
    colIndex = 14
    rwIndex = 2

        ' INSERISCE IL PERCORSO CORRETTO
        ' basandosi di dove si trova il programma di excell
    dPath = Application.ActiveWorkbook.Path & "\" 'Percorso File
   
        ' Controllo esistenza del file dotx
    If Dir(dPath & myFile) = "" Then Exit Sub
   
        ' Calcolo le righe usate del foglio
    UltimaRigaX = Sheets("ELENCO TADAMON").Range("A1").End(xlDown).Row
   
        ' Inserisco le sigle dei tipi nella matrice
    aGroup() = Split(cTipo, ",")
       
        ' Dimensiono una matrice statica
    Dim aNomi(cNTp, 1) As String
   
    For i = 0 To cNTp
        'Debug.Print aGroup(i)
            ' Assegno le lettere del gruppo
            ' dalla matrice monodimensionale
            ' alla matrice bidimensionale
        aNomi(i, 0) = aGroup(i)
       
        'Debug.Print aNomi(i, 0)
    Next
   
        ' Elimino la matrice che non serve +
    Erase aGroup()
   
        ' Scorro tutte le righe in cerca di codici tipo
    Do While rwIndex <= UltimaRigaX
       
        With Worksheets("ELENCO TADAMON")
            sTipoCell = .Cells(rwIndex, colIndex).Value
            sContentCell = .Cells(rwIndex, 7).Value
        End With
                ' Controllo se nella riga c'è un codice tipo
                ' sltrimenti salta alla prossima
            If sTipoCell > "" Then
           
                'Debug.Print "cel. " & rwIndex & " " & sTipoCell
           
                    ' Cerco in quale array devo memorizzare i nomi
                For i = 0 To cNTp
                   
                        ' Cerco la matrice col codice tipo nel 1° campo
                        ' per memorizzare i nomi nel 2° (sempre -1 che parte da 0)
                    If aNomi(i, 0) = sTipoCell Then
                        aNomi(i, 1) = aNomi(i, 1) & sContentCell
                        Exit For
                    End If
                Next
            End If
       
        rwIndex = rwIndex + 1
       
    Loop ' ripete il ciclo

    ' Seconda parte
   
        'istanzio un nuovo oggetto Word.Application
    Set oWordApp = New Word.Application
        'Rendo invisibile l'instanza
    'oWordApp.Visible = False
        'oppure visibile
    oWordApp.Visible = True
        'per massimizzare la finestra di word
    oWordApp.WindowState = wdWindowStateMaximize
       
        'apro il documento Assemblea
    Set oDoc = oWordApp.Documents.Open(dPath & myFile)
   
        ' Cerchiamo i marcatori
    For i = 0 To cNTp
        If aNomi(i, 1) = "" Then
            aNomi(i, 1) = "Nessun socio"
        Else
            aNomi(i, 1) = Left(aNomi(i, 1), Len(aNomi(i, 1)) - 2)
        End If
       
        'Debug.Print aNomi(i, 0) ' gruppo
        'Debug.Print aNomi(i, 1) ' nomi
       
   
            ' Seleziona il BoookMark con nome del marcatore
        Set oRange = oWordApp.ActiveDocument.Bookmarks(aNomi(i, 0)).Range
            ' Inserisce il testo
        oRange.InsertAfter aNomi(i, 1)
        Set oRange = Nothing
    Next
   
        ' Salviamo con nome
    oDoc.SaveAs Filename:=dPath & "PrintOut_Assemblea"
   
        ' Chiudiamo word
    oWordApp.Quit
   
        ' Eliminiamo oggetti
    Set oDoc = Nothing
    Set oWordApp = Nothing
   
        ' Fine
    MsgBox ("Completato...in TOT secondi")

End Sub

grog05
Newbie
 
Post: 1
Iscritto il: 30/06/17 20:44

Re: composizione assemblea

Postdi Anthony47 » 01/07/17 21:09

Buon giorno grog05, grazie per aver pubblicato la tua bella soluzione; speriamo che Lorenzo la possa sfruttare bene...
A presto!
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: composizione assemblea

Postdi lorenzo.casali » 04/07/17 16:24

usata. grazie mille grog05 !!
funziona perfettamente !!!
lorenzo.casali
Utente Junior
 
Post: 24
Iscritto il: 05/07/16 15:25


Torna a Applicazioni Office Windows


Topic correlati a "composizione assemblea":


Chi c’è in linea

Visitano il forum: Nessuno e 31 ospiti