> Tous les forums > Forum Bureautique
 vba : ds tableau, insérer ligne (non entière) avec reprise formuleSujet résolu
Ajouter un message à la discussion
Page : [1] 
Page 1 sur 1
doudoularelou
  Posté le 05/06/2013 @ 11:34 
Aller en bas de la page 
Petite astucienne

Bonjour,

Je ne sais pas si l'endroit où je dépose mon post est le bon, si ce n'est pas le cas, je m'en excuse d'avance.

Je cherche depuis qq jours un code vba (que je relierai à un bouton ensuite) qui me permet d'ajouter une ligne dans un tableau à partir de la ligne (quelque soit la cellule choisie) où le curseur se situe.

Attention la feuille Excel contient d'autres données, je ne souhaite donc ajouter une ligne sur un nombre de colonnes défini.

Une fois la ligne ajoutée, je souhaite que 3 des cellules ajoutées contiennent des formules.

Ex : le tableau contient des colonnes de A à F.

En A17, j'ai cette formule : =SI(C17="Liste ingrédients";"1";"2")

En B17 : =RECHERCHEV(D17;Table_noms;2;FAUX)

En C17 : =RECHERCHEV(D17;Table_noms;4;FAUX)

J'ai enregistré une macro en réalisant les manips voulues :

Sub ajouter()
ActiveCell.Offset(1, -3).Range("A1:F1").Select
Selection.Insert Shift:=xlDown
ActiveCell.Offset(-1, 0).Range("A1").Select
ActiveCell.FormulaR1C1 = "=IF(RC[2]=""Liste ingrédients"",""1"",""2"")"
ActiveCell.Offset(1, 0).Range("A1").Select
ActiveSheet.Paste
ActiveCell.Offset(-1, 1).Range("A1").Select
ActiveCell.FormulaR1C1 = "=VLOOKUP(RC[2],Table_noms,4,FALSE)"
ActiveCell.Offset(1, 0).Range("A1").Select
ActiveSheet.Paste
ActiveCell.Offset(-1, 1).Range("A1").Select
ActiveCell.FormulaR1C1 = "=VLOOKUP(RC[1],Table_noms,2,FALSE)"
ActiveCell.Offset(1, 0).Range("A1").Select
ActiveSheet.Paste
End Sub

mais lorsque je l'exécute, elle plante dès la 1ère ligne...

Je n'ai pas trouvé de post relatifs à ce sujet, principalement avec un nombre de colonnes défini (et non une colonne entière) et à partir de la ligne ou le curseur est positionné.

Pouvez vous m'aider SVP ?

Merci

PS : j'utilise Excel 2003

Publicité
ferrand
 Posté le 05/06/2013 à 14:35 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

Salut,

Si tu te trouvais en D17 lorsque tu as enregistré ta macro, la première ligne de code sélectionne la plage A18:F18... Si tu lances la macro en étant positionné en colonne A, B ou C, elle va évidemment planter, ne pouvant opérer de sélection en deçà de la colonne A. Si tu la lances en étant positionné après D, elle ne va pas planter, mais te fournira certainement un résultat autre que celui attendu. En D, ça devrait marcher ! En te positionnant au-dessus de la ligne que tu veux insérer, puisque c'est ainsi que tu as procédé lors de l'enregistrement... (NB: Excel insére une ligne au-dessus de la sélection en déplaçant l'existant vers le bas, il serait donc préférable d'harmoniser ta méthode avec celle d'Excel !)

Et puis il faudrait réécrire la macro en éliminant toutes les sélections produites par l'enregistrement.

Méthode pour te sortir des problèmes liés à l'enregistrement :

Tu veux introduire une ligne de A à F entre la ligne 20 et la ligne 21 : tu te positionnes donc où tu veux sur la ligne 21. Il faut que ton code identifie la ligne et réalise l'insertion. Tu vas donc commencer par récupérer le numéro de ligne d'insertion dans une variable pour pouvoir poursuivre sans risque d'erreur de ligne ou colonne.

Sub ajouter()
Dim n% 'tu déclares une variable, le "%" signifie qu'elle est de type Integer
n = ActiveCell.Row 'tu affectes à la variable le numéro de ligne sélectionnée
Range("A" & n & ":F" & n).Insert xlShiftDown 'tu insères ta ligne sur les 6 premières colonnes
Range("A" & n - 1 & ":C" & n - 1).Copy Range("A" & n) 'là tu copies les formules de la ligne préc. (A à C) pour les coller sur la nouvelle ligne
End Sub



Modifié par ferrand le 05/06/2013 14:37
doudoularelou
 Posté le 05/06/2013 à 15:49 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petite astucienne

Cool !

Merci Ferrand, pour le code et tes éclaircissements.

Question subsidiaire...ça se corse...

J'ai testé ton code sur ma feuille et ça fonctionne parfaitement.

Excepté le fait que (et je ne l'ai pas précisé auparavant) lorsque l'ajout de ligne se fera, la feuille sera protégée et les colonnes de A à C seront masquées.

Malheureusement, l'excécution de la macro ne fonctionne pas à ce moment là.

Est ce le fait qu'elle est protégée ou bien que les colonnes sont masquées qui crée le plantage ? ou bien les 2 ? ou carrément autre chose...?

Merci

ferrand
 Posté le 05/06/2013 à 18:32 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

Tant mieux si ça marche, car tu n'avais pas donné tous les détails...

Si la feuille est protégée, il faut naturellement la déprotéger:

ActiveSheet.Unprotect motdepasse(s'il y en a un)

à placer avant première commande qui intéresse la feuille, puis

ActiveSheet.Protect motdepasse(si...)

pour reprotéger ensuite.

doudoularelou
 Posté le 07/06/2013 à 14:17 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petite astucienne

Merci Ferrand.

Ca semble tellement évident... Je me suis même pas interrogée sur "peut etre qu'il faudrait que je déverrouille la feuille dans ma macro"...

Je sais, je sais, mon cerveau n'est certainement pas bien paramétré lui non plus...!

Mon fichier est "quasi" propre maintenant et donc beaucoup plus agréable à utiliser.

A bientôt

ferrand
 Posté le 07/06/2013 à 15:08 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

Juste quelques réflexes à acquérir

Pour les lignes ou colonnes masquées VBA s'en moque en général (sauf cas de quelques commandes qui fonctionnent de la même façon que lorsqu'elles sont utilisées manuellement dans Excel, et qui ne fonctionnent pas sur des éléments masqués comme la recherche [Find]...)

Page : [1] 
Page 1 sur 1

Vous devez être connecté pour poster des messages. Cliquez ici pour vous identifier.

Vous n'avez pas de compte ? Créez-en un gratuitement !


Sujets relatifs
insérer un symbole avec une formule conditionnelle
Faire un tableau avec les données qu'en ligne ??
insérer un retour ligne dans une formule excel
insertion de ligne avec formule ligne précédente
formule avec retour à la ligne ?!
Faire un tableau sur Excel avec des sauts de lignes
Insérer un texte dans plusieurs champs avec Word
Formule de comptage avec filtre
Comment insérer un tableau Excel de calcul dans un site?
Formule de choix avec 3 conditions
Plus de sujets relatifs à vba : ds tableau, insérer ligne (non entière) avec reprise formule
 > Tous les forums > Forum Bureautique