trouver valeurs selon plusieurs criteres

alexamel88

XLDnaute Junior
Bonjour,

Je suis sure que ce sujet à déjà été traité mais je ne trouve pas exactement la solution qui correspond à mon problème que voici. J'ai une table avec des pays en colonnes, le mois en colonne et differentes mesures en colonnes j'aimerai tranfsormer cette table en une table ou j'aurai toujours les pays en colonne mais le mois serait en ligne, et le pays serait dupliquait pour chaque mesure. Et je dois trouver la valeur correspondante au pays et au mois. C'est un peu difficile d'explique donc je joins un exemple en pièce attachée.

Encore une fois merci à tous!

Agnès
 

Pièces jointes

  • Trouver valeurs selon plusieurs critères.xls
    24 KB · Affichages: 62
  • Trouver valeurs selon plusieurs critères.xls
    24 KB · Affichages: 64
  • Trouver valeurs selon plusieurs critères.xls
    24 KB · Affichages: 64

klin89

XLDnaute Accro
Re : trouver valeurs selon plusieurs criteres

Bonjour à tous,
Bonjour alexamel88,

Déjà, il faudrait commencer par harmoniser toutes les données présentées (même orthographe, pas d'espaces superflus etc...)

Un essai :

VB:
Sub TransfertDeDonnées()
Dim j As Long, k As Long, Villes As String, Cel As Range
Application.ScreenUpdating = False
For j = 3 To Range("A65536").End(xlUp).Row 'Colonne A
  Villes = Cells(j, 1)
  For k = 3 To Range("H65536").End(xlUp).Row 'Colonne H
    If Cells(k, 8) = Villes Then
      Set Cel = Cells(2, 10) 'Cellule de tête soit J2
      'Faire jusqu'à ce que la cellule d'entête soit _
      égale à la cellule de la colonne B désignée
      Do Until Cel = Cells(j, 2)
      'On décale d'une cellule à droite
        Set Cel = Cel.Offset(0, 1)
      Loop
      'copie la donnée souhaitée
      Select Case Cells(k, 8).Offset(0, 1)
        Case "Achats"
          Cells(k, Cel.Column) = Cells(j, 3)
        Case "Ventes"
          Cells(k, Cel.Column) = Cells(j, 4)
        Case "Marge"
          Cells(k, Cel.Column) = Cells(j, 5)
      End Select
    End If
  Next k
Next j
Application.ScreenUpdating = True
End Sub

Pour suivre le cheminement, te mettre en mode débogage à coup de F8 et placer des espions.

Klin89
 

Pièces jointes

  • Trouver valeurs selon plusieurs critères.xls
    37 KB · Affichages: 59
  • Trouver valeurs selon plusieurs critères.xls
    37 KB · Affichages: 58
  • Trouver valeurs selon plusieurs critères.xls
    37 KB · Affichages: 59

klin89

XLDnaute Accro
Re : trouver valeurs selon plusieurs criteres

Re,

Une autre approche :
VB:
Sub TransfertDeDonnées1()
Dim j As Long, k As Long, col As Long
Dim Ville As String, Cel As Range, C As Range
Application.ScreenUpdating = False
For j = 3 To Range("A65536").End(xlUp).Row 'Colonne A
  Ville = Cells(j, 1)
  For k = 3 To Range("H65536").End(xlUp).Row 'Colonne H
    If Cells(k, 8) = Ville Then
      Set Cel = Cells(2, 10) 'Cellule de tête soit J2
      'Faire jusqu'à ce que la cellule d'entête soit _
      égale à la cellule de la colonne B désignée
      Do Until Cel = Cells(j, 2)
      'On décale d'une cellule à droite
        Set Cel = Cel.Offset(0, 1)
      Loop
      'copie la donnée souhaitée
      Set C = Range("C2:E2").Find(Cells(k, 9), LookIn:=xlValues, LookAt:=xlWhole)
        If Not C Is Nothing Then
          col = C.Column
          Cells(k, Cel.Column) = Cells(j, col)
        End If
    End If
  Next k
Next j
Application.ScreenUpdating = True
End Sub
Klin89
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : trouver valeurs selon plusieurs criteres

Bonjour alexamel88, le forum,

Une version avec des formules soit normales soit matricielles.

La formule matricielles en J2 est à copier/tirer sur la droite jusqu'à l'apparition de cellules vides (dans l'exemple, prêt pour 12 mois)
Les formules matricielles en H3 et en I3 sont à copier/tirer vers la bas jusqu'à l'apparition de cellules vides.
La formule en J3 et à copier/tirer sur la droite et vers le bas.

Deux noms dynamiques ont été définis:
LesMois =DECALER(Sheet1!$B$3;0;0;NBVAL(Sheet1!$B$3:$B$10000);1)
Villes =DECALER(Sheet1!$A$3;0;0;NBVAL(Sheet1!$A$3:$A$10000);1)

Un autre nom fait référence aux en-têtes du tableau initial:
Rubriques =Sheet1!$C$2:$E$2

Une mise en forme conditionnelle masque les 0 du tableau final.

Formule matricielle en J2:
Code:
=SI(1+COLONNE()-COLONNE($J$2)>SOMME(1/NB.SI(LesMois;LesMois));"";INDEX($B$1:$B$10000;PETITE.VALEUR(SI(FREQUENCE(EQUIV(LesMois;LesMois;0);EQUIV(LesMois;LesMois;0))=0;"";LIGNE(LesMois));1+COLONNE()-COLONNE($J$2))))

Formule matricielle en H3:
Code:
=SI(1+LIGNE()-LIGNE($H$3)>SOMME(1/NB.SI(Rubriques;Rubriques))*SOMME(1/NB.SI(Villes;Villes));"";INDEX($A$1:$A$1000;PETITE.VALEUR(SI(FREQUENCE(EQUIV(Villes;Villes;0);EQUIV(Villes;Villes;0))=0;"";LIGNE(Villes));1+MOD(LIGNE()-LIGNE($H$3);ENT(SOMME(1/NB.SI(Villes;Villes)))))))

Formule matricielle en I3:
Code:
=SI(H3="";"";INDEX(Rubriques;1+MOD(ENT((LIGNE()-LIGNE($H$3))/SOMME(1/NB.SI(Villes;Villes)));ENT(SOMME(1/NB.SI(Rubriques;Rubriques))))))

Formule en J3:
Code:
=SI(OU($H3="";J$2="");"";SOMMEPROD(($A$3:$A$10000=$H3)*($B$3:$B$10000=J$2)*DECALER($B$3:$B$10000;0;EQUIV($I3;Rubriques;0))))

Formule matricielle: Elle doit être validée par la combinaison des touches Ctrl+Maj+Entrée au lieu de la seule touche Entrée comme une formule classique.
Si la validation matricielle est correcte, alors Excel entoure la formule d'accolades {=.......}.
Chaque fois que cette formule sera modifiée, la validation devra se faire par Ctrl+Maj+Entrée. Les accolades apparaissent à la validation et ne doivent pas être saisies au clavier.
 

Pièces jointes

  • Trouver valeurs selon plusieurs critères v1.xls
    92 KB · Affichages: 59
Dernière édition:

Discussions similaires

Réponses
5
Affichages
356
Compte Supprimé 979
C

Statistiques des forums

Discussions
312 343
Messages
2 087 440
Membres
103 546
dernier inscrit
mohamed tano