Rechercher : dans
Par :

[EXCEL] Affecter une formule à une colonne

Dernière réponse le 26 déc 2008 à 10:19:47 Antoine, le 24 jui 2007 à 16:36:11 
 Signaler ce message aux modérateurs

Bonjour,

Ma question va sûrement passer pour stupide, mais je suis nouveau venu dans le joyeux monde des formules Excel.

Voila mon problème: j´aimerais que toutes les cellules d´une colonne acquièrent une valeur en fonction de la cellule de la colonne précedente. Le problème est notamment que si la cellule de la colonne précedente est vide, je ne veux pas qu´apparaisse un "#N/A".

En gros je ne veux pas devoir utiliser la recopie incrémentée.

Pour être plus précis, dans ma colonne E ne peuvent être entrées que certaines données (chaque cellule propose donc un menu déroulant). Toutes les options contenues dans ce menu sont situées dans une matrice, et dans la colonne de droite de la matrice leur est associée une autre valeur.
Je voudrais que ma colonne F me donne automatiquement la valeur associée dès que je choisis la valeur dans E. Et que si les cases sont vides dans E, les cellules de F ne renvoient pas un "#N/A".
La formule utilisée est une recherchev, ce qui marche bien avec une recopie incrémentée, mais mon but est que l´utilisateur n´ait qu´à choisir des options et rentrer des valeurs, rien de plus.

Je vous remercie

Antoine

Configuration: Windows XP
Internet Explorer 6.0

1

Volkrin, le 24 jui 2007 à 17:32:16

Je suis pas sur de bien saisir ton problème, mais si tu veux pas que ca affiche N/A quand il n'y a rien de choisi tu peux utilisé la fonction IF() exemple :

=IF(E1 = "";"";E1)

ce que ca fait c'est que ca vérifie si E1 est vide si oui, il met vide dans la case ou est la formule sinon, il met le contenu de la case E1

volkrin

Répondre à Volkrin

2

Alain42, le 24 jui 2007 à 17:47:18

Pour être plus précis:

=IF(E1 = "";recherchev(.....etc...))

c'est à dire si la cellule est vide on ne fait rien sinon la fonction s'applique.

et la tu peux utiliser ensuite la copie incrémentée.

Une petite astuce que tu connais peut être :

si dans une copie incrémentée tu ne veux pas qu'une ligne ou une colonne ne s'incrémente, tu mets $ devant

Répondre à Alain42

3

Antoine, le 24 jui 2007 à 19:49:31

C´est effectivement cette formule que je cherchais, merci beaucoup^^

Cependant, j´aimerais que cette formule s´applique automatiquement à toutes les cellules de ma colonne F (à moins que ce ne soit beaucoup trop lourd...). En effet, je vais devoir protéger quasiment tout le contenu (le document ne m´est pas destiné), et le but est que rien (a part les entrees des cellules) ne soit modifiable. Donc pas de copie incrémentée possible.

Merci

Répondre à Antoine

4

Alain42, le 24 jui 2007 à 20:39:21

Tu fais la copie incrémentée avant de protéger ton document bien sur.

Et cela de la première ligne à la dernière ligne de ta feuille.

Répondre à Alain42

5

Vaucluse, le 25 jui 2007 à 20:20:14

