Problème excel insertion de ligne décalée

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

A voir également:

7 réponses

Submin Messages postés 463 Statut Membre 226
 
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
0
f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 715
 
Bonjour,
Pour le premier tableau, faites vous une insertion par le haut du tableau?
Pour les autres vous voulez faires de meme?
0
manu6783
 
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.
0
Submin Messages postés 463 Statut Membre 226
 
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
manu6783 Messages postés 1 Statut Membre
 
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!!
0
Submin Messages postés 463 Statut Membre 226
 
Bonjour,

Désolé hiers j'ai du m'absenter et du coup je m'oiccupe de ça aujourd'hui, j'espère qu'il n'est pas trop tard
0
Submin Messages postés 463 Statut Membre 226
 
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)

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
0
manu6783
 
Merci beaucoup je vais essayer ça!
0