Excel : Fonction SI() imbriquée supérieure à 7 !!

Excel : Fonction SI() imbriquée supérieure à 7 !! - Logiciels - Windows & Software

Marsh Posté le 15-08-2006 à 17:32:47    

EDITER LE dimanche 03 sep. 2006.
 
Pour les fonctions SI() imbriquées, Excel est limité à 7 ou 8.
J'ai déjà posée la question, on m'avait conseillé ici de faire un tableau avec une recherche.
Ca marche.
 
Mais avec une macro, peut-on imbriquer autant de SI() ou IF() que l'on veut ?
Pareil pour les fonctions logique....
 
 
EDITER LE 31 aout 2006 à 19h32 !! autre question !!
****************************************************************************
Un truc simple pratique, j'ai pas trouvé la réponse !!
 
Dans B1 j'ai la formule :
=A1 + 1
Dans B2 la formule :
=A2 + 2
 
Comment incrémenter à chaque fois le chiffre de la formule : +1 ; +2 ensuite +3..etc ??
 
******************************************************************************
 
Salut  
 
Alors je viens de voir que excel est limité dans la cascade de condition SI ! On ne peut mettre que 7 conditions dans une formule !!
=SI(A1=3;"oui";SI(A2=8;"non";SI(...etc)
 
J'ai par exemple :
A1 à A20 des nombreux entiers entre 1 et 20.
Comment associer un prénom par ex. pour chaque nombre ?  
Si A1=2 alors marquer dans B1="jean", sinon si A1=3 marquer dans b1="Pierre",, sinon si A1=4 marquer dans B1="jaques" etc, dans B1 ça donne :
=SI(A1=2;"jean";SI(A1=3;"pierre";SI(...etc))))))
 
ca marche bien avec 7 conditions, mais au-delà il faudra une autre méthode !! Laquelle choisir? Je sais ma méthode, mais je ne connais pas trop les instructions...Et le SI me bloque là.
 
 
 
merci  :hello:  
 
***********************************************************************************
***********************************************************************************
Salut !
 
J'ai de nombreuses recherche et essais, mais j'ai pas trouvé la solution !
 
Alors J'ai dans A1 à J1 des chiffres, disons au harsard : 10,20,30,40,50,60,70,80,90,100.
 
Comment faire pour les recopier automatiquement de A9 à T9 par ex. en sautant à chaque fois une cellule c'est à dire :
A9 = 10
B9 = rien
C9 = 20
D9 = rien
E9 = 30
.....etc
T9 = 100
 
 
merci.


Message édité par Profil supprimé le 03-09-2006 à 14:11:22
Reply

Marsh Posté le 15-08-2006 à 17:32:47   

Reply

Marsh Posté le 15-08-2006 à 20:21:42    

up lol

Reply

Marsh Posté le 15-08-2006 à 20:51:09    

Salut
Salut,
 
