Rapport de message :*
 

Re: Suivie de dossier

Titre du sujet : Re: Suivie de dossier
par myDearFriend! le 27/05/2010 22:01:53

Bien, vodkaddict, tu trouveras ci-joint mon interprétation de la situation.

J'ai utilisé le code VBA suivant :

DANS LE MODULE DE CODE DE L'OBJET THISWORKBOOK
Option Explicit
' myDearFriend!  -  www.mdf-xlpages.com

Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
    If Not Application.Intersect(Target, Sh.Columns(1), Sh.UsedRange) Is Nothing And UCase(Target.Value) = "OK" Then
        Cancel = True
        Traitement Sh.Index, Target.Row
    End If
End Sub
 
DANS UN MODULE DE CODE STANDARD
Option Explicit
' myDearFriend!  -  www.mdf-xlpages.com
Sub Traitement(F As Byte, Lsource As Long)
Dim TabSource As Variant
Dim Lcible As Long
Dim C As Integer, Ccible As Integer
    'Mémorise le tableau source
    With Sheets(F)
        TabSource = Application.Intersect(.UsedRange, .Rows("5:10000")).Formula
    End With
    With Sheets(F).Next
        'Détermine la première ligne libre dans le tableau cible
        Lcible = .Cells(.Rows.Count, 5).End(xlUp).Row + 1
        'Pour chaque colonne du tableau source
        For C = 1 To UBound(TabSource, 2)
            If TabSource(1, C) <> "Validation" Then
                'Cherche l'entête équivalente
                Ccible = .Rows(5).Find(What:=TabSource(1, C), LookAt:=xlWhole).Column
                'Recopie les données dans le tableau cible
                .Cells(Lcible, Ccible).Formula = TabSource(Lsource - 4, C)
            End If
        Next C
        .Activate
    End With
    'Efface l'ancienne ligne du tableau source
    Sheets(F).Rows(Lsource).SpecialCells(xlCellTypeConstants, 23).ClearContents
End Sub
Finalement, peu de lignes de code suffisent si le projet est construit en prenant en compte les contraintes liées à l'automatisme VBA.

Pour réaliser le fichier joint, le plus long pour moi (trop long !) ce fut de reconstruire tes tableaux pour en avoir déjà un par onglet, mais aussi, pour supprimer toutes les cellules fusionnées que tu avais dispersées un peu partout.

Une chose à retenir vodkaddict : les cellules fusionnées, c'est l'ennemi des macros ! C'est même souvent l'ennemi des formules aussi, bref c'est à proscrire.
Souvent, la fusion de cellules ne sert à rien si ce n'est qu'à être utilisée à des fins esthétiques. Or dans ce dernier cas, ça peut être avantageusement remplacé en utilisant simplement l'option d'alignement horizontal de texte "centré sur plusieurs colonnes" (c'est ce que j'ai fait dans la pièce jointe).

Par ailleurs, pour que cette macro fonctionne, les entêtes de colonne :
- doivent être impérativement en ligne n° 5 sur chaque onglet.
- doivent comporter des libellés "uniques" (sans doublon dans un même tableau) : par exemple, pour le libellé "Version" qu'on retrouvait dans plusieurs colonnes, je l'ai modifié en "Version DC", "Version CCA", "Version BJ", etc... pour n'obtenir que des entêtes uniques et reconnaissables par la macro.
- dans chaque onglet, on retrouvera ces mêmes libellés écrits exactement de la même façon (attention donc aux minuscules, majuscules et aux éventuels caractères espaces résiduels, sous peine de plantage).

J'espère que ça correspondra à ce que tu cherches...

Cordialement,