A tout hasard, pour éviter la copie sur toutes les lignes (c'est long):
Sélectionner la colonne
Taper la formule correspondant à la premiere ligne
Fermer avec ctrl+ entrée
C'est aussi valable pour renter une valeur sur des cellules consécutives ou dispersées après une sélection collective

Répondre à Vaucluse

6

Antoine, le 25 jui 2007 à 22:37:39

Merci à vous, ca fonctionne correctement...

Répondre à Antoine

7

mha, le 14 jui 2008 à 12:05:57

Bonjour,

Voici 1 ligne d'informations séparée par des underscore qu'il faut que j'indique dans plusieurs colonnes c'est à dire :

44900000_040_0_001001_AE.pdf
Colonne A sans underscore :
44900000
Colonne B sans underscore :
040
Colonne C sans underscore :
0
Colonne D :
001001
J'arrive à faire la 1re formule pour les 8 chiffres mais après ça ne marche plus !
Faut-il enlever les underscores avant, quelle est la procédure à adopter.
Merci d'avance pour votre aide.

MHA

Répondre à mha

8

Vaucluse, le 14 jui 2008 à 18:31:57

Bonsoir

Ne vous attendez pas à beaucoup de réponses en vous accrochant sur un sujet vieux d'un an...!
Voila quand même deux solutions dans le fichier que vous poourrez copier au joint ci dessous.
Bon courage.
Bien cordialement

http://www.cijoint.fr/cjlink.php?file=cj200807/cijU0oO0PM.xl­s La vérité ne se possède pas, elle se cherche seulement

Répondre à Vaucluse

9

Sylv@nor, le 18 déc 2008 à 12:04:05
  • +1

>Antoine, le mardi 24 juillet 2007 à 16:36:11
>(...)
>En gros je ne veux pas devoir utiliser la recopie incrémentée.
Pile poil ma problématique. Même après autant de temps.

>Alain42, le mardi 24 juillet 2007 à 17:47:18
>et la tu peux utiliser ensuite la copie incrémentée.
Pile poil la manipulation à éviter... C'est super lourd et complètement bancal à la moindre modification, surtout reliée à un SGBD. De plus, l'énoncé était précis (rare sur les forums pour que je le souligne avec un grand remerciement).

>Vaucluse, le mercredi 25 juillet 2007 à 20:20:14
>A tout hasard, pour éviter la copie sur toutes les lignes
Ah, une piste intéressante ?

>Taper la formule correspondant à la premiere ligne
>Fermer avec ctrl+ entrée
Muais... Encore un truc à tapoter à la main...

J'écris de manière générale : j'espère que les commentaires proviennent d'une vision de secrétaire. Non, aucun aspect négatif à entrevoir dans la phrase précédente : je ne parle que de ce que l'on m'a enseigné, c'est-à-dire que de manière caricaturale, un secrétaire (voire greffier ou gratte-papier) se contente schématiquement de tapoter et copier/coller. C'est un long travail fastidieux.

Mais sous une vision d'informaticien (donc réfléchie), la problématique est tout de suite plus facile (sous réserve d'agir de manière ordonnée). Sans être expert (voire même néophyte en la matière), j'ai pu trouver la réponse, que j'inscris ici pour tous ceux qui en auraient besoin (y compris pour ma part si j'oublie entre-temps).

Je suis néanmoins parti de la piste donnée en filigrane par Vaucluse. Mais en y ajoutant un peu de mon grain de sel : les macros. On crée une nouvelle macro (vive les tutos "internetiens") en exécutant les instructions. Une fois Ctrl+Entrée effectué, on finit l'enregistrement. Et on regarde la macro puis on l'analyse.

L'ajout qui a été apporté, c'est de pouvoir exécuter la macro en revenant à la cellule qui était pointée par le curseur. Sur ce qui suit, le cas est de pouvoir copier les données de la colonne A en colonne B : aucune utilité en soi, je vous l'accorde mais le but ici doit être avant tout instructif.

Et l'on obtient ceci :

Sub MacroFormuleColonneB()
    Call MacroFormuleColonne("B", "=RC[-1]")
End Sub

Sub MacroFormuleColonne(LettreColonne As String, Formule As String)
    'Déclarations
    Dim CelluleSave
    Dim ConvertCountColumn As Integer
    Dim ConvertCountRow As Integer
    Dim ConvertCountCell As String
    Dim ConvertCountCharA As Integer
    
    'Initialisations
    CelluleSave = ActiveCell.Address
    ConvertCountColumn = ActiveCell.Column
    ConvertCountRow = ActiveCell.Row
    ConvertCountCharA = Asc("A")
    ConvertCountCell = Chr$(ConvertCountCharA + (ConvertCountColumn - 1)) & ConvertCountRow
    
    'Traitement
    Columns(LettreColonne & ":" & LettreColonne).Select
    Selection.FormulaR1C1 = Formule
    Range(ConvertCountCell).Select
End Sub


Suivant la problématique de tout un chacun, ce sera facile de l'adapter.

De plus, cette solution permet, au chargement de la feuille Excel, d'appeler automatiquement notre macro de colonne. Sous le VB lié à Excel, on inscrit au bon endroit* (c'est-à-dire le VB des feuilles et non celui des macros et modules VB) :
Private Sub Worksheet_Activate()
    Call MacroFormuleColonneB
