XL 2013 Modification d'un resultat et mettre le nouveau resultat dans une autre colonne

cedric_hiss

XLDnaute Junior
Bonjour a tous ,

je remerice tous les membres du forum pour toutes les aides que vous m'avez fournie ,je reviens vers vous encore une fois , demandant de l'aide , je fais une comparaison entre deux release comme dans la photo
release.jpg

expilcation :

je compare le release 1 avec le release 2 pour savoir les nouvelles fonctionnalitées dans le release2 dans le resultat j'ai une colonne ou il y a les nouvelle fonctionnalitées et dans l'autre colonne j'affiche les communautées qui utilisent ces fonctionnalitées avec le pourcentage de leurs reservations (PNR) par rapport au total des reservations de toutes les communautées dans le deuxieme release .

Ce que je voudrais faire c'est d'afficher que les 5 premieres communautées dans la colonne O , et d'ajouter dans la colonne P un autre resultat ou il y a le total pourcentage des communautées qui ont utilisé cette fonctionnalité .

Par exemple : pour la fonctionnalités Yes Go en aura dans la colonnes P : total pourcentage des communautées est 100% vu que toutes les communautées utilisent cette fonctionnalitées .
voila le fichier sur lequel je travaille : Regarde la pièce jointe compare by func.xlsm
Merci d'avance
 

Pièces jointes

  • release.jpg
    release.jpg
    23.6 KB · Affichages: 42
  • compare by func.xlsm
    18.5 KB · Affichages: 30

Bebere

XLDnaute Barbatruc
Re : Modification d'un resultat et mettre le nouveau resultat dans une autre colonne

bonjour Cedric
bienvenue
fait ce code,pour le reste pas compris
Sub essai()
Dim l As Long, i As Long, j As Long, pos as long, dico As New Dictionary, item As Variant
Dim release1, release2, test As Boolean,x as String

release1 = Sheet1.Range("A3:E" & Sheet1.Range("C65000").End(xlUp).Row)
release2 = Sheet1.Range("G3:K" & Sheet1.Range("I65000").End(xlUp).Row)

For i = 1 To UBound(release2)
test = False
For j = 1 To UBound(release1)
If release2(i, 3) = release1(j, 3) Then
test = True: Exit For
End If
Next j
If test = False Then dico(release2(i, 1) & "-" & release2(i, 3)) = release2(i, 1) & "-" & release2(i, 3) & "-" & release2(i, 4)
Next i
l = 3
For Each item In dico.Items'résultats
x = item: pos = InStr(item, "-")
Sheet1.Range("M" & l) = Mid(x, 1, pos - 1)
x = Mid(x, pos + 1): pos = InStr(x, "-")
Sheet1.Range("N" & l) = Mid(x, 1, pos - 1)
Sheet1.Range("O" & l) = Mid(x, pos + 1)
l = l + 1
Next item
End Sub
 

cedric_hiss

XLDnaute Junior
Re : Modification d'un resultat et mettre le nouveau resultat dans une autre colonne

Bonjour Bebere

Merci pour ta reponse rapide et pour ton effort je sais pas si t'as vu le fichier que j'ai mis avec l'explication , voila le code que j'utilise :

Sub essai()
Dim verif As Range, m As Range, dico As New Dictionary
x = Sheets(1).Range("C4:C" & Sheets(1).Range("C:C").End(xlDown).Row).Count
y = Sheets(1).Range("I4:I" & Sheets(1).Range("I:I").End(xlDown).Row).Count

For j = 3 To y + 3
If Not dico.Exists(Sheets(1).Cells(j, 10).Value) Then
dico.Add Sheets(1).Cells(j, 10).Value, Sheets(1).Cells(j, 10).Value
PNRt = PNRt + Sheets(1).Cells(j, 10).Value
End If
Next j

For j = 3 To y + 3

a = Sheets(1).Range("O1:O" & Sheets(1).Range("O:O").End(xlDown).Row).Count + 1

Set m = Sheets(1).Range(Sheets(1).Cells(3, 3), Sheets(1).Cells(x + 3, 3)).Find(Sheets(1).Cells(j, 9).Value)

If m Is Nothing Then
PNR = 1 - (PNRt - Sheets(1).Cells(j, 10).Value) / PNRt

PNR = Format(PNR, "0.00%")
Set verif = Sheets(1).Range("N:N").Find(Sheets(1).Cells(j, 9).Value)

