Excel +8 conditions en VBA
Lucie
-
melanie1324 Messages postés 1504 Date d'inscription Statut Membre Dernière intervention -
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
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:
- Excel +8 conditions en VBA
- Clé windows 8 - Guide
- Liste déroulante excel - Guide
- Excel cellule couleur si condition texte - Guide
- Word et excel gratuit - Guide
- Mixcraft 8 - Télécharger - Création musicale
6 réponses
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
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
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.
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.
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?
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?
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?
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?
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.
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.
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.
=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.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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 %
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 %
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
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
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
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
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.