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

Formule sous 3 conditions avec 2 Feuil

  • Initiateur de la discussion Initiateur de la discussion moko
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

moko

XLDnaute Junior
Bonjour, à tous

J'ai une erreur dans une petite formule
pouvez vous corriger

dans feuil1 j'ai 3 conditions exemple a1,b1,c1 et reponse d1
dans feuil2 j'ai aussi les 3 conditions mais en réponse il faudrait afficher le résulat de D1 de la feuil1
voici ma formule

=SI(et(Graphique!AM$680=C5;1🙁Graphique!AN$680=D5;1🙁Graphique!AO$680=E5;1:$g5=Graphique!AP$680)))

Feuil graphique = "AM680;AN680,AO680","AP680"
Feuil2 "c5,d5,e5" et "G5" serait le résultat de la feuil1 graphique AP680

Merci d'avance

Cdt

Moko
 
Re : Formule sous 3 conditions avec 2 Feuil

Bonjour moko, R@chid, Efgé,

Je ne suis absolument pas sûr du tout d'avoir compris la demande.

Un nom a été défini: matable ==> =Feuil2!$C$4:$BC$13

Si l'utilisateur modifie la cellule Feuil1!$G$5, alors:
  • si dans matable la valeur correspondant au triplet Feuil1!D$5:$F$5 existe déjà, alors on ne modifie rien et on ramène la valeur de matable en Feuil1!$G$5
  • si dans matable la valeur correspondant au triplet Feuil1!D$5:$F$5 n'existe pas encore (i.e. est vide), alors on inscrit la valeur de Feuil1!$G$5 dans matable


matable ne contient donc que la première valeur saisie pour chaque triplet.
 

Pièces jointes

Dernière édition:
Re : Formule sous 3 conditions avec 2 Feuil

Bonjour, mapomme

c'est exactement le résultat attendu, mais l' adaptation a mon fichier ne va pas être simple

Merci beaucoup

Si je mais la feuil2 au complet ça te va ?je joint la feuil au complet

j'aurais juste a modifier 4 cellules de la feuil1

Cdt

Regarde la pièce jointe essai01.xls
 

Pièces jointes

Dernière édition:
Re : Formule sous 3 conditions avec 2 Feuil

Bonsoir moko,

J'ai modifié la macro VBA:
  • Corrigé un bug quand le triplet était égal à (0,0,0).
  • Corrigé un bug quand le triplet était vide.
  • Mis sur une feuille supplémentaire les paramètres pour pouvoir utiliser la macro quand on change l'emplacement de la zone de saisie.
  • Mis sur une feuille supplémentaire les paramètres pour pouvoir utiliser la macro quand on change l'emplacement du tableau.


La feuille "Param" contient les paramètres de la zone de saisie ainsi que des caractéristiques du tableau.
Les valeurs à changer sont en colonne G de la feuille "Param".
L'adresse du tableau est délimité par les deux cellules jaunes (en haut à gauche et en bas à droite).
Le "Pas" est le nombre de cellule dont on doit se déplacer à partir de la cellule jaune (du haut) pour arriver à la cellule orange.


Attention! La saisie de paramètres erronés dans la feuille "Param" peut aboutir à une erreur d'exécution qui inhibera la détection des changements lors de la saisie de G5:

  • dans ce cas, VBA affiche une boîte de dialogue dans la quelle il faut cliquer sur le bouton "Fin".
  • puis il faut corriger les valeurs erronées sur la feuille "Param"
  • puis enregistrer le fichier.
  • puis fermer Excel et ensuite relancer Excel
  • puis ré-ouvrir le fichier.


nb: on peut modifier les noms des feuilles de saisie et du tableau (dans ce cas, bien les reporter dans la feuille "Param" sinon voir le § Attention) mais il ne faut pas changer le nom de la feuille "Param".

rem: Le nom matable précédemment défini n'est plus utilisé; il a été supprimé.
 

Pièces jointes

Dernière édition:
Re : Formule sous 3 conditions avec 2 Feuil

rép


Très très beau boulot, plusieurs essais Nickel dans les cellules vierge
mais quand une cellule est rempli exemple20
si je reviens sur cette même cellule donnée en feuil1 résultat 21 ça bloque il me redonne 20
donc un petit bug
car toute ces données vont toujours changer en augmentation

Bravo, Bravo
 
Re : Formule sous 3 conditions avec 2 Feuil

(re) moko,

mais quand une cellule est rempli exemple20
si je reviens sur cette même cellule donnée en feuil1 résultat 21 ça bloque il me redonne 20
donc un petit bug
Ce n'est pas un bug 🙄. C'est comme cela que je l'avais interprété.

