IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Problème incrémentation dernière ligne


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 45
    Points : 16
    Points
    16
    Par défaut Problème incrémentation dernière ligne
    Bonjour les amis, je cherche à coder un bouton qui me permet d'ajouter une ligne en plus à la fin de ma liste lorsque l'on click dessus.
    Mon problème, c'est que la ligne se crée à chaque fois au dessus et non au dessous de la dernière ligne.
    Pouvez vous m'aider ?

    Bien cordialement. Ci joint le classeur avec le code inclus : BD_lab4.xlsm
    Onglet : Index

    et voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    Sub ajouter()
     
    Dim vnom As String, vrech As Range, derlign As Long
    'nom du tableau
    vnom = "N°"
    'je recherche le nom dans la colonne A
    Set vrech = Columns(1).Find(vnom)
    'si je trouve le nom alors
    If Not vrech Is Nothing Then
     'je récupère le n° de ligne de la fin du tableau correspondant
     derlign = Range("A" & vrech.Row).End(xlDown).Row
     
     
    'Tableau 1
    'faire une nouvelle ligne
    Range("A" & derlign).EntireRow.Insert Shift:=xlDown
     
    'copier la ligne du dessus
    'Range("A" & derlign).Offset(-1, 0).EntireRow.Copy Cells(derlign, 1)
    'On Error Resume Next
     
    'effacer le contenu de la nouvelle ligne mais garder la forme
    'Range("A" & derlign).EntireRow.SpecialCells(xlCellTypeConstants, 23).ClearContents
    End If
     
    End Sub

  2. #2
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 138
    Points : 9 972
    Points
    9 972
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    décale toi d'une ligne supplémentaire quand tu fais ton insertion dans ce cas ?

  3. #3
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    derlign = Range("A" & vrech.Row).End(xlDown).Row +1

  4. #4
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 45
    Points : 16
    Points
    16
    Par défaut
    Le problème c'est que cette colonne est nommée et utilisée dans la première feuille (dans une liste déroulante) et que la plage des noms ne s'incrémente pas. Je sais pas trop si vous voyez ce que je veux dire

  5. #5
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub test()
    Dim t As Range, derl1 As Long, derl2 As Long
    Set t = Range("toto") 'Plage nommé!
    derl1 = t.Rows.Count
    t.Rows(t.Rows.Count).Insert
    derl2 = t.Rows.Count
    t(derl1).FormulaR1C1 = t(derl2).FormulaR1C1
     t(derl2) = ""
    MsgBox "Avant: " & derl1 & " Après: " & derl2
    End Sub

  6. #6
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 45
    Points : 16
    Points
    16
    Par défaut
    Tout d'abord merci

    =)

    Je suis désolé de demander cela mais je n'ai pas l'habitude sur VBA et j'aimerai savoir dans ton code ce que je dois modifier pour que la seconde colonne s'incrémente elle aussi (dans la seconde feuille) mais sachant que l'incrémentation du nom "N°" se fait uniquement sur la première colonne.

    Merci Bien =)

  7. #7
    Invité
    Invité(e)
    Par défaut
    tu passes à IncrementerPlage le nom de ta plage!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub test()
    IncrementerPlage "toto"
    IncrementerPlage "titi"
    End Sub
    Sub IncrementerPlage(PlageAddress As String)
    Dim t As Range, derl1 As Long, derl2 As Long
    Set t = Range(PlageAddress) 'Plage nommé!
    derl1 = t.Rows.Count
    t.Rows(t.Rows.Count).Insert
    derl2 = t.Rows.Count
    t(derl1).FormulaR1C1 = t(derl2).FormulaR1C1
     t(derl2) = ""
    MsgBox "Avant: " & derl1 & " Après: " & derl2
    End Sub

  8. #8
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 45
    Points : 16
    Points
    16
    Par défaut
    Je ne sais pas si j'ai précisé mais je dois affilier le code a mon bouton , je dois donc affilier "_click" au nom de la seconde méthode ?

  9. #9
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub Bouton1_Cliquer()
    IncrementerPlage "toto"
    End Sub
    Sub Bouton2_Cliquer()
    IncrementerPlage "titi"
    End Sub

  10. #10
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 45
    Points : 16
    Points
    16
    Par défaut
    Merci de votre aide.

    Pouvez vous m'expliquer ces lignes svp ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub test()
    Dim t As Range, derl1 As Long, derl2 As Long
    Set t = Range("toto") 'Plage nommé!
    derl1 = t.Rows.Count
    t.Rows(t.Rows.Count).Insert
    derl2 = t.Rows.Count
    t(derl1).FormulaR1C1 = t(derl2).FormulaR1C1
     t(derl2) = ""
    MsgBox "Avant: " & derl1 & " Après: " & derl2
    End Sub
    =)
    Bien cordialement =)

    Ce que je ne comprends pas surtout c'est pourquoi ce code ne marche que pour la deuxieme feuille et pas pour celles qui suivent.

  11. #11
    Invité
    Invité(e)
    Par défaut
    pour que ta plage s'agrandisse, il faut insérer la ligne avant la fin de la plage, si le faits après tu insert bien une ligne pas pas dans la plage ("TOTO","TITI").

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub IncrementerPlage(PlageAddress As String)     'on passe le nom de la plage.
    Dim t As Range, derl1 As Long, derl2 As Long
    Set t = Range(PlageAddress)                                     'Plage nommé! on affect a la variable t la référence de la plage.
    derl1 = t.Rows.Count                                              'on trouve la dernière ligne de la plage
    t.Rows(t.Rows.Count).Insert                                     on insert sur la dernière ligne de la plage une ligne
    derl2 = t.Rows.Count                                             'on récupère la nouvelle position de la dernière linge car nous avons créer une cellule vide à l'emplacement précédant
    t(derl1).FormulaR1C1 = t(derl2).FormulaR1C1              'on redonne la valeur de la dernière ligne à l'avant dernière qui elle est vide. pour s’affranchir du risque de transformer une formule en valeur nous utiliserons FormulaR1C1               
     t(derl2) = ""                                                        'on vide la dernière ligne de son contenue
    MsgBox "Avant: " & derl1 & " Après: " & derl2             'on affiche un message, ligne à supprimer dans la version définitive!
    End Sub

  12. #12
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 45
    Points : 16
    Points
    16
    Par défaut
    Ah d'accord je comprends mieux comme cela mais ducoup on peut transformer le MsgBox en rajoutant un editText pour que l'utilisateur saisisse du texte et ensuite un bouton "valider" toujours dans la msgbox qui place les valeurs dans la cellule correspondante ? Vous voyez de quoi je parle ?

    MErci de votre attention et devotre compréhension. =)

    Voici comment je souhaite procéder :

    Je demande a l’utilisateur de saisir la valeur et quand il la valide, elle est directement insérée dans la cellule correspondante. On ne lui demande pas la cellule elle est définie automatiquement.

    Code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    Sub test1_click()
     
    Dim strValeur As String
    Dim strAddress As String
     
    Dim t As Range, derl1 As Long, derl2 As Long
     
    MsgBox ("Donnez le code que vous souhaitez")
    strValeur = InputBox("code souhaité")
     
     
    Range(strAddress).Value = strValeur
     
     
    'Plage nommé!
    Set t = Range("N°")
    'on trouve la dernière ligne de la plage
    derl1 = t.Rows.Count
    'on insert sur la dernière ligne de la plage une ligne
    t.Rows(t.Rows.Count).Insert
    'on récupère la nouvelle position de la dernière linge car nous avons créer une cellule vide à l'emplacement précédant
    derl2 = t.Rows.Count
    'on redonne la valeur de la dernière ligne à l'avant dernière qui elle est vide pour s’affranchir du risque de transformer une formule en valeur nous utiliserons FormulaR1C1
    t(derl1).FormulaR1C1 = t(derl2).FormulaR1C1
    'on vide la dernière ligne de son contenue
     t(derl2) = strValeur
    'MsgBox "Avant: " & derl1 & " Après: " & derl2
    'MsgBox "Vous avez crée un nouveau code ligne " & derl2 + 1 & " . Vous devez maintenant donner ce Code. Ensuite vous devez inscrire à quoi cela correspond dans la cellule suivante."
    'on implémente l'adresse
    strAddress = InputBox(t(derl2))
    End Sub
    Merci de votre aide

    Cordialement

  13. #13
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 45
    Points : 16
    Points
    16
    Par défaut
    Voici mon code qui marche :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    Sub test1_click()
     
    Dim strValeur As String
    Dim strAddress As String
     
    Dim t As Range, derl1 As Long, derl2 As Long
     
    MsgBox ("Veuillez renseigner un code de projet")
    strValeur = InputBox("Code")
     
    'Plage nommé!
    Set t = Range("N°")
    'on trouve la dernière ligne de la plage
    derl1 = t.Rows.Count
    'on insert sur la dernière ligne de la plage une ligne
    t.Rows(t.Rows.Count).Insert
    'on récupère la nouvelle position de la dernière linge car nous avons créer une cellule vide à l'emplacement précédant
    derl2 = t.Rows.Count
    'on redonne la valeur de la dernière ligne à l'avant dernière qui elle est vide pour s’affranchir du risque de transformer une formule en valeur nous utiliserons FormulaR1C1
    t(derl1).FormulaR1C1 = t(derl2).FormulaR1C1
    'on vide la dernière ligne de son contenue
     t(derl2) = strValeur
    'MsgBox "Avant: " & derl1 & " Après: " & derl2
    MsgBox "Vous avez crée un nouveau code ligne " & derl2 + 1 & " . Vous devez maintenant inscrire à quoi cela correspond dans la cellule suivante."
    'on implémente l'adresse
    'strAddress = InputBox(t(derl2))
    'Range(strAddress).Value = strValeur
    End Sub

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème de filtre pour trouver la dernière ligne
    Par KekeStreet dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 13/12/2012, 14h12
  2. Problème insertion dernière ligne
    Par Aizen64 dans le forum MS SQL Server
    Réponses: 10
    Dernier message: 02/05/2008, 20h18
  3. [WD9] Problème dernière ligne d'un fichier csv
    Par cactus666 dans le forum WinDev
    Réponses: 5
    Dernier message: 05/10/2007, 11h49
  4. Tableau avec scroll: problème avec la dernière ligne
    Par restricteur dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 24/05/2007, 13h47
  5. l'identifiant unique de la dernière ligne insérée
    Par dim_italia dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 23/08/2004, 17h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo