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
 

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+
 

Pièces jointes

  • VBA titi1310(1).xlsm
    17.4 KB · Affichages: 7
Dernière édition:

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.
 

Pièces jointes

  • VBA titi1310(2).xlsm
    18.2 KB · Affichages: 6

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.
 

Pièces jointes

  • VBA titi1310(3).xlsm
    18.4 KB · Affichages: 5

Discussions similaires

Statistiques des forums

Discussions
311 737
Messages
2 082 036
Membres
101 878
dernier inscrit
1475214