Excel : Fonction SI() imbriquée supérieure à 7 !! - Logiciels - Windows & Software
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...?
Marsh Posté le 15-08-2006 à 22:57:01
TAM136 a écrit : Salut |
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 :
PS : bien sur ceci est juste un exemple, car j'ai pas que 10 chiffres.
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à
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))
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à
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à.
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
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 !
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
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... ??
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
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...
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
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...
Marsh Posté le 24-08-2006 à 19:13:40
TAM136 a écrit : Salut |
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)
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 ??
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...
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.
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...
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
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
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.
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).
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.
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.
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
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. |
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 ) : 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.
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.
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
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.
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
***********************************************************************************
***********************************************************************************
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