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.
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.
Comment utiliser la fonction SOMME.SI.ENS dans Excel, l'une des fonctions mathématiques et trigonométriques d'Excel, pour additionner les arguments qui répondent à plusieurs critères.
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.
Comment utiliser la fonction SOMME.SI.ENS dans Excel, l'une des fonctions mathématiques et trigonométriques d'Excel, pour additionner les arguments qui répondent à plusieurs critères.
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..
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,
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 :
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.
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 :
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
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).
???
Le L est l'indice du For Next, le V est le nom de la colonne d'où les apostrophes.
Et pourquoi cela ne marche pas ?
En V on a bien les valeurs et en Recap les valeurs sont correctes.