Un up en moins de 3H faut le faire. Comme je suis pas chien et que ça peut aider les autres, j'ai un truc mais c'est pas super simple (je veux dire pas compliqué mais c'est peut-être plus rapide de le faire à la main). Il faudrait donc que tu fournisses plus de renseignements: est-ce que c'est une opération que tu veux répéter, est-ce que c'est toujours les mêmes cellules qui sont concernées,etc...?

Reply

Marsh Posté le 15-08-2006 à 22:57:01    

TAM136 a écrit :

Salut
Salut,
 
Un up en moins de 3H faut le faire. Comme je suis pas chien et que ça peut aider les autres, j'ai un truc mais c'est pas super simple (je veux dire pas compliqué mais c'est peut-être plus rapide de le faire à la main). Il faudrait donc que tu fournisses plus de renseignements: est-ce que c'est une opération que tu veux répéter, est-ce que c'est toujours les mêmes cellules qui sont concernées,etc...?


 
 
excuses oui j'ai fais un up après 3h, car le sujet n'était plus dans la "liste 1".
 
bon bref merci de répondre.
 
Enfait on peut pas parler d'opération, c'est juste un recopiage de cellules, mais en sautant des cellules sur la ligne où l'on a recopié.Donc de : A1 à J1 j'ai :
A1 = 10
B1 = 20
C1 = 30
D1 = 40
E1 = 50
etc
J1 = 100
 
JE veux recopier la ligne A1 à J1 sur la ligne A9 à T9 en laissant des espaces (donc 20 cellules).
donc dans A9 je mets : =A1
Dans B9 je mets rien (puisque je saute une cellule).
Dans C9 je mets  : =B1
 
Le problème quand je recopie automatiquement, il me mets bien les espaces, mais ne recopie pas la suite d'avant.
Excel met alors dans E9 la valeur de E1 et non celle de C1 !!!
 
capture :
http://img67.imageshack.us/img67/3893/exqj9.jpg
 
 
 
PS : bien sur ceci est juste un exemple, car j'ai pas que 10 chiffres.
 
 

Reply

Marsh Posté le 16-08-2006 à 10:18:51    

En prenant très exactement ton exemple
dans la cellule A9, on met la formule =A1
dans la cellule B9, on met la formule
=IF(A9<>"";"";OFFSET(B9;-8;-(COLUMN(B9))/2+1))
(je connais pas le nom des fonctions offset et column en français)
 
et tu recopies à droite
 
voilà  :sol:


Message édité par Prozac le 16-08-2006 à 10:36:07
Reply

Marsh Posté le 16-08-2006 à 15:38:10    

merci prozac, j'au bien rentré cette formule. Mais çà ne marche pas.
 
Il me recopie : E9=E1 etc et non E9=C1.
 
Pourrais-tu expliquer cette formule ??
=IF(A9<>"";"";OFFSET(B9;-8;-(COLUMN(B9))/2+1))

Reply

Marsh Posté le 16-08-2006 à 19:10:50    

il faut recopier la formule qui est en B9 à droite, et pas celle en A9 (on n'y touche plus à celle là).
 
OFFSET devient DECALER en français, COLUMN devient COLONNE en français
La première cellule ou cette formule est copiée est B9
 
donc le fonctionnement donne :
si cellule à gauche est vide
alors vide
sinon  
cellule 8 lignes au dessus de la cellule actuelle, à gauche du (numéro de colonne)/2+1
 
(DECALER retourne la valeur contenue dans une cellule qui est située par rapport à la cellule entrée en premier argument, en ajoutant le nombre de ligne indiqué en 2eme argument, donc ici en négatif puisqu'on recherche en haut, et du nombre de colonnes à droite par rapport à la cellule du 1er argument).
 
Voilà voilà


Message édité par Prozac le 16-08-2006 à 19:12:18

---------------
La ligne droite n'est en aucun cas le plus court chemin entre deux points. Sauf, bien sûr, si les deux points sont bien alignés l'un en face de l'autre
Reply

Marsh Posté le 17-08-2006 à 14:31:18    

C'est bon çà marche  merci Prozac de ton aide !  
 
Mais d'autres problèmes !!  
 
Alors je viens de voir que excel est limité dans la cascade de condition SI ! On ne peut mettre que 7 conditions dans une formule !!
=SI(A1=3;"oui";SI(A2=8;"non";SI(...etc)
 
J'ai par exemple :
A1 à A20 des nombreux entiers entre 1 et 20.
Comment associer un prénom par ex. pour chaque nombre ?  
Si A1=2 alors marquer dans B1="jean", sinon si A1=3 marquer dans b1="Pierre",, sinon si A1=4 marquer dans B1="jaques" etc, dans B1 ça donne :
=SI(A1=2;"jean";SI(A1=3;"pierre";SI(...etc))))))
 
ca marche bien avec 7 conditions, mais au-delà il faudra une autre méthode !! Laquelle choisir? Je sais ma méthode, mais je ne connais pas trop les instructions...Et le SI me bloque là.

Reply

Marsh Posté le 17-08-2006 à 15:02:30    

Tu fais un tableau avec le chiffre et le prénom en correspondance et tu utilises la fonction recherchev, elle est faite pour ça

Reply

Marsh Posté le 17-08-2006 à 16:29:57    

Merci je vais voir pour recherchev.
 
Mais la forule avant que tu m'a donné marche !!
 
Mais j'y reviens, car je comprend vraiment pas pourquoi à la fin il y a "/2+1 ".
 
Et oui je débute !

Reply

Marsh Posté le 17-08-2006 à 16:29:57   

Reply

Marsh Posté le 18-08-2006 à 09:22:35    

La formule est pas super propre parce qu'il aurait mieux valu mettre  
-(COLUMN(C9)-1)/2) et non/2+1
 
Ben quand tu regardes où est la valeur que tu veux afficher, elle est à la moitié du chemin. si tu es à la colonne 100 (tu avances de 2 en 2), la valeur que tu cherches sera vers la moitié
 
Une remarque quand même : dans ton exemple, tu veux retourner une cellule vide pour toutes les colonnes pairs.  
 
Quand tu es dans la colonne I (la 10ème), la valeur dans la première ligne est 90, tu veux afficher 50 sur la 9eme ligne. la valeur 50 est dans la 5ème colonne, soit 4 colonnes à gauche de la 10ème.
 
Tu peux coller =-(COLUMN(C9)-1)/2 en C3 et recopier à gauche pour voir comment elle évolue (et =-(COLUMN(C9)/2)/+1 pour comparer
 
Pour les colonnes pairs, la version corrigée retourne un entier, alors qu'on a le même entier -0.5 avec la première formule. Ca marche mais c'est presque un coup de bol que DECALER accepte des décimaux et les arrondissent à l'entier supérieur

Reply

Marsh Posté le 20-08-2006 à 20:54:23    

Merci à tous !!
 
J'ai d'autres questions !!
 
J'ai une série de chiffres 0 1 2 3 4 6 7 8 9 2 5 4 8 7 5 4 1 2 5 2 5 4 6 4 etc....
Comment faire avec un copier/coller correspondre chaque chiffre dans une case ? A1 = 0    A2 = 1   A3 = 2 etc... ??  
 

Reply

Marsh Posté le 21-08-2006 à 09:09:45    

Copier/collage spécial (menu édition)/transposer : il colle le tableau copié en échangeant abscisse et ordonnées des cases

Reply

Marsh Posté le 23-08-2006 à 23:21:43    

Je me suis peut-être mal exprimé !!
 
MAis la série de chiffre est dans une seule case !!
 
C'est pour çà je veux transposer 0 1 2 3 4 6 7 8 9 2 5 4 8 7 5 4 1 2 5 2 5 4 6 4 (qui est en B1) en A1 = 0    A2 = 1 etc...

Reply

Marsh Posté le 24-08-2006 à 06:22:18    

Salut
La méthode de Prozac fonctionne à condition
1/Qu'il y ait un espace entre les chiffres
2/Que tu ailles dans Données/Convertir/Option Largeur fixe cochée par défaut

Reply

Marsh Posté le 24-08-2006 à 06:25:17    

Re,
 
S'il n'y a pas d'espace, Ctrl+H
Rechercher: 123456789
Remplacer par: 1 2 3 4 5 etc...

Reply

Marsh Posté le 24-08-2006 à 19:13:40    

TAM136 a écrit :

Salut
La méthode de Prozac fonctionne à condition
1/Qu'il y ait un espace entre les chiffres
2/Que tu ailles dans Données/Convertir/Option Largeur fixe cochée par défaut


 
Non, si c'est dans une seule case, je ne pense pas que ça marche. On peut faire une fonction qui trouve le bon chiffre à base de mid (en anglais) et en calculant la position du caractère à copier d'après l'ordonnée de la cellule. Et à condition que dans la série de chiffre, tous ne comportent qu'un seul chiffre.
 
 
Si il y a plusieurs chiffres, c'est encore possible mais beaucoup plus compliqué. Une fonction VBA serait alors plus simple.
Si on supprime les espaces et qu'il n'y a qu'un chiffre, on peut effectivement indexer directement la fonction mid sur l'ordonnée (avec la fonction ROW en anglais)


Message édité par Prozac le 24-08-2006 à 19:15:44

---------------
La ligne droite n'est en aucun cas le plus court chemin entre deux points. Sauf, bien sûr, si les deux points sont bien alignés l'un en face de l'autre
Reply

Marsh Posté le 31-08-2006 à 19:36:53    

Un truc simple pratique, j'ai pas trouvé la réponse !!
 
Dans B1 j'ai la formule :
=A1 + 1
Dans B2 la formule :
=A2 + 2
 
Comment incrémenter à chaque fois le chiffre de la formule : +1 ; +2 ensuite +3..etc ??

Reply

Marsh Posté le 31-08-2006 à 20:57:08    

Bonsoir
 
En utilisant peut-être la colonne C dans laquelle on fait une série:1,2,3...

Reply

Marsh Posté le 31-08-2006 à 21:06:23    

Tu tapes 1 en C1. Ensuite, tu copies. Tu vas par exempl en C50, tu sélectionnes la zone avec la touche Maj. Après, tu vas dans Edition/Remplissage/Série/Linéaire.

Reply

Marsh Posté le 31-08-2006 à 21:07:25    

oui je sais, mais çà serait pas plus facile d'incrémenter à l'aide d'une formule ?? Ca évite de surcharger..c'est pour çà que je pose la question...

Reply

Marsh Posté le 01-09-2006 à 10:28:22    

Surcharger quoi? Je ne comprends pas.
J'ai une macro. Par contre, elle ne fonctionne pas pour B1. Elle fonctionne parfaitement pour B2,B3.....
Sub Macro2()
For i = 1 To indiques le n° de ligne
For j = 1 To 1
Cells(i + 1, j + 1).Value = Cells(i + 1, j).Value + i
Next j
Next i
End Sub

Reply

Marsh Posté le 01-09-2006 à 12:22:43    

Sub Macro2()
Range("B1" ) = Range("A1" ) + 1
For i = 1 To 150
For j = 1 To 1
Cells(i + 1, j + 1).Value = Cells(i + 1, j).Value + i
Next j
Next i
End Sub

Reply

Marsh Posté le 01-09-2006 à 12:50:19    

Rere
 
Sub Macro2()
Range("B1" ) = Range("A1" ) + 1
For i = 1 To 150
For j = 1 To 1
Cells(i + 1, j + 1).Value = Cells(i + 1, j).Value + i + 1
Next j
Next i
End Sub
 
Ça devrait être bon.

Reply

Marsh Posté le 01-09-2006 à 19:28:28    

Si le numéro à incrémenter est lié au numéro de ligne, on peut utiliser la formule row(b2) dans la formule pour retourner 2 en b2, et recopier : ça retourne 3 en b3 etc (ça doit etre LIGNE(B2) dans les versions françaises).


---------------
La ligne droite n'est en aucun cas le plus court chemin entre deux points. Sauf, bien sûr, si les deux points sont bien alignés l'un en face de l'autre
Reply

Marsh Posté le 03-09-2006 à 14:13:20    

Merci, je suis entraint de voir les bases du visualbasic, ce que vous mettez ici parait relativement simple.
 
 
Pour les fonctions SI() imbriquées, Excel est limité à 7 ou 8.
J'ai déjà posée la question, on m'avait conseillé ici de faire un tableau avec une recherche.
Ca marche.
 
Mais avec une macro, peut-on imbriquer autant de SI() ou IF() que l'on veut ?
Pareil pour les fonctions logique....
Pour moi çà serait plus simple d'imbriquer les fonctions SI() que de faire des tableaux.

Reply

Marsh Posté le 03-09-2006 à 15:42:16    


 
 
Pour ceux à qui à pourrait aider !!
 
J ai trouvé une très bonne formule qui le fait !!
    *  La formule stxt():
 
       Cette fonction permet de renvoyer un nombre de caractères suivant une chaîne de caractères précédemment donnée et suivant la place et le nombre de caractères donnés:
 
        * Si le numéro de départ est supérieur à la longueur du texte alors la fonction renvoie la chaine vide ' '
        * Si le numéro de départ est inférieur à la longueur du texte, mais que l'addition de celui-ci et du nombre de caractères dépasse la longueur du texte, STXT renoie tous les caractères jusqu'à la fin du texte.
        * Si le numéro de départ est inférieur à 1, STXT renvoie une erreur.
        * Si le nombre de caractères est négatif, STXT renvoie aussi une erreur.
 
 
 

Reply

Marsh Posté le 03-09-2006 à 18:21:58    

Ça m'intéresse mais je n'ai pas compris comment tu fais pour extraire séparément chacun des caractères de la chaîne.
Admettons que j'ai 123456789 en A17. Si en A18, je veux 1, en A19,je veux 2....9 en A26. Je tape en A18 =STXT(A17;1;1) ce qui me permet de bien avoir 1 mais ensuite comment faire pour avoi 2 en A19...9 en A26?
 
Merci

Reply

Marsh Posté le 03-09-2006 à 22:12:23    

TAM136 a écrit :

Ça m'intéresse mais je n'ai pas compris comment tu fais pour extraire séparément chacun des caractères de la chaîne.
Admettons que j'ai 123456789 en A17. Si en A18, je veux 1, en A19,je veux 2....9 en A26. Je tape en A18 =STXT(A17;1;1) ce qui me permet de bien avoir 1 mais ensuite comment faire pour avoi 2 en A19...9 en A26?
 
Merci


 
 
Voilà c'est exactement le même problème que j'ai eu avec mon incrémentation avec le calcul, et tu m'a dis de créer une colone d'incrémentation avec 1;2;3;4;5;6 etc... oubien faire le truc en visualbasic.
 
Tu crées une colone s'incrémentation qui commence à B18, donc b19 = 2 etc...
Donc en A17 t'a (je change :D ) : ABCDEFGH etc.
En A18 tu veux A tu fais =STXT($A$17;B18;1)
Tu copie tout çà après.
 
B18=1 donc premier caractère soit A; le 1 est le nombre de caractère, si çà aurait été 2 tu aurais AB.
 
 :hello:

Reply

Marsh Posté le 05-09-2006 à 20:03:07    

 
Pour les fonctions SI() imbriquées, Excel est limité à 7 ou 8.
J'ai déjà posée la question, on m'avait conseillé ici de faire un tableau avec une recherche.
Ca marche.
 
Mais avec une macro, peut-on imbriquer autant de SI() ou IF() que l'on veut ?
Pareil pour les fonctions logique....
Pour moi çà serait plus simple d'imbriquer les fonctions SI() que de faire des tableaux.

Reply

Marsh Posté le 05-09-2006 à 21:08:33    

Bonsoir,
 
If Range("B1" ).Value = "CADRE" Then
Range("C1" ).Value = "Lundi"
End If
If Range("B2" ).Value = "ETUDIANT" Then
Range("C2" ).Value = "Mardi"
End If
If Range("B3" ).Value = "LIBERAL" Then
Range("C3" ).Value = "Mercredi"
End If
If Range("B4" ).Value = "CHOMEUR" Then
Range("C4" ).Value = "Jeudi"
End If
If Range("B5" ).Value = "RETRAITE" Then
Range("C5" ).Value = "Vendredi"
End If
If Range("B6" ).Value = "OUVRIER" Then
Range("C6" ).Value = "Samedi"
End If
If Range("B7" ).Value = "ARTISAN" Then
Range("C7" ).Value = "Dimanche"
End If
If Range("B8" ).Value = "FAINEANT" Then
Range("C8" ).Value = "Lit"
End If
If Range("B9" ).Value = "VOLEUR" Then
Range("C9" ).Value = "Prison"
End If
End Sub

Reply

Marsh Posté le 05-09-2006 à 21:23:46    

Re,  
 
Je pense qu'il y a plus simple avec Select case (peut-être) mais je ne vois pas comment faire.

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed