Trouver cellule non vide

Bonjour à tous,

J'ai un classeur avec un tableau qui contient des informations et je ne souhaite récupérer que les cellules non vides.

Comme un exemple vaut mieux qu'un long discours je vous joint un exemple avec l'onglet contenant le fichier de départ et une deuxième onglet qui contient ce à quoi je souhaite arriver.

La complexité (pour moi) vient du fait qu'il peut y avoir plusieurs montant par ligne et que je souhaite également récupérer le titre de la colonne.

5vba-test.xlsx (14.53 Ko)

Merci pour votre aide,

N'hésitez pas si tout n'est pas très clair.

bonjour

Dans le menu Données/Récupérer données/à partir d'un tableau : Power Query et sa fameuse possibilité de dépivoter (clic droit sur un en-tête de colonne)

voir Power Query Unpivot sur le web

surtout pas de VBA

exemple :

5vba-test.xlsx (23.15 Ko)

note : j'ai naturellement mis les données sous forme de tableau. C'est devenu la norme maintenant.

Merci pour la réponse rapide,

Je connaissais les TCD mais pas le Power Query je vais regarder cela avec attention.

Par contre, je ne suis pas sur que cela corresponde à mon besoin car cet exemple a pour but de s’intégrer dans un module VBA plus complexe.

Le but est de transformer un tableau fourni par un client en un format d'écriture comptable reconnu par notre logiciel.

L'opération étant à répéter toutes les semaines sur une dizaine de société, et faite par des collaborateurs différents et pas tous expert en Excel, je cherche à automatiser au maximum.

Je me permets de relancer.

Est ce que quelqu'un peut arriver au même que JMD résultat mais en VBA ?

Merci d'avance

Bonsoir,

Sub RécupInfos()
    Dim d As Object, Tbl(), tbB, k, n&, i&, j%
    With Worksheets("Initial")
        n = .Cells(.Rows.Count, 1).End(xlUp).Row
        tbB = .Range("A1:I" & n).Value2
    End With
    Set d = CreateObject("Scripting.Dictionary")
    For i = 2 To n
        For j = 5 To 9
            If tbB(i, j) <> "" Then
                k = i & "|" & tbB(1, j)
                d(k) = tbB(i, j)
            End If
        Next j
    Next i
    ReDim Tbl(d.Count, 4): n = 0
    For Each k In d.keys
        n = n + 1
        Tbl(n, 0) = CLng(Split(k, "|")(0))
        Tbl(n, 1) = tbB(Tbl(n, 0), 2)
        Tbl(n, 2) = tbB(Tbl(n, 0), 3)
        Tbl(n, 3) = Split(k, "|")(1)
        Tbl(n, 4) = CDbl(d(k))
    Next k
    k = Split("Num ligne;Num facture;Date facture;Type;Montant", ";")
    For j = 0 To 4
        Tbl(0, j) = k(j)
    Next j
    With Worksheets("Résultat")
        .Range("A1").CurrentRegion.ClearContents
        With .Range("A1").Resize(UBound(Tbl, 1) + 1, 5)
            .Value = Tbl
            .Columns(3).NumberFormat = "dd/mm/yyyy"
            .Columns(5).NumberFormat = "#,##0.00"
        End With
        .Activate
    End With
End Sub

Bouton sur feuille Initial pour tester.

Cordialement.

Bonjour,

Ah, j'suis en retard...

Sub bdd()
    Dim datas, result
    Dim lig As Long, col As Long, nbRubrique As Long, lig2 As Long
    Dim nFact As Long, dateFact As Date
    datas = [A1].CurrentRegion.Value
    nbRubrique = UBound(datas, 2) - 4
    ReDim result(1 To Application.Count(Columns(5).Resize(, nbRubrique)) + 1, 1 To 5)
    For col = 1 To 5
        result(1, col) = Choose(col, "Num Ligne", "Num facture", "Date facture", "Type", "Montant")
    Next col
    lig2 = 1
    For lig = 2 To UBound(datas, 1)
        nFact = datas(lig, 2)
        dateFact = datas(lig, 3)
        For col = 5 To nbRubrique + 4
            If datas(lig, col) <> "" Then
                lig2 = lig2 + 1
                result(lig2, 1) = lig
                result(lig2, 2) = nFact
                result(lig2, 3) = dateFact
                result(lig2, 4) = datas(1, col)
                result(lig2, 5) = datas(lig, col)
            End If
        Next col
    Next lig
    With Sheets("Résultat")
        .[A:E].ClearContents
        .[A1].Resize(UBound(result, 1), UBound(result, 2)) = result
        .Activate
    End With
End Sub

La macro peut être appelée sur n'importe quelle feuille d'un classeur actif. Il doit avoir une feuille Résultat.

eric

4vba-test-1.xlsm (23.94 Ko)

Merci beaucoup pour les deux réponses.

Je vais pouvoir regarder et comparer et surtout en apprendre un peu plus.

Rechercher des sujets similaires à "trouver vide"