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

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.. ☺☺
 

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
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…