Excel +8 conditions en VBA

Lucie -  
melanie1324 Messages postés 1504 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,


Je suis en panne!!
J'ai un tableau sous excel, dans lequel je souhaiterai mettre une formule avec + de 8 conditions le problème c'est que je n'y arrive pas.
J'ai essayer de la mettre dans Visual Basic car j'ai autre requetes en exécutions mais la syntaxe ne doit pas être bonne car ça ne veux pas marcher ou j'ai un message d'erreur. Voici ce que j'ai essayer de mettre:
Range("T2").Select
If RC(-4) = "HQ" And RC(-2) = 0 Then
Range("T2") = 1
ElseIf RC(-4) = "HQ" And RC(-2) > 0 Then
Range("T2") = RC(-1) / RC(-3)
ElseIf RC(-4) = "T1" Then
Range("T2") = RC(-1) / R(-1): C (-3)
ElseIf RC(-4) = "T2" Then
Range("T2") = RC(-1) / R(-2): C (-3)
ElseIf RC(-4) = "T3" Then
Range("T2") = RC(-1) / R(-3): C (-3)
ElseIf RC(-4) = "T4" Then
Range("T2") = RC(-1) / R(-4): C (-3)
ElseIf RC(-4) = "T5" Then
Range("T2") = RC(-1) / R(-5): C (-3)
ElseIf RC(-4) = "T6" Then
Range("T2") = RC(-1) / R(-6): C (-3)
ElseIf RC(-4) = "T7" Then
Range("T2") = RC(-1) / R(-7): C (-3)
ElseIf RC(-4) = "T8" Then
Range("T2") = RC(-1) / R(-8): C (-3)
Range("T2").Select
Range(Selection, Selection.End(xlDown)).Select
Et je souhaite que la formule se répete jusqu'a la fin du tableau.
Sur la formule d'origine est:
ActiveCell.FormulaR1C1 = _
"=IF(AND(RC[-4]=""HQ"",RC[-2]=0),1,IF(RC[-4]=""HQ"",RC[-1]/RC[-3],IF(RC[-4]=""T1"",RC[-1]/R[-1]C[-3],IF(RC[-4]=""T2"",RC[-1]/R[-2]C[-3],IF(RC[-4]=""T3"",RC[-1]/R[-3]C[-3],IF(RC[-4]=""T4"",RC[-1]/R[-4]C[-3],IF(RC[-4]=""T5"",RC[-1]/R[-5]C[-3],IF(RC[-4]=""T6"",RC[-1]/R[-6]C[-3],IF(RC[-4]=""T7"",RC[-1]/R[-1]C[-7],IF(RC[-4]=""T8"",RC[-1]/R[-8]C[-3],0))))))))))
Merci de bien vouloir me venir en aide.
A bientot


A voir également:

6 réponses

melanie1324 Messages postés 1504 Date d'inscription   Statut Membre Dernière intervention   155
 
Bonjour,

ca ne marche pas, parce que l'écriture sous vba n'est pas la bonne.

range("T2").select
if range("P2") = "HQ" and range("R2") = 0 then
selection = 1
else
if range("P2") = "HQ" then
ActiveCell.FormulaR1C1 = "=RC[-1]/RC[-3]"
else
if range("P2") = "T1" then
ActiveCell.FormulaR1C1 = "=RC[-1]/R[-1]C[-3]"
else
if range("P2") = "T2" then
ActiveCell.FormulaR1C1 = "=RC[-1]/R[-1]C[-3]"
end if
end if
end if
end if


Pour la suite, je ne peux pas cntinuer parce que c'est simplement impossible :
parce que dans ta formule pour T3, tu mets R(-2) or, tu es en 2e ligne donc laligne en -2, c'est 0 donc c'est pour a que tu as un message d'erreur
0
Lucie
 
d'accord mais comment faire alors.
En fait le but de ma formule pour expliquer le contexte.
Dans mon tableau en colonne T je veux le % d'heures réalisées dans la section d'origine,
à partir de la colone P dans laquelle j'ai soit HQ, soit T1,T2, T3....T8, le Tsignifie que les heures sont en transfert donc dans une autre section. Et HQ dans la section d'origine.
Après en colonne Q j'ai les heures totale de la journée, en colonne R j'ai les heures transferées et en colonne S la différence entre le total des heures et les heures tranférées.
Et j'ai autant de ligne que de transfert + la ligne de la section d'origine.
Donc je voulais créer une formule à répéter jusqu'en bas dernière ligne, et du coup mon % est calculé sur le nombre d'heures totale pour cette personne pour cette journée, donc je part de la colonne P, pour indiquer quelle valeur utiliser pour avoir mon % sur la valeur total des heures de la journée.
Donc voila dans la colonne P les valeurs sont toujours dans cette ordre mais le nombres de lignes est aléatoire en fonction du nombre de transferts, et j'ai tout à la suite.
Enfin voila je sais pas si c'est plus clair.
Mais du coup peut être avez vous une autre solution.
Merci de votre aide.
0
melanie1324 Messages postés 1504 Date d'inscription   Statut Membre Dernière intervention   155
 
Re,

pour te donner une solution valable, il vaudrat mieux que tu me donnes ton tableau ou du moins n exemple de ton tableau et je vais travailler dessus.Tu le mets sur ci-joint.fr et donn l'adresse quand c'est fait.
0
taxi44
 
