XL 2019 recherche en fonction dune autre cellule

calin123

XLDnaute Nouveau
bonjour
je cherche a obtenir le résultat d'une cellule par apport à une recherche .j'utilise recherchev mais il ne trouve pas le bon résultat.

merci par avance pour l'aide
 

Pièces jointes

  • COMPTE RENDU VIDEO DU JOUR ESSAIS.xls
    120.5 KB · Affichages: 10

calin123

XLDnaute Nouveau
Bonjour
j ai mal écrit pilote je cherche le total des pilote en E7 le résultat qui se trouve en N11, en F7 le résultat qui se trouve en O11 . Le total n'est pas tout les jours à la même ligne.
Je vous remercie
 

Pièces jointes

  • COMPTE RENDU VIDEO DU JOUR ESSAIS (2).xls
    120 KB · Affichages: 4

vgendron

XLDnaute Barbatruc
dans ton fichier d'origine tu avais mis du texte en plus des nombres....

bref, il suffit de modifier le code comme suit
VB:
Sub Totaux()
Dim TabData() As Variant
Dim TabTransport() As Variant
Dim TabTotaux(1 To 1, 1 To 3) As Double 'on définit le tableau des totaux

With Sheets("cpterendu") 'dans la feuille cpterendu
    'LastLine = .Range("A" & .Rows.Count).End(xlUp).Row 'il faut etre sur que la colonne A ne contient pas de données SOUS la liste des moyens de transports (1 solution serait de mettre la liste sur une autre feuille)
    TabTransport = .Range("A7:C12").Value 'on prend 3 colonnes pour avoir le tableau final
    
    LastLine = .UsedRange.Rows.Count 'dernière ligne de la feuille
    TabData = .Range("J7:W" & LastLine).Value 'on récupère le tableau de données

    For i = LBound(TabTransport, 1) To UBound(TabTransport, 1) 'pour chaque moyen de transport
        MoyenTransport = TabTransport(i, 1) 'on note le moyen de transport
        For j = LBound(TabData, 1) To UBound(TabData, 1) 'pour chaque ligne du tabdata
            If TabData(j, 1) = MoyenTransport Then 'on a trouvé la ligne du moyen de transport
                For k = j To UBound(TabData, 1) 'on commmence une boucle à partir de la ligne du moyen de transport pour trouver le mot "TOTAL" (en enlevant les espaces parasites)
                    If Trim(TabData(k, 2)) = "Total" Then 'on a trouvé la ligne de Total
                        TabTransport(i, 1) = TabData(k, 5) 'on récupère les 3 données valeurs
                        TabTransport(i, 2) = TabData(k, 6)
                        TabTransport(i, 3) = TabData(k, 7)
                        Exit For 'on sort de la boucle for k
                    End If
                Next k
                Exit For 'on sort de la boucle for j pour aller au prochain moyen de transport
            End If
            
        Next j
    Next i 'moyen de transport suivant
    
    'ici, on a trouvé toutes les valeurs pour tous les moyens de transport
    
    'on parcourt à nouveau le tableau TabTransport pour mettre des 0
    For i = LBound(TabTransport, 1) To UBound(TabTransport, 1) 'pour chaque ligne
        If Not IsNumeric(TabTransport(i, 1)) Then 'si le contenu n'est pas numérique (c'est qu'on a pas mis de valeurs au moyen de tarnsport
            For j = UBound(TabTransport, 2) To LBound(TabTransport, 2) Step -1 'sur chaque colonne
                TabTransport(i, j) = 0
            Next j
        End If
    Next i
    
    'on parcourt à nouveau le tableau pour faire les calculs des totaux
    For i = LBound(TabTransport, 1) To UBound(TabTransport, 1) 'pour chaque ligne
        TabTotaux(1, 1) = TabTotaux(1, 1) + CDbl(TabTransport(i, 1)) 'on extrait le texte (située après le signe =) qu'on transforme en nombre
        TabTotaux(1, 2) = TabTotaux(1, 2) + CDbl(TabTransport(i, 2))
        TabTotaux(1, 3) = TabTotaux(1, 3) + CDbl(TabTransport(i, 3))
        
    Next i
    'on colle les tableaux de résultats dans la feuille
    .Range("E7").Resize(UBound(TabTransport, 1), UBound(TabTransport, 2)) = TabTransport
    .Range("E20").Resize(UBound(TabTotaux, 1), UBound(TabTotaux, 2)) = TabTotaux

End With
End Sub
 

vgendron

XLDnaute Barbatruc
le problème vient du fait qu'il y a un espace après le mot Total dans ta colonne K

il faut a tout prix éviter de foutre des espaces qui ne servent à rien, qui polluent et qui font bugger les macros.
c'est un peu comme quand tu écris à la main.. lorsque tu as fini une phrase, tu mets juste un point, et pas d'espace après. SAUF si tu continues à écrire sur la meme ligne.


Remplace par ce code
VB:
Sub Totaux()
Dim TabData() As Variant
Dim TabTransport() As Variant
Dim TabTotaux(1 To 1, 1 To 3) As Double 'on définit le tableau des totaux

With Sheets("cpterendu") 'dans la feuille cpterendu
    'LastLine = .Range("A" & .Rows.Count).End(xlUp).Row 'il faut etre sur que la colonne A ne contient pas de données SOUS la liste des moyens de transports (1 solution serait de mettre la liste sur une autre feuille)
    TabTransport = .Range("A7:C19").Value 'on prend 3 colonnes pour avoir le tableau final
    
    LastLine = .UsedRange.Rows.Count 'dernière ligne de la feuille
    TabData = .Range("J7:W" & LastLine).Value 'on récupère le tableau de données

    For i = LBound(TabTransport, 1) To UBound(TabTransport, 1) 'pour chaque moyen de transport
        MoyenTransport = TabTransport(i, 1) 'on note le moyen de transport
        For j = LBound(TabData, 1) To UBound(TabData, 1) 'pour chaque ligne du tabdata
            If TabData(j, 1) = MoyenTransport Then 'on a trouvé la ligne du moyen de transport
                For k = j To UBound(TabData, 1) 'on commmence une boucle à partir de la ligne du moyen de transport pour trouver le mot "TOTAL" (en enlevant les espaces parasites)
                    'MsgBox Asc(Right(TabData(k, 2), 1))
                    If Trim(Replace(TabData(k, 2), Chr(160), "")) = "Total" Then 'on a trouvé la ligne de Total
                        TabTransport(i, 1) = TabData(k, 5) 'on récupère les 3 données valeurs
                        TabTransport(i, 2) = TabData(k, 6)
                        TabTransport(i, 3) = TabData(k, 7)
                        Exit For 'on sort de la boucle for k
                    End If
                Next k
                Exit For 'on sort de la boucle for j pour aller au prochain moyen de transport
            End If
            
        Next j
    Next i 'moyen de transport suivant
    
    'ici, on a trouvé toutes les valeurs pour tous les moyens de transport
    
    'on parcourt à nouveau le tableau TabTransport pour mettre des 0
    For i = LBound(TabTransport, 1) To UBound(TabTransport, 1) 'pour chaque ligne
        If Not IsNumeric(TabTransport(i, 1)) Then 'si le contenu n'est pas numérique (c'est qu'on a pas mis de valeurs au moyen de tarnsport
            For j = UBound(TabTransport, 2) To LBound(TabTransport, 2) Step -1 'sur chaque colonne
                TabTransport(i, j) = 0
            Next j
        End If
    Next i
    
    'on parcourt à nouveau le tableau pour faire les calculs des totaux
    For i = LBound(TabTransport, 1) To UBound(TabTransport, 1) 'pour chaque ligne
        TabTotaux(1, 1) = TabTotaux(1, 1) + CDbl(TabTransport(i, 1)) 'on extrait le texte (située après le signe =) qu'on transforme en nombre
        TabTotaux(1, 2) = TabTotaux(1, 2) + CDbl(TabTransport(i, 2))
        TabTotaux(1, 3) = TabTotaux(1, 3) + CDbl(TabTransport(i, 3))
        
    Next i
    'on colle les tableaux de résultats dans la feuille
    .Range("E7").Resize(UBound(TabTransport, 1), UBound(TabTransport, 2)) = TabTransport
    .Range("E20").Resize(UBound(TabTotaux, 1), UBound(TabTotaux, 2)) = TabTotaux

End With
End Sub
 

Discussions similaires

Statistiques des forums

Discussions
312 103
Messages
2 085 311
Membres
102 860
dernier inscrit
fredo67