Que doit-on faire si on modifie un triplet déjà servi dans le tableau ?:

  1. Remplacer dans tous les cas la valeur existante par la nouvelle valeur de la feuille "Saisie" (l'utilisateur sait ce qu'il fait) ?
  2. Ou ne remplacer la valeur déjà existante que si nouvelle valeur est supérieure à la valeur existante ?
  3. Ou bien autre chose ?


A+
 
Dernière édition:
Re : Formule sous 3 conditions avec 2 Feuil

réponse

Excuse moi pour le mot Bug, le mot n'est pas approprié " mes connaissances en VBA sont pratiquement nul "
je ne fait que d'adapter ces formules magiques

je pense que la solution n°1 est la meilleur.
si de mon coté je fait une gaffe de données de ma part cela me permet de remettre a niveau ce tableau
fabuleux que tu a fait

Merci de ce beau travail

Cordialement

Moko
 
Re : Formule sous 3 conditions avec 2 Feuil

Bonjour moko 🙂 ,

Voilà une version qui répond au critère n° 1. Je n'ai pas fait de vérif (je n'ai que supprimé quelques lignes). Si tu rencontres des bugs ou désires d'autres options, le signaler en réactivant ce fil.

A+ 🙂

edit: v4a -> supprimé un test inutile dans le code (ne change rien ni au comportement ni aux résultats)
 

Pièces jointes

Dernière édition:
Re : Formule sous 3 conditions avec 2 Feuil

Bonjour a tous

Joyeuses Pâques

L'exemple marche Super Bravo.

j'ai un souci d'adaptation dans mon fichier
Car j'ai déja un module
ou ce trouve les données a trouvé;
quand le fait visualier le code j'ai

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Rang
e

d'un autre module sur la même Feuil

Et çà me fait un conflit

Cdt
 
Dernière édition:
Re : Formule sous 3 conditions avec 2 Feuil

Joyeuses Pâques à toi aussi 🙂,

Si j'ai bien compris ton problème.

Le code que j'ai fourni doit se trouver dans le module de la feuille "Saisie" dans le corps de la procédure évènementielle entre PrivateSub Worksheet_Change(ByVal Target As Range) et End Sub.

D'après ce que tu dis, il existe déjà une procédure évènementielle PrivateSub Worksheet_Change(ByVal Target As Range) . Dans ce cas, il faudrait modifier le code de la procédure évènementielle pour tester quelles sont les cellules dont les valeurs ont changées. Si c'est G5 (de la feuille saisie) on se branche sur ma partie de code, sinon on se branche sur le code déjà existant mais ça peut encore être plus complexe...).

Que j'ai bien compris ton souci ou non, il est difficile de répondre 😕, sans avoir le fichier réel.
 
Re : Formule sous 3 conditions avec 2 Feuil

réponse
voici ce que j'ai dans ce module

Private Sub Worksheet_Change(ByVal Target As Range)
Dim i As Integer, j As Integer

If Range("AE683") < 1 Or Range("AE683") > 16 Then Exit Sub

If Not Application.Intersect(Target, Range("AC683:AD683")) Is Nothing Then

With Sheets("Feuil1")
For j = 3 To 300 Step 10 'de la colonne C à la colonne ?? afin d'être large (au 11.09.2012, dernière colonne utilisée = 252)
For i = 5 To 100 'de la ligne 5 à la ligne 100 afin d'être large. ATTENTION, IL Y A DEUX TABLEAUX L'UN SOUS L'AUTRE
If .Cells(i, j) = Range("AC683") And .Cells(i, j).Offset(0, 1) = Range("AD683") Then ' On a trouvé les bonnes cellules à modifier
If Range("AE683") <= 8 Then
.Range(.Cells(i, j).Offset(0, 2), .Cells(i, j).Offset(0, Range("AE683") + 1)).Interior.Color = 255 'Rouge
Else ' si Range("AE683") est entre 9 et 16
.Range(.Cells(i, j).Offset(0, 2), .Cells(i, j).Offset(0, Range("AE683") - 7)).Interior.Color = 16776960 'Bleu
If Range("AE683") < 16 Then
.Range(.Cells(i, j).Offset(0, Range("AE683") - 6), .Cells(i, j).Offset(0, 9)).Interior.Color = 9868950 'Gris
End If
End If
Exit Sub
End If
Next i
Next j
End With

End If

End Sub
 
Re : Formule sous 3 conditions avec 2 Feuil

(re)

Voici le code que je propose en incluant le code déjà présent et le mien:

VB:
Private Sub Worksheet_Change(ByVal Target As Range)

