XL 2010 Formule excel..

titi1310

XLDnaute Nouveau
Bonjour,

J'aurai besoin d'aide..

J'ai un tableau excel ci-joint (que j'ai raccourci car il le fichier est trop lourd).
Chaque client a différents animaux : soit des ovins/caprins, soit des bovins, ou les deux.
Je voudrais créer une formule dans "Espèce" qui prenne en compte la chose suivante :
- Si un client à que des ovins/caprins, mettre dans "Espèce" = Ovins/Caprins, si il n'a que des "Bovins" = mettre "Bovins", par contre si il y a des Ovins/Caprins et des Bovins, mettre = MIXTE.

Un grand merci pour votre retour.. ☺☺ Capture.JPG
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Titi, et bienvenu sur XLD,
Les jpg c'est pas génial pour bosser. :)
Un essai en PJ, j'ai essayé de respecter vos colonnes et intitulés.
 

Fichiers joints

Modeste geedee

XLDnaute Barbatruc
Bonsour®
envisagez l'utilisation des tableaux structurés, des listes de validation

puis filtres et tableaux croisés dynamiques
 

job75

XLDnaute Barbatruc
Bonsoir titi1310, sylvanu, JHA, Modeste geedee,

Voyez le fichier joint et cette macro dans le code de la feuille :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim a As Range
Application.ScreenUpdating = False
Application.EnableEvents = False
On Error Resume Next
With Intersect(Range("C2:C" & Rows.Count), UsedRange)
    .ClearContents 'RAZ
    For Each a In .Offset(, 1).SpecialCells(xlCellTypeConstants).Areas
        a(1, 0) = IIf(Application.CountIf(a, a(1)) = a.Count, a(1), "MIXTE")
    Next
End With
Application.EnableEvents = True
End Sub
Elle s'exécute quand on modifie ou valide une cellule quelconque.

La colonne C se remplit et ne peut plus être modifiée.

A+
 

Fichiers joints

Dernière édition:

job75

XLDnaute Barbatruc
Pour tester j'ai copié la plage B2: D19 sur 18 000 lignes.

La macro s'exécute chez moi en 0,87 seconde.

Bonne nuit.
 

job75

XLDnaute Barbatruc
Bonjour le forum,

Une autre solution dans ce fichier (2) avec une fonction VBA :
VB:
Function Espece(colonne As Range) As String
Dim c As Range
Set c = Intersect(Application.Caller.EntireRow, colonne)
If c = "" Or c(0) <> "" And c.Row > 2 Then Exit Function
Espece = c
While c <> ""
    If c <> Espece Then Espece = "MIXTE": Exit Function
    Set c = c(2)
Wend
End Function
Formule en C2 à tirer vers le bas :
Code:
=Espece(D:D)
Bonne journée.
 

Fichiers joints

job75

XLDnaute Barbatruc
Bonjour titi1310, le forum,

En colonne "Animaux" il n'y a plus de cellules vides pour séparer les données de chaque client.

Il faut donc utiliser la colonne "N° Client" et cette nouvelle fonction VBA :
VB:
Function Espece(Client As Range, Animaux As Range) As String
Dim c1 As Range, c2 As Range, nom As String
Set c1 = Intersect(Application.Caller.EntireRow, Client)
Set c2 = Intersect(c1.EntireRow, Animaux)
If c1 = c1(0) Then Exit Function
nom = c1
Espece = c2
While c1 = nom
    If c2 <> Espece Then Espece = "MIXTE": Exit Function
    Set c1 = c1(2)
    Set c2 = c2(2)
Wend
End Function
Fichier (3) avec en S2 la formule =Espece(B:B;T:T)

Bonne journée.
 

Fichiers joints

Créez un compte ou connectez vous pour répondre

Vous devez être membre afin de pouvoir répondre ici

Créer un compte

Créez un compte Excel Downloads. C'est simple!

Connexion

Vous avez déjà un compte? Connectez vous ici.

Haut Bas