Problème excel insertion de ligne décalée
manu6783
-
manu6783 -
manu6783 -
Bonjour, je suis débutant en vba excel et j'ai un souci qui pourrait vous paraitre simple. En fait, j'ai un fichier avec trois tableaux placés sur la même verticale. Il y a pour chacun de ces tableaux un bouton qui doit permettre à l'aide de macro de rajouter une ligne au tableau. Le souci ne se pose pas pour le premier tableau mais en revanche pour les deux d'en dessous j'ai un problème.
Puisqu'aux boutons j'ai associé un ajout de ligne, si j'utilise le premier bouton en premier (celui d'en haut donc) cela décale le numéro des lignes et du coup me décale mon ajout de ligne des tableaux d'en bas (ajout qui devrait se faire en bas des tableaux en copiant les choix que proposaient ceux-ci). Je ne sais pas si je me suis bien exprimé ou pas. En tt cas, si quelqu'un sait comment faire cela pourrait beaucoup m'aider! merci beaucoup
Puisqu'aux boutons j'ai associé un ajout de ligne, si j'utilise le premier bouton en premier (celui d'en haut donc) cela décale le numéro des lignes et du coup me décale mon ajout de ligne des tableaux d'en bas (ajout qui devrait se faire en bas des tableaux en copiant les choix que proposaient ceux-ci). Je ne sais pas si je me suis bien exprimé ou pas. En tt cas, si quelqu'un sait comment faire cela pourrait beaucoup m'aider! merci beaucoup
A voir également:
- Problème excel insertion de ligne décalée
- Liste déroulante excel - Guide
- Partage de photos en ligne - Guide
- Formule somme excel ligne - Guide
- Word et excel gratuit - Guide
- Formulaire en ligne de meta - Guide
7 réponses
Utilises :
Rows("X:X").Insert Shift:=xlDown
X:X corespondant a la ligne au dessus de celle que tu veux rajouter, sinon mets xlup à la fin
Exemple :
Rajouts d'une ligne au dessus de la ligne 5 :
Rows("5:5").Insert Shift:=xlDown
Rows("X:X").Insert Shift:=xlDown
X:X corespondant a la ligne au dessus de celle que tu veux rajouter, sinon mets xlup à la fin
Exemple :
Rajouts d'une ligne au dessus de la ligne 5 :
Rows("5:5").Insert Shift:=xlDown
Bonjour,
Pour le premier tableau, faites vous une insertion par le haut du tableau?
Pour les autres vous voulez faires de meme?
Pour le premier tableau, faites vous une insertion par le haut du tableau?
Pour les autres vous voulez faires de meme?
Merci pour vos réponses même si elles ne résolvent pas mon problème. Je fais les insertions en bas des tableaux. J'ai essayé avec Rows("X:X").Insert Shift:=xlDown.
Le souci c'est que imaginons que le bas de mon premier tableau soit à la ligne 6, mon second à la ligne 12 et mon dernier à la ligne 18.
Si j'applique Rows("18:18")... par exemple et bien si j'insère en premier lieu une dizaine de lignes dans le premier tableau, mon second et mon troisième s'en retrouvant décalé vers le bas, la macro Rows("18:18") m'ajoutera une ligne là où je ne le souhaite pas. Bref je sais pas si ce que je cherche à faire est possible en fait.
Le souci c'est que imaginons que le bas de mon premier tableau soit à la ligne 6, mon second à la ligne 12 et mon dernier à la ligne 18.
Si j'applique Rows("18:18")... par exemple et bien si j'insère en premier lieu une dizaine de lignes dans le premier tableau, mon second et mon troisième s'en retrouvant décalé vers le bas, la macro Rows("18:18") m'ajoutera une ligne là où je ne le souhaite pas. Bref je sais pas si ce que je cherche à faire est possible en fait.
Si c'est possible il te faut juste une variable qui mémorise a quelle ligne commence le tableau en question...
Exemple...
Imaginons que tous tes tableaux font 5 lignes au départ et que tu as une cellule qui départage chaque tableau
Tableau 1 : ligne 1 à 5
Tableau 2 : ligne 7 à 11
Tableau 3 : ligne 13 à 17
A chaque fois que tu va cliqué sur un bouton ( a coté de chaque tableau) il faut tu recalcule ce nombre.
Si tu es dans le premier tableau, pas de problème c'est 1
Second tableau, tu scrutes la premiere colonne jusqu'a la premiere cellule vide et ensuite tu vérifie que la cellule suivant est bien non vide (il s'agira de la ligne ou démarre ton second tableau)
Pour le troisième tableau tu fait la meme chause que le second tableau sauf que tu cherche la deuxième colonne non vide.
Dis moi si j'ai bien compris ton problème et si tu valide j'essai de codé un petit truc...
Dis moi quelle colonne tu utilises, a partir de la ligne combien? et le nombre de cellule qui sépare chaque tableau
Exemple...
Imaginons que tous tes tableaux font 5 lignes au départ et que tu as une cellule qui départage chaque tableau
Tableau 1 : ligne 1 à 5
Tableau 2 : ligne 7 à 11
Tableau 3 : ligne 13 à 17
A chaque fois que tu va cliqué sur un bouton ( a coté de chaque tableau) il faut tu recalcule ce nombre.
Si tu es dans le premier tableau, pas de problème c'est 1
Second tableau, tu scrutes la premiere colonne jusqu'a la premiere cellule vide et ensuite tu vérifie que la cellule suivant est bien non vide (il s'agira de la ligne ou démarre ton second tableau)
Pour le troisième tableau tu fait la meme chause que le second tableau sauf que tu cherche la deuxième colonne non vide.
Dis moi si j'ai bien compris ton problème et si tu valide j'essai de codé un petit truc...
Dis moi quelle colonne tu utilises, a partir de la ligne combien? et le nombre de cellule qui sépare chaque tableau
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
oui c'est exactement ça!
Alors en fait mon premier tableau commence en B6 et va jusqu'a K16
Ce tableau est composé de la sorte :
Ligne 6 ==> titres de catégories
Ligne 7 et 8==> choix de la couche de roulement
Ligne 9 et 10==> choix de la couche de base
Ligne 11 et 12 ==> Choix de la couche de fondation
Ligne 13 et 14 ==> choix de la couche de forme
Ligne 15 ==> Ici on a le choix avec une liste déroulante qui renvoie sur une autre liste déroulante ect
Ligne 16 ==> Identique à 15
Du coup mes lignes 6 à 14 n'ont pas besoin d'avoir de possibilité d'ajout de choix supplémentaire. En revanche, je dois pouvoir insérer en dessous de la ligne 16, une ligne identique à la ligne 16 (ou 15) dans laquelle je pourrais faire des choix différents.
Mes autres tableaux fonctionnent de la même façon !
Tableau 2 ==> B18 à K28
Tableau 3 ==> B30 à K40
Merci beaucoup pour votre aide!!
Alors en fait mon premier tableau commence en B6 et va jusqu'a K16
Ce tableau est composé de la sorte :
Ligne 6 ==> titres de catégories
Ligne 7 et 8==> choix de la couche de roulement
Ligne 9 et 10==> choix de la couche de base
Ligne 11 et 12 ==> Choix de la couche de fondation
Ligne 13 et 14 ==> choix de la couche de forme
Ligne 15 ==> Ici on a le choix avec une liste déroulante qui renvoie sur une autre liste déroulante ect
Ligne 16 ==> Identique à 15
Du coup mes lignes 6 à 14 n'ont pas besoin d'avoir de possibilité d'ajout de choix supplémentaire. En revanche, je dois pouvoir insérer en dessous de la ligne 16, une ligne identique à la ligne 16 (ou 15) dans laquelle je pourrais faire des choix différents.
Mes autres tableaux fonctionnent de la même façon !
Tableau 2 ==> B18 à K28
Tableau 3 ==> B30 à K40
Merci beaucoup pour votre aide!!
En considérant un bouton a coté de chaque tableau comme tu as dis au début
CommandButton1 pour le tableau 1
CommandButton2 pour le tableau 2
CommandButton3 pour le tableau 3
Voici ce que je te propose, dis moi si cela te convient ou si tu souhaites des améliorations. Je ne savais pas ce qu'il y avait exactement dans tes colonnes donc j'ai simplement fait un copier coller de la ligne du dessus histoire que tu es tes listes déroulantes qui soit copié. Du coup si qui est dans les autres colonnes sera copier aussi mais il te suffit juste de rajouter quelque ligne si tu souhaite rendre certaine cellule vierge.
Voici le code : (LaLigne est une variable globale)
CommandButton1 pour le tableau 1
CommandButton2 pour le tableau 2
CommandButton3 pour le tableau 3
Voici ce que je te propose, dis moi si cela te convient ou si tu souhaites des améliorations. Je ne savais pas ce qu'il y avait exactement dans tes colonnes donc j'ai simplement fait un copier coller de la ligne du dessus histoire que tu es tes listes déroulantes qui soit copié. Du coup si qui est dans les autres colonnes sera copier aussi mais il te suffit juste de rajouter quelque ligne si tu souhaite rendre certaine cellule vierge.
Voici le code : (LaLigne est une variable globale)
Dim LaLigne As Integer
Private Sub Initialisation()
LaLigne = 6
End Sub
Private Sub CommandButton1_Click()
Dim i As Integer
Dim Validate As Boolean
Initialisation
Validate = False
Sheets(1).UsedRange
For i = LaLigne To Cells.SpecialCells(xlLastCell).Row + 1
If Cells(i, 2) = "" And Validate = False Then
LaLigne = i
Validate = True
End If
Next i
Rows(LaLigne).Insert Shift:=xlDown
Rows(LaLigne - 1).Copy
Rows(LaLigne).Select
ActiveSheet.Paste
End Sub
Private Sub CommandButton2_Click()
Dim i As Integer
Dim Validate As Integer
Initialisation
Validate = 0
Sheets(1).UsedRange
For i = LaLigne To Cells.SpecialCells(xlLastCell).Row + 1
If Cells(i, 2) = "" And Validate < 2 Then
LaLigne = i
Validate = Validate + 1
End If
Next i