Voici le lien vers mon fichier:
http://www.cijoint.fr/cjlink.php?file=cj201102/cijP7SwIWJ.xls

Merci de votre aide.
0
melanie1324 Messages postés 1504 Date d'inscription   Statut Membre Dernière intervention   155
 
Re,

tout n'est pas encore clair.
En T, tu veux calculer ton % d'heures; Ca j'ai compris.
Comment se calcule ce pourcentage ?
si tu as hq : (parle ne colonne) c'est colonne R/S
si tu as T1 : c'est colonne S/ somme hq?
0
melanie1324 Messages postés 1504 Date d'inscription   Statut Membre Dernière intervention   155
 
ca y est j'ai trouvé.
en excel francais :
=si(et(P2="HQ";R2=0);1;si(P2="HQ";S2/Q2;S2/decaler(Q2;-droite(P2;1);0)))

en excel anglais
remplace droite par right
decaler par : offset

la fonction déclaer ou offset petmt de se décaler sur une cellule :
Q2 : cellule àpartir de laquelle on veut se décaler
-droite(P2;1) : nombre de lignes qu'on veut se décaler
0 : nombre de colonnes qu'on veut se décaler

droite(P2;1) : permet de récupérer le 1er caractères situé à droite de ta cellule P2

Le - sigifie qu'on monte au lieu de descendre.

Cette fomule fonctionne si ton nombre de ligne est inférieur à 10.
s'il y a un risqe pour que tes transferts soient supérieurs ou égux à 10

à la place de :
-droite(P2;1) en excel francais : -droite(P2;ncar(P2) - 1)
nbcar compte le nombre de cractères
en excel anglais :
-right(P;len(P2)-1)

est-ce que c'est ce que tu cherchais?
0
Lucie
 
merci beaucoup, je comprend à peu près votre formule mais je ne savais pas la retranscrire. Normalement il y a aux max T8 donc 9 lignes.
J'essaie et vous tiens au courant.
0
Lucie
 
bin merci beaucoup, vous avez réussi à solutionner mon problème car c'est bien ce que je recherchais, mon test est concluant.
Merci à bientot
0
taxi44
 
Bonsoir,
Avant de cloturer ce sujet, je souhaiterai savoir de quelle manière exprimer le null, dans ma formule, à la fin:
=si(et(P2="HQ";R2=0);1;si(P2="HQ";S2/Q2;S2/decaler(Q2;-droite(P2;1);0)))
J'ai essayer de remplacer le 0 de la fin par "", ou par null, mais ca ne marche pas.
Car après j'utilise les info dans un TCD et le ligne à 0 me gene, je voudrai essayer avec des cellule vides.
MErci d'avance.
0
lucie
 
Bonsoir, avant de cloturer le sujet, je souhaiterai savoir de quelle manière rendre la valeur null à la fin de ma formule:
=si(et(P2="HQ";R2=0);1;si(P2="HQ";S2/Q2;S2/decaler(Q2;-droite(P2;1);0)))
Par quoi remplacer le 0 de la fin pour obtenir une cellule vide j'ai essayer "" et le null mais non ça ne fonctionne pas.
Merci d'avance.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
melanie1324 Messages postés 1504 Date d'inscription   Statut Membre Dernière intervention   155
 
Bonjour,

tu ne peux pas parce que tu asformaté ta cellule en %. Ainsi si ta cellule est vide ou éale à 0, ca te mettra 0,00 %
0
lucie
 
ok dommage,
bin je vais étudier le problème.
Car du coup dans mon TCD je devrai avoir 100% pour tout mes individus hors ca ne marche pas car il me fait la moyenne sur toutes les lignes de la personne.
Donc voilà pourquoi cette question.
Bonne soirée
Merci kan même.
0
Lucie
 
Bonjour,
Je suis sur toujours sur mon tableau excel, comme je copie la feuille tempo sur la feuille résultat je la copie en valeur, puis, je change le format de ma colonne en nombre, pour faire un filtre sur les 0, les remplacer par des vides("") et remettre ma colonne en 0.00%.
Voici comment je l'ai formuler mais ca ne marche pas, la sélection ne me donne rien:
Sheets("resultat").Select
Cells.Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Columns("W:W").Select
Application.CutCopyMode = False
Columns("W:W").Select
Selection.NumberFormat = "0.00"
Cells.Select
Range("G1").Activate
Selection.AutoFilter
Selection.AutoFilter Field:=23, Criteria1:=0
Columns("W:W").Select
Selection.Replace What:="0", Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Range("W2").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.NumberFormat = "0.00%"
Range("W2").Select
Cells.Select
Range("F1").Activate
Selection.AutoFilter

Merci de votre aide.
Ca devrait pouvoir marcher non??


Configuration: Windows 2000 / Internet Explorer 6.0
0
melanie1324 Messages postés 1504 Date d'inscription   Statut Membre Dernière intervention   155
 
Re,

avant de faire un coller il faut copier.

sheets("feuilleàcopier").select
cells.copy
sheets("feuilleàcoller").select
Activesheet.paste
Columns("W:W").Select
Selection.NumberFormat = "0.00"
Selection.Replace What:="0", Replacement:="""", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Selection.NumberFormat = "0.00%"


essaie ce code

Replacement:= je pense qu'il faut mettre 4 guillemets ou 2.
La, ca devrait marcher
0