Ajouter des lignes définies à une plage variable

Bonjour,

Je souhaiterais avoir de l’aide concernant l’application d’une formule ou d’un code VBA.

J’ai un fichier composé de 3 onglets : Source, Pied de page et test.

Mon onglet de travail est « test » ou des formules viennent chercher des informations contenues dans l’onglet source.

Une fois qu’une liste variable a été récupérée (à partir de données contenues dans l’onglet source), je souhaiterais coller à la fin de cette liste variable (toujours dans l’onglet « test »), les lignes contenues dans l’onglet « pied de page ».

Je rencontre un problème puisque ma liste est de par sa nature, variable et que je ne peux pas utiliser le code VBA permettant de reproduire le mouvement « CTRL + BAS » pour atteindre le bas de la liste puisque l’onglet « test » contient des formules SI EST VIDE ; ALORS RIEN.

De ce fait, les cellules apparaissent vides mais ne le sont pas vraiment puisqu’elles contiennent une formule.

Savez-vous comment je peux ajouter ces lignes « pied de page » à la fin de ma liste ?

Je vous remercie énormément !

PS : Vous trouverez mon fichier excel joint à ce message.

Bonjour,

Les formules Excel sont utilisables sous VBA avec la forme suivante : Application.NomDeLaFormuleEnAnglais(valeur1,valeur2,...)

Et dans Excel tu as différentes formules utiles :

=NB(Plage) 'Compte les cellules contenant un nombre

=NBVAL(Plage) 'Compte les cellules non-vides

=NB.VIDE(Plage) 'Compte les cellules vides

Tu peux aussi parcourir les cellules avec une boucle sous VBA et tester le contenu de chaque cellule jusqu'à en rencontrer une vide par exemple.

Bonjour Riri5665,

A tester :

J'ai ajouté un onglet "Test Bis" où j'ai enlevé les formules. Avec un code VBA, il va chercher directement les informations dans les autres onglets pour les coller dans l'onglet "Test Bis". Il prend en compte le fait que les informations peuvent être plus ou moins longues sur les différents onglets.

Cordialement,

IB

Bonsoir à vous deux et merci pour vos réponses !

Malheureusement, je viens d'adapter mon code à mon fichier et ça ne fonctionne pas...

Le pied de page vient se coller à la fin des 50 000 lignes "vides" mais qui contiennent des formules.

Du coup j'ai 20 lignes de remplies (de la ligne 1 à 5 pour l'en-tête et de la ligne 6 à 20 pour le corps) puis un trou de 49 750 lignes et enfin mes 5 lignes de pied de page qui viennent se rajouter à la fin.

Avez vous une idée d'où pourrait venir le problème ?

J'investigue de mon côté.

EDIT :

@ IronBoule : Je crois savoir d'où vient le problème, la macro vient chercher la variable dans l'onglet source alors qu'elle devrait aller chercher les données dans l'onglet Test.

Cet onglet Test comprends lui des formules et une plage variable.

Bonsoir, Salut à tous !

Si tu tiens à conserver tes formules, essaie ainsi :

Sub InsertPiedePage()
    Dim PdP As Range, Cins As Range
    Set PdP = Worksheets("Pied de page").Range("A1").CurrentRegion
    With Worksheets("Test")
        Set Cins = .Columns("A").Find("", , xlValues)
        If Not Cins Is Nothing Then
            PdP.Copy
            Cins.Resize(PdP.Rows.Count).Insert xlShiftDown
        End If
    End With
End Sub

Cordialement.

Bonjour MFerrand,

Merci énormément pour ton code, je viens de l'adapter et cela fonctionne très bien !

Juste une dernière demande... Comment puis-je selectionner le résultat final contenu dans l'onglet test ?

A savoir, uniquement l'en-tête, le corps et le pied de page sans sélectionner le reste (49 000 lignes restantes contenant les formules).

Je suppose que je dois adapter ma formule ici : ?

With Worksheets("Test")

Set Cins = .Columns("A").Find("", , xlValues)

If Not Cins Is Nothing Then

PdP.Copy

Cins.Resize(PdP.Rows.Count).Insert xlShiftDown

End If

End With

Merci

Bonjour,

dln = Cins.Row + Cins.Rows.Count -1 te donnera la dernière ligne.

Ta plage est donc : "A1:A" & dln.

Mais pourquoi donc veux-tu la sélectionner ? Pour opérer en VBA on ne sélectionne pas, on fait ce qu'on veut faire !

NB- Pour citer du code, utilise plutôt les balises Code, cela a le mérite de conserver l'indentation.

Cordialement.

J'essaye ça ce soir et je vous en donne des nouvelles

Je veux sélectionner ma plage pour pouvoir la copier et la coller sur un nouvel onglet.

Merci encore !

Riri

Pas besoin de sélectionner pour ça, ni d'ailleurs de copier et coller !

Pas besoin de sélectionner pour ça, ni d'ailleurs de copier et coller !

Ah ?

Je pense que vous allez me dire de copier cette même feuille ?

En fait, mon objectif est de copier cette plage de cellule "remplies" afin de la copier en valeur sur une nouvelle feuille.

Je tente quelque chose

Tu as un sujet en ce moment même concernant la copie :

https://forum.excel-pratique.com/viewtopic.php?f=2&t=114467

Merci à vous tous !

Vous êtes vraiment géniaux, je viens d'adapter ça dans mon code :

dln = Cins.Row + Cins.Rows.Count -1
Range("A1:A" & dln.

Et cela fonctionne

Simple question de compréhension :

Pourquoi ne définit t'on pas dln ? C'est une variable non ?

A la base, j'avais mis :

Set dln = xxxxxx

Mais VBA m'a mis une erreur.

Quoi qu'il en soit, milles mercis

Justement la plage étant définie, en VBA il suffit de faire :

    PlageCible.Value = PlageSource.Value

La plage cible étant définie à la même dimension que la plage source, c'est infiniment plus rapide qu'un copier-coller valeurs.

Cordialement.

edit : Pedro : vue le sujet que tu indiques, il est exemplaire !!!

Riri : dln est une variable numérique (à ajouter aux déclarations si elle ne l'est pas) destinée à définir une ligne par son numéro...

Rechercher des sujets similaires à "ajouter lignes definies plage variable"