Microsoft 365 Formule de recherche

homernell

XLDnaute Occasionnel
Bonjour à tous,

Déjà merci à tous de me lire.

Je vous explique j'ai un tableau dans lequel j'ai un onglet "données" qui sont les données brut extraite d'un programme, et un onglet "récap" qui retraite l'information.

J'ai fait une formule en recherche (déjà je me suis bien débrouillé vu mon niveau 🥳🥳🥳), néanmoins je ne sais pas comment faire pour qu'il me remonte une somme en fonction d'un condition, je me demande d'ailleurs si je suis clair !!!

Exemple : dans l'onglet données on a plusieurs lignes pour le film Venom, et j'aimerai avoir une récap en fonction des formats et versions de films.

Je vous mets en copie mon fichier peut être plus simple pour vous expert de voir concrètement.

Merci d'avance.
 

Pièces jointes

  • Classeur1.xlsx
    19.2 KB · Affichages: 10

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonsoir homernell,
On peut utiliser somme.si.ens comme en PJ :
VB:
=SOMME.SI.ENS(données!I:I;données!C:C;récap!B3;données!E:E;récap!C3;données!F:F;récap!D3)
Attention, dans votre fichier les données "ca" ne sont pas des nombres mais des chaines de caractères. J'ai été obligé dans chaque cellule de sélectionner et faire un return. de plus il y a un espace texte entre milliers et unités.
 

Pièces jointes

  • Classeur1 (1).xlsx
    19.7 KB · Affichages: 8

homernell

XLDnaute Occasionnel
Bonsoir homernell,
On peut utiliser somme.si.ens comme en PJ :
VB:
=SOMME.SI.ENS(données!I:I;données!C:C;récap!B3;données!E:E;récap!C3;données!F:F;récap!D3)
Attention, dans votre fichier les données "ca" ne sont pas des nombres mais des chaines de caractères. J'ai été obligé dans chaque cellule de sélectionner et faire un return. de plus il y a un espace texte entre milliers et unités.
Tout d'abord merci mille fois pour la réponse rapide ainsi que la solution par contre je n'ai pas tout compris sur les données CA.
Faut-il que je ressaisisse toutes les données à chaque fois ? si oui ce serait une perte de temps j'imagine..
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour,
Le mieux serait que l'import se fasse avec des nombres et non du texte.
Ce qui n'est pas toujours faisable.
Une autre solution est un module VBA qui transforme ce texte en nombre avec :
VB:
Sub Worksheet_Activate()
    Application.ScreenUpdating = False
    With Sheets("données")
        For L = 2 To .Range("L65500").End(xlUp).Row
            .Cells(L, "L") = .Cells(L, "L") * 1
        Next L
    End With
    Application.ScreenUpdating = True
End Sub
Ce code s'exécute automatiquement lorsqu'on sélectionne la feuille "recap"
Evidemment il faut accepter les macro à l'ouverture du fichier.
 

Pièces jointes

  • Classeur1 (3).xlsm
    26.2 KB · Affichages: 4

homernell

XLDnaute Occasionnel
Bonjour,
Le mieux serait que l'import se fasse avec des nombres et non du texte.
Ce qui n'est pas toujours faisable.
Une autre solution est un module VBA qui transforme ce texte en nombre avec :
VB:
Sub Worksheet_Activate()
    Application.ScreenUpdating = False
    With Sheets("données")
        For L = 2 To .Range("L65500").End(xlUp).Row
            .Cells(L, "L") = .Cells(L, "L") * 1
        Next L
    End With
    Application.ScreenUpdating = True
End Sub
Ce code s'exécute automatiquement lorsqu'on sélectionne la feuille "recap"
Evidemment il faut accepter les macro à l'ouverture du fichier.
Bonjour franchement c'est top du top, tu solutionnes mes problèmes.

Mais si je peux utiliser encore tes services, je viens de faire un test avec un nouvel import, et bizarre j'ai une cellule qui me fait planter, je pense qu'il s'agit encore de format :

1635321342502.png


Si tu peux m'aider ? s'il te plait
 

Pièces jointes

  • Classeur1 (3).xlsm
    32.4 KB · Affichages: 1

sylvanu

XLDnaute Barbatruc
Supporter XLD
J'ai remplacé :
VB:
For L = 2 To .Range("L65500").End(xlUp).Row
par
Code:
For L = 1 To .Range("L65500").End(xlUp).Row
Le problème est que si en ligne 1 il a du texte, la conversion crée une erreur donc j'évite l'erreur avec un On error resume next qui saute la ligne suivante si erronée, on a donc :
Code:
Sub Worksheet_Activate()
    Application.ScreenUpdating = False
    With Sheets("données")
        For L = 1 To .Range("L65500").End(xlUp).Row
            On Error Resume Next    ' les données commencent en ligne 2 ou 1, évite erreur si en 1 il y a du texte.
            .Cells(L, "L") = .Cells(L, "L") * 1
        Next L
    End With
    Application.ScreenUpdating = True
End Sub

NB: La macro se lance automatiquement quand on sélectionne la feuille Récap, inutile de la relancer via le bouton.
 
Dernière édition:

homernell

XLDnaute Occasionnel
Bonjour franchement c'est top du top, tu solutionnes mes problèmes.

Mais si je peux utiliser encore tes services, je viens de faire un test avec un nouvel import, et bizarre j'ai une cellule qui me fait planter, je pense qu'il s'agit encore de format :

Regarde la pièce jointe 1119528

Si tu peux m'aider ? s'il te plait
Re,

Bonjour à toi, et encore merci,

Nouveau problème ils m'ont changé la mise en page du coup ta macro ne fonctionne plus, peux tu m'aider à nouveau ?
 

Pièces jointes

  • Classeur1 (5).xlsm
    20 KB · Affichages: 4

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour,
Il suffit de remplacer la colonne L par la colonne V.
J'ai remis à jour les formules et modifié la macro :
VB:
Sub Worksheet_Activate()
    Application.ScreenUpdating = False
    With Sheets("données")
        For L = 2 To .Range("V65500").End(xlUp).Row
            If .Cells(L, "V") <> "" Then
                .Cells(L, "V") = Val(Replace(.Cells(L, "V"), " ", "")) * 1
            End If
        Next L
    End With
    Application.ScreenUpdating = True
End Sub
 

Pièces jointes

  • Classeur1 (5).xlsm
    21.2 KB · Affichages: 7

homernell

XLDnaute Occasionnel
Bonjour,
Il suffit de remplacer la colonne L par la colonne V.
J'ai remis à jour les formules et modifié la macro :
VB:
Sub Worksheet_Activate()
    Application.ScreenUpdating = False
    With Sheets("données")
        For L = 2 To .Range("V65500").End(xlUp).Row
            If .Cells(L, "V") <> "" Then
                .Cells(L, "V") = Val(Replace(.Cells(L, "V"), " ", "")) * 1
            End If
        Next L
    End With
    Application.ScreenUpdating = True
End Sub

Merci mais le fichier ne fonctionne pas j'ai l'impression.
Et surtout j'avais plus ou moins compris la logique de remplacement de L par V mais quand je regarde votre macro je vois encore des L (et des V).
1635948769361.png
 

Discussions similaires

  • Question
Microsoft 365 Recherche V
Réponses
5
Affichages
342
Réponses
6
Affichages
330

Statistiques des forums

Discussions
312 228
Messages
2 086 421
Membres
103 205
dernier inscrit
zch