End Sub

* Il y a un explorateur de projet VB une fois que celui-ci est en fenêtre active.

Ainsi, j'espère que ce grand paragraphe vous démontrera qu'il est possible de faire simple et efficace. Les puristes diront que cela nécessite l'utilisation de macros à devoir activer, qu'il y a des risques, etc. Pour les risques, non, il n'y en a aucun si ce n'est que des macros dont on crée soi-même ou qu'on en comprend le fonctionnement. Chaque situation est unique mais ceci répondra à la majorité des cas. Bonne journée à tous.

P.S. Certes, cette solution est limitative : elle n'agit que sur les 26 premières colonnes. Une fois de plus, si votre cas ne correspond pas, il faut adapter. Comme toujours, c'est possible de le faire.

Répondre à Sylv@nor

10

Sylv@nor, le 18 déc 2008 à 12:08:29

Deux lignes sont inutiles et ne devraient rester que sur des brouillons :

Dim CelluleSave

et
CelluleSave = ActiveCell.Address

Elles peuvent donc être retirées (optimisation du code).

Répondre à Sylv@nor

11

zennnn, le 21 déc 2008 à 12:25:21

Mmm, je cherche une fonction similaire

un tableau doit calculer des implémentations de pages
j'ai donc un cellule de référence donnant le nombre de feuilles

j'essaye d'appliquer la formule sur toute les cellules de calcul, avec un résultat calculé par cellule valide et 0 si je dépasse la référence. Pour cela ma formule est bonne :-)
mais si je la copie dans les autres cellules, mes cellules de références changent aussi
et là je ne sais pas comment copier en bloquant dans la formule des éléments qui eux restent fixe

pas simple d'expliquer , un petit exemple :

IF(K34<=F18;A33+2;0)

l'analyse de fait de K34 à K210
F18 est le référent, donc doit toujours rester F18
A33 lui s'incrémente également jusque A209
comme l'indique la formule, si K.. dépasse le référent F18, la cellule calculée devient "0")

Ce n'est pas d'une importance capitale si ce n'est pas possible, mais j'aime trouver ce qui me facilite la vie.

Merci d'avance

Répondre à zennnn

12

Vaucluse, le 24 déc 2008 à 11:19:48

Bonjour
Un peu tard peut être, la réponse:
il faut simplement bloquer la cellule référente avec le signe $
IF(K34<=$F$18;A33+2;0)
pour mémoire:
$F18 vous bloque la colonne quand vous déplacez la cellule en ligne
F$18 vous bloque la ligne quand vous déplacez en colonne
$F$18 bloque dans les deux sens
Crdlmnt La vérité ne se possède pas, elle se cherche seulement

Répondre à Vaucluse

13

zennnn, le 24 déc 2008 à 19:48:21

Merci Vaucluse
j'ai appris quelques chose de nouveau :-)
j'essayerai ce we.
Bonne fêtes !!!

Répondre à zennnn

14

zennnn, le 25 déc 2008 à 19:00:10

Impeccable ! ce qui me permet en plus de "masquer" les cellules dont le résultat sont égaux à 0 (via la mise en forme conditionnelle - texte et cellule de couleur blanche.

Encore merci.

Répondre à zennnn

15

 Vaucluse, le 26 déc 2008 à 10:19:47

Bonjour Zenn

encore un petit truc:
si vous voulez des tableaux ou n'apparait aucun 0, il y a une solution plus simple:
Barre des taches / Outils / Option
Onglet affichage et Décochez "valeur 0

Crdlmnt La vérité ne se possède pas, elle se cherche seulement

Répondre à Vaucluse