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+
Bonjour,
Voir fichier.
ALT F11 pour ouvrir l'éditeur VBE et voir module 'modNormaliserTableau'.
Cdlt.
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 SubMerci 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 !!