If verif Is Nothing Then
Sheets(1).Cells(a, 14).Value = Sheets(1).Cells(j, 9).Value
texte = Sheets(1).Cells(j, 7).Value & Sheets(1).Cells(j, 8).Value & ", pourcentage PNR : " & PNR
Sheets(1).Cells(a, 15).Value = texte

Else
texte = Sheets(1).Cells(verif.Row, 15).Value
texte = texte & "; " & Sheets(1).Cells(j, 7).Value & Sheets(1).Cells(j, 8).Value & ", pourcentage PNR : " & PNR
Sheets(1).Cells(verif.Row, 15).Value = texte

End If

End If
Next j
Exit Sub


End Sub

le code fait ce que je veux , mais ce que je veux faire c'est pour chaque nouvelle fonctionnalité ajouter la somme des pourcentages de PNR des communautés qui utilise cette fonctionnalitées dans la colonne P , enfaite j'ai pas compris ce que fait votre code ! je suis un Null en vba :D
 

Bebere

XLDnaute Barbatruc
Re : Modification d'un resultat et mettre le nouveau resultat dans une autre colonne

Cedric
oui,je l'ai vu ce code
le code va chercher les fonctionnalités(I) release2 qui ne sont pas dans release1 avec coresitecode(H) et pnrs(J)
Communautés se rapportent à quoi,je pense à coresitecode
 

cedric_hiss

XLDnaute Junior
Re : Modification d'un resultat et mettre le nouveau resultat dans une autre colonne

oui en faite dans le resultat dans la colonne N on a les fonctionnalitées qui existent dans le release2 mais pas dans le release 1 et dans la colonne O on a les communautées qui utilisent cette fonctionnalitées avec le purcentage de leurs PNR pour chaque communautée , ce que je voudrais faire c'est d'afficher la somme de ces pourcentage dans la colonne P , si on a pour la fonctionnalitée Yes Go les communautées: VHDK pourcentages 20% , 8BHZ pourcentages 12%, VSVF pourcentages 10% alors dans la colonne P on aura 20+12+10 = 42%
 

Bebere

XLDnaute Barbatruc
Re : Modification d'un resultat et mettre le nouveau resultat dans une autre colonne

Cedric
un autre code
pour les 5 que tu veux garder,dire lesquels
Sub essai2()
Dim l As Long, i As Long, j As Long, pos As Long, dico As New Dictionary, d As New Dictionary, d1 As New Dictionary, item As Variant
Dim release1, release2, test As Boolean, x As String, y As String, z As String, a(), totalprn As Double, item1 As Variant

release1 = Sheet1.Range("A3:E" & Sheet1.Range("C65000").End(xlUp).Row)
release2 = Sheet1.Range("G3:K" & Sheet1.Range("I65000").End(xlUp).Row)
For i = 1 To UBound(release2)
test = False
For j = 1 To UBound(release1)
If release2(i, 3) = release1(j, 3) Then

test = True: Exit For
End If
Next j
If test = False Then
If release2(i, 1) = release2(i, 2) Then 'coresitecode = SiteCode
dico(release2(i, 1) & "-" & release2(i, 3) & "-" & release2(i, 4)) = release2(i, 1) & "-" & release2(i, 3) & "-" & release2(i, 4)
d(release2(i, 4)) = release2(i, 4) 'pour totalprn
d1(release2(i, 3)) = release2(i, 3) 'fonctionnalités
End If
End If
Next i

For Each item In d.Items
totalprn = totalprn + item
Next item
k = 1
For Each item1 In d1.Items
For Each item In dico.Items
pos = InStr(item, "-"): x = Mid(item, 1, pos - 1)
y = Mid(item, pos + 1): pos = InStr(y, "-"): y = Mid(y, 1, pos - 1)
z = Mid(item, InStrRev(item, "-") + 1)
If item1 = y Then
ReDim Preserve a(1 To 3, 1 To k)
a(1, k) = x
a(2, k) = y
a(3, k) = 1 - (totalprn - z) / totalprn
k = k + 1
End If
Next item
Next item1
a = Application.Transpose(a)
Sheet1.Range("M3").Resize(UBound(a, 1), UBound(a, 2)) = a
End Sub
 

Discussions similaires

Statistiques des forums

Discussions
314 644
Messages
2 111 529
Membres
111 189
dernier inscrit
Laurent.