× Aidez la recherche contre le COVID-19 avec votre ordi ! Rejoignez l'équipe PC Astuces Folding@home
 > 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 !


Les bons plans du moment PC Astuces

Tous les Bons Plans
106,99 €Disque dur externe portable Western Digital Elements USB 3.0 5 To à 106,99 €
Valable jusqu'au 25 Octobre

Amazon propose actuellement le disque dur externe portable Western Digital Elements USB 3.0 5 To à 106,99 € livré gratuitement. On le trouve ailleurs à partir de 149 €. Ce disque dur qui tient dans la main est silencieux, ne chauffe pas et dispose d'une connectique USB 3.0 qui vous offrira des transferts rapides. Il est compatible USB 2.0.


> Voir l'offre
89,14 €Smartphone 6.53 pouces Xiaomi Redmi 9C (2 Go / 32 Go) à 89,14 € (stock Europe)
Valable jusqu'au 25 Octobre

Banggood fait une promotion sur le smartphone 6.53 pouces Xiaomi Redmi 9C qui passe à 89,14 €. Ce smartphone dispose d'un écran 6.53 pouces HD, un processeur 8 coeurs Helio G35, 2 Go de mémoire, de 32 Go d'espace de stockage extensible par microSD, d'un triple APN 13 MP, du bluetooh, du Wifi. Il est compatible avec les fréquences 2G, 3G et 4G. Le tout tourne sous Android 9 avec une surcouche Xiaomi que vous pouvez mettre en français dès le premier démarrage. La batterie est de haute capacité 5000 mAh. Un portable d'entrée de gamme complet idéal pour un pré ado.

Le téléphone est expédié depuis les entrepôts espagnols de Banggood et vous sera donc livré rapidement avec aucun risque de douane.


> Voir l'offre
18,99 €SSD PNY CS900 120 Go à 18,99 €
Valable jusqu'au 24 Octobre

Cdiscount fait une promotion sur le SSD PNY CS900 120 Go qui passe à 18,99 €. Ce SSD offre des vitesses d'écriture de 515 Mo/s et de lecture à 550 Mo/s. Il est garanti 3 ans. 


> Voir l'offre

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