'si G5 n'a pas changé, on ne fait rien
If Not Intersect(Target, Range("g5")) Is Nothing Then
  'Interception d'évènement inhibée
  Application.EnableEvents = False
  
  Dim i0 As Long, i As Long, i1 As Long
  Dim j0 As Long, j As Long, j1 As Long, Sortie As Boolean
  
  'Lecture des paramètres pour la feuille de saisie
  Dim Feuille1 As Worksheet, rgValeurs As Range, Valeurs
    Set Feuille1 = Sheets(Sheets("Param").Range("g1").Value)
    Set rgValeurs = Feuille1.Range(Sheets("Param").Range("g2").Value)
    Valeurs = rgValeurs.Value
    'les 3 valeurs du triplet saisi doivent être non vides
    If Len(rgValeurs(1, 1) & rgValeurs(1, 2) & rgValeurs(1, 3)) < 3 Then GoTo FIN
  
  'Lecture des paramètres pour la feuille du tableau
  Dim Feuille2 As Worksheet, rgtablo As Range, tablo, Pas
  Dim col1, col2, col3, col4
    Set Feuille2 = Sheets(Sheets("Param").Range("g4").Value)
    Set rgtablo = Feuille2.Range(Sheets("Param").Range("g5").Value)
    tablo = rgtablo.Value
    col1 = Sheets("Param").Range("g6").Value
    col2 = Sheets("Param").Range("g7").Value
    col3 = Sheets("Param").Range("g8").Value
    col4 = Sheets("Param").Range("g9").Value
    Pas = Sheets("Param").Range("g10").Value
  
    i0 = 1: i1 = UBound(tablo, 1)
    j0 = 1: j1 = UBound(tablo, 2)
    Sortie = False
    'pour chaque ligne du tableau
    For i = i0 To i1
      'pour chaque motif du tableau
      For j = j0 To j1 Step Pas
        'le triplet saisi est-il égal au triplet du motif ?
        If (Valeurs(1, 1) = tablo(i, col1 + j - 1)) And (Valeurs(1, 2) = tablo(i, col2 + j - 1)) _
            And (Valeurs(1, 3) = tablo(i, col3 + j - 1)) Then
          'Triplets égaux
          tablo(i, col4 + j - 1) = Valeurs(1, 4)
          Sortie = True
          Exit For
        End If
      Next j
      If Sortie Then Exit For
    Next i
  'écriture du tableau modifié
  rgtablo = tablo
FIN:
  'Interception d'évènement ré-activée
  Application.EnableEvents = True

ElseIf Range("AE683") < 1 Or Range("AE683") > 16 Then
  Exit Sub
  
ElseIf Not Application.Intersect(Target, Range("AC683:AD683")) Is Nothing Then
  With Sheets("Feuil1")
    'de la colonne C à la colonne ?? afin d'être large (au 11.09.2012, dernière colonne utilisée = 252)
    For j = 3 To 300 Step 10
      'de la ligne 5 à la ligne 100 afin d'être large.
      'ATTENTION, IL Y A DEUX TABLEAUX L'UN SOUS L'AUTRE
      For i = 5 To 100
        If .Cells(i, j) = Range("AC683") And .Cells(i, j).Offset(0, 1) = Range("AD683") Then
          ' On a trouvé les bonnes cellules à modifier
          If Range("AE683") <= 8 Then
            .Range(.Cells(i, j).Offset(0, 2), .Cells(i, j).Offset(0, Range("AE683") + 1)).Interior.Color = 255 'Rouge
          Else ' si Range("AE683") est entre 9 et 16
            .Range(.Cells(i, j).Offset(0, 2), .Cells(i, j).Offset(0, Range("AE683") - 7)).Interior.Color = 16776960 'Bleu
            If Range("AE683") < 16 Then
              .Range(.Cells(i, j).Offset(0, Range("AE683") - 6), .Cells(i, j).Offset(0, 9)).Interior.Color = 9868950 'Gris
            End If
          End If
          Exit Sub
        End If
      Next i
    Next j
  End With
End If

End Sub
 

Pièces jointes

Re : Formule sous 3 conditions avec 2 Feuil

suite

La fusion est bonne

Mais la réponse des 3cellules + une réponse automatique
ne répond "que si entrée manuel"
dans mon fichier cette réponse est un calcul des 3 cellules

on approche de la perfection BRAVO
Si tu Veux je peut t'envoyer le fichier complet en MP 5.6Méga
 
Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

H
Réponses
3
Affichages
993
H
J
Réponses
3
Affichages
9 K
JULIANSAT
J
J
Réponses
8
Affichages
20 K
P
Réponses
0
Affichages
980
Plukrax
P
J
Réponses
10
Affichages
1 K
S
Réponses
2
Affichages
5 K
S
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…