Ajout d'une ligne fin de tableau avec colonne indépendante

Bonjour,

Après avoir fait des recherches, je ne trouve pas précisément mon bonheur… En fait j'aurai besoin, via un bouton d'ajouter une ligne à mon tableau pour faire de la saisie car je verrouillerai toutes les autres cases (beaucoup de personnes vont se servir de ce fichier par la suite).

=> En fait lorsqu'une colonne devient pleine j'aimerai rajouter une ligne en fin de tableau avec la même mise en forme et en conservant les formules précédentes.

Toutes les colonnes peuvent se remplir indépendamment, j'ai réussi à faire une macro sur un bouton mais elle n'est applicable que lorsque la colonne A sera pleine. Je ne voudrais donc pas dépendre de la colonne A car demain la colonne J pourrait être la plus remplie !

Je ne sais pas faire autrement pour prendre en compte toutes les autres colonnes…

Merci d'avance de votre aide !

Bonjour RedWolf,

à tester (je n'ai pas trouvé de formules dans le document!)

Sub Ajouter_ligne() 'ajouter une ligne en fin de tableau

'ActiveSheet.Unprotect
'ôte la protection de la feuille (si besoin)

Dim derniereligne As Long, rng As Range
'déclaration des variables

    derniereligne = Range("A" & Rows.Count).End(xlUp).Row
    'Définition de derniereligne : Dans la colone A, la dernière ligne en partant du bas est choisie
    '(mon problème est ici, je voudrais choisir à partir de n'importe quelle colonne, pas seulement A)

      Set rng = Range(Cells(derniereligne, 2), Cells(derniereligne, 24))
      'définition de plage

    If WorksheetFunction.CountA(rng) >= 1 Then ' si le nombre de céllules non vides de la plage > que 1
        Rows(derniereligne).Copy Rows(derniereligne + 1)
        'copie de la derniereligne au rang n+1

        'Puis suppression du contenu de la ligne copiée :
        Range("A" & derniereligne + 1 & ":X" & derniereligne + 1) = ""

    End If

End Sub

@++

Bonjour RedWolf

Merci d'avoir posté plutôt qu'un mp. Pour preuve tu as déjà une réponse.

Pour ma part, je te proposerais une solution sans macro.

Il suffit de mettre tes données en tableau excel (avec des en-têtes de colonnes toutes différentes les unes des autres), et automatiquement ta nouvelle ligne hérite de la mise en forme précédente. Pas besoin non plus d'une MFC pour colorier alternativement les lignes.

    derniereligne = Range("A" & Rows.Count).End(xlUp).Row
    'Définition de derniereligne : Dans la colone A, la dernière ligne en partant du bas est choisie
    '(mon problème est ici, je voudrais choisir à partir de n'importe quelle colonne, pas seulement A)

    If WorksheetFunction.CountA(rng) >= 1 Then ' si le nombre de cellules non vides de la plage > que 1

Bonjour m3ellem1,

Alors merci pour la simplification des suppressions de ligne c'est bien mieux comme ça !

En revanche si on rempli une ligne de plus dans les colonnes C et D par exemple, il n'y a pas de ligne qui se rajoute (vu que la colonne A est moins remplie) mais la suppression de la dernière ligne se fait quand même !

Du coup cela ne marche pas comme ça

En fait mon problème c'est les A que j'ai mis en évidence dans le code je pense.

=> Il faudrait quelque chose du genre "de A à X" la colonne la plus remplie sera la dernière à copier en fait ça paraît simple à dire mais à faire en VBA... moins !

J'espère que mes explications seront assez claires...

Bonjour RedWolf

Merci d'avoir posté plutôt qu'un mp. Pour preuve tu as déjà une réponse.

Pour ma part, je te proposerais une solution sans macro.

Il suffit de mettre tes données en tableau excel (avec des en-têtes de colonnes toutes différentes les unes des autres), et automatiquement ta nouvelle ligne hérite de la mise en forme précédente. Pas besoin non plus d'une MFC pour colorier alternativement les lignes.

Oui c'est vrai je suis bien content merci

Alors en fait je voudrais passer par une macro car les personnes qui se serviront de ce fichier ne savent pas spécialement tous se servir d'excel mais ta solution peux être une piste si je n'arrive pas à mes fins tout à fait !

Pour ma culture comment as-tu fais pour faire ceci :

capture d ecran

Re,

change la définition de derniereligne comme ca

derniereligne = UsedRange.Rows(UsedRange.Rows.Count).Row + 1

@++

Pour ma culture comment as-tu fais pour faire ceci :

Après avoir supprimé toutes les MFC, tu te positionnes sur une zone quelconque et tu fais

accueil > mise sous forme de tableau

capture d ecran 397 capture d ecran 398

Une astuce dans ton cas car tu as des cellules fusionnées (beurk !) ... insère d'abord une ligne vierge pour séparer ton tableau de la première ligne d'en-tête. Et mets des titres de colonnes "uniques".

Après tout va tout seul ... si tu ajoutes une donnée juste en dessous de la ligne du tableau, ce dernier augmente tout seul. Attention : inutile d'ajouter des lignes blanches pour permettre l'entrée de nouvelles données.

Donc je pense que pour des personnes non habituées c'est aussi simple !

derniereligne = UsedRange.Rows(UsedRange.Rows.Count).Row + 1

m3ellem1,

cela ne fonctionne tout de même pas la ligne ne semble pas correct le code ne se lance pas (bug au niveau de cette ligne)

Une astuce dans ton cas car tu as des cellules fusionnées (beurk !) ... insère d'abord une ligne vierge pour séparer ton tableau de la première ligne d'en-tête. Et mets des titres de colonnes "uniques".

Après tout va tout seul ... si tu ajoutes une donnée juste en dessous de la ligne du tableau, ce dernier augmente tout seul. Attention : inutile d'ajouter des lignes blanches pour permettre l'entrée de nouvelles données.

Donc je pense que pour des personnes non habituées c'est aussi simple !

Steelson,

Ton idée me semble la plus simple pour moi en effet, j'ai bien ajouté une ligne en dessous de celles fusionnées (tu n'es pas le premier à me dire que les fusions mettent la pagaille ! )

Par contre je n'arrive pas à mettre les couleurs sur les lignes quand je créer le tableau, il ne me sélectionne que quelques cases… J'ai pourtant bien supprimé les MEC existantes Le fait d'avoir un tableau croisé dynamique (sur les cellules qui ne fonctionnent pas) peut-il en être la cause ?

Par contre je n'arrive pas à mettre les couleurs sur les lignes quand je créer le tableau, il ne me sélectionne que quelques cases… J'ai pourtant bien supprimé les MEC existantes Le fait d'avoir un tableau croisé dynamique (sur les cellules qui ne fonctionnent pas) peut-il en être la cause ?

As-tu une copie d'écran ?

As-tu sélectionné un format de tableau avec alternance des couleurs ?

As-tu supprimé le "fond blanc" des cellules du tableau (mettre un fond neutre) ?

derniereligne = UsedRange.Rows(UsedRange.Rows.Count).Row + 1

m3ellem1,

cela ne fonctionne tout de même pas la ligne ne semble pas correct le code ne se lance pas (bug au niveau de cette ligne)

hmmm je viens de le tester est ca fonctionne sans problème

Puis-je voir le code complet?

As-tu supprimé le "fond blanc" des cellules du tableau (mettre un fond neutre) ?

Voilà merci c'était ça j'avais encore les couleurs blanches des cases du coup ta méthode fonctionne !

hmmm je viens de le tester est ca fonctionne sans problème

Puis-je voir le code complet?

Le voici , avec un code erreur 424...

Sub Ajouter_ligne() 'ajouter une ligne en fin de tableau

'ActiveSheet.Unprotect
'ôte la protection de la feuille (si besoin)

Dim derniereligne As Long, rng As Range
'déclaration des variables

    derniereligne = UsedRange.Rows(UsedRange.Rows.Count).Row + 1
    'Définition de derniereligne : Dans la colone A, la dernière ligne en partant du bas est choisie
    '(mon problème est ici, je voudrais choisir à partir de n'importe quelle colonne, pas seulement A)

      Set rng = Range(Cells(derniereligne, 2), Cells(derniereligne, 24))
      'définition de plage

    If WorksheetFunction.CountA(rng) >= 1 Then ' si le nombre de céllules non vides de la plage > que 1
        Rows(derniereligne).Copy Rows(derniereligne + 1)
        'copie de la derniereligne au rang n+1

        'Puis suppression du contenu de la ligne copiée :
        Range("A" & derniereligne + 1 & ":X" & derniereligne + 1) = ""

    End If

End Sub
capture d ecran erreur execution 424

essaie comme ca

Sub Ajouter_ligne() 'ajouter une ligne en fin de tableau

'ActiveSheet.Unprotect
'ôte la protection de la feuille (si besoin)

Dim derniereligne As Long, rng As Range
'déclaration des variables

    derniereligne = ActiveSheet.UsedRange.Rows(ActiveSheet.UsedRange.Rows.Count).Row + 1
    'Définition de derniereligne : Dans la colone A, la dernière ligne en partant du bas est choisie
    '(mon problème est ici, je voudrais choisir à partir de n'importe quelle colonne, pas seulement A)

      Set rng = Range(Cells(derniereligne, 2), Cells(derniereligne, 24))
      'définition de plage

    If WorksheetFunction.CountA(rng) >= 1 Then ' si le nombre de céllules non vides de la plage > que 1
        Rows(derniereligne).Copy Rows(derniereligne + 1)
        'copie de la derniereligne au rang n+1

        'Puis suppression du contenu de la ligne copiée :
        Range("A" & derniereligne + 1 & ":X" & derniereligne + 1) = ""

    End If

End Sub

essaie comme ca

    
    derniereligne = ActiveSheet.UsedRange.Rows(ActiveSheet.UsedRange.Rows.Count).Row + 1

Ca y est ça marche !!! Par contre pour que ça fonctionne j'ai enlever le "+1" au bout de la ligne ci dessus et impeccable ! Merci encore de m'avoir aider tout le monde !

     
      Set rng = Range(Cells(derniereligne, 2), Cells(derniereligne, 24))
      'définition de plage

Juste pour savoir stp, les chiffres 2 et 24 correspondent à... quoi ?

Sur le fichier que j'ai joint en effet tout fonctionne parfaitement, mais j'ai essayer de transposer le code dans mon fichier source (version censuré si je puis dire… ) qui comporte plus de colonne et là le code ne bug pas mais rien ne se passe

2 c'est la colonne B et 24 c'est la colonne X

Ha oui merci

Du coup je joins une évolution du fichier dans le quel j'ai rajouté 2 colonnes : Qui et quand.

Sur ce fichier la macro ne fonctionne plus, je pense avoir tout bien fait pourtant… Désolé je débute et j'ai encore du mal avec tout ça

et la solution tableau ?

enfin, choisis ce que tu maîtrises sinon tu seras toujours dépendant

à tester

@+++

et la solution tableau ?

enfin, choisis ce que tu maîtrises sinon tu seras toujours dépendant

Alors j'ai bien renommé mes colonne unitairement, j'ai reparamétré tout mes tableaux croisés dynamique (à cause des changements de nom de colonne) du coup mon fichier est pour l'instant à dispo dans cet état qui fonctionne parfaitement, encore merci pour la solution simple et efficace !

En revanche je n'arrive pas à garder cette solution en mettant une protection sur la page, cela me bloque mes liste déroulante et aussi ne régénère pas le tableau lors de saisie à la ligne d'après… il faut juste espérer que les nombreuses personnes qui toucheront au fichier n'écrive que là ils doivent le faire sinon mes tableaux et mes listes vont toutes se perdre

à tester

@+++

Et bien tout fonctionne parfaitement mais je pense que sur mon fichier d'origine je doit avoir des tableaux ou des formules qui doivent rentrer en collision et bloquer le bon fonctionnement… Dommage car c'était vraiment ce qu'il me fallait

Rechercher des sujets similaires à "ajout ligne fin tableau colonne independante"