Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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
Hello
voir la PJ
j'ai aussi ajouté le calcul des totaux en ligne 20
et j'ai ajouté des commentaires dans le code pour expliquer
 

Pièces jointes

  • COMPTE RENDU VIDEO DU JOUR ESSAIS.xls
    121 KB · Affichages: 2

calin123

XLDnaute Nouveau
bonjour
je suis désole de te déranger mais je ne veux que des chiffre dans le tableau en E7 on doit trouver 6077 en F7 1107.93 en G 17.54 et 0 si il n'a pas trouvé .
Dans ton 1 er exemple j' ai réussi à faire que des chiffres

merci
 

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

Réponses
3
Affichages
348
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…