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

7 réponses

  1. 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
  2. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    Bonjour,
    Pour le premier tableau, faites vous une insertion par le haut du tableau?
    Pour les autres vous voulez faires de meme?
    0
  3. 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
  4. 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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. 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
    1. 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
  7. 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
  8. manu6783
     
    Merci beaucoup je vais essayer ça!
    0