Reorganisation automatique d'un tableau sous conditions

Bonjour a tous,

Je cherche a realiser quelque chose qui me semble assez simple mais sur lequel je bute.

Je veux reorganiser un tableau sous forme de "liste".

En fait je veux que sur chaque ligne du deuxieme tableau (situe sur une seconde feuille), j'ai le nom du site, le nom de la condition, l'etat de la condition, et le commentaire SI:

  • l'etat de la condition est "Non", OU SI
  • la condition est "Oui" OU "NA" ET il y a un commentaire.

Et ceci pour tous les sites et toutes les conditions. Il y aura environ 100 conditions et egalement une centaine de sites (mais cela pourra etre variable).

Les etats ne sont que "Oui", "Non" ou "NA".

A l'origine le premier tableau est vide, et l'utilisateur fera un copier/coller des donnees dedans. L'idee est que le second tableau se cree automatiquement une fois que le premier est rempli par l'utilisateur.

Je mets le fichier en piece jointe. Je suis sur Excel 2007.

Merci beaucoup de votre aide !

(desole pour les accents, je suis sur un clavier qwerty).

A+

16book1.xlsx (9.01 Ko)

Bonjour,

Voir fichier.

ALT F11 pour ouvrir l'éditeur VBE et voir module 'modNormaliserTableau'.

Cdlt.

28book1.xlsm (25.34 Ko)
Option Explicit
Option Private Module
Public Sub Normaliser_tableau()
' declaration des variables
Dim wss As Worksheet, wsd As Worksheet
Dim lastRow As Long, lRow As Long, lRow2 As Long
Dim lastCol As Integer, iCol As Integer
Dim lo As ListObject
    ' gel de l'affichage durant la procédure
    Application.ScreenUpdating = False
    ' Initialisation des variables
    Set wss = Worksheets("Feuille 1")    ' source
    Set wsd = Worksheets("Feuille 2")    ' destination
    ' efffacement des données existantes
    With wsd
        .Cells.Clear
        .[A1:D1] = Array("Nom site", "Condition", "Etat", "Commentaire")
    End With
    ' normalisation des données initiales en tableau normalisé
    With wss
        lastRow = .Cells(Rows.Count, 1).End(xlUp).Row
        lastCol = .Cells(1, Columns.Count).End(xlToLeft).Column
        lRow2 = 2
        For lRow = 2 To lastRow
            For iCol = 2 To lastCol Step 2
                wsd.Cells(lRow2, 1) = .Cells(lRow, 1)               ' site
                wsd.Cells(lRow2, 2) = Right(.Cells(1, iCol), 1)     ' condition
                wsd.Cells(lRow2, 3) = .Cells(lRow, iCol)            ' état
                wsd.Cells(lRow2, 4) = .Cells(lRow, iCol + 1)        ' commentaire
                lRow2 = lRow2 + 1
            Next iCol
        Next lRow
    End With
    ' creation tableau Excel 2007
    Set lo = wsd.ListObjects.Add(xlSrcRange, wsd.Range("A1").CurrentRegion, , xlYes)
    ' mise forme tableau
    With lo
        .Name = "tblDonnees"
        .TableStyle = ""
        .Comment = ""
        .HeaderRowRange.Font.Bold = True
    End With
    ' selection de la feuille destination (Feuille 2)
    wsd.Activate
    Cells(1, 1).Select
    ' reinitialisation des variables
    Set wss = Nothing: Set wsd = Nothing: Set lo = Nothing

End Sub

Merci merci beaucoup c'est nickel !!!

Petite question: a quoi sert cette fonction ?

Right(.Cells(1, iCol), 1)

Quand j'ai adapte ce module a mon tableau qui etait un peu plus complique j'ai du la remplacer par seulement

.Cells(1, iCol) 

pour que ca m'affiche correctement le nom de la condition.

Merci encore c'est genial !!

Rechercher des sujets similaires à "reorganisation automatique tableau conditions"