VBA - Copie colle sur Ligne Vide ou Ligne + 1

Re bonsoir,

Je repost ici car on s'est un peu perdu en route sur mon dernier post

Novice en VBA, j'ai utilisé l'enregistreur pour réalisé une maccro

Onglet 1 : CAPELLA

Tableau structuré nommé IMPORTCapella

Onglet 2 : IMPORT

Tableau brut non structuré tiré d'un export intranet

Je vous explique grosso modo la maccro

Je suis dans mon onglet 1 CAPELLA > je pars dans l'onglet IMPORT > je supp les colonnes et lignes qui ne m’intéressent pas dans le tableau brut, je copie colle le restant et je viens collé le tout a la suite de mon tableau structuré IMPORTCapella dans l'onglet CAPELLA

Voici ce que ca donne réellement :

Sub MAJfichierCapella()
'
' MAJfichierCapella Macro
'

'
Sheets("IMPORT").Select
Columns("A:D").Select
Selection.Delete Shift:=xlToLeft
Columns("B:E").Select
Selection.Delete Shift:=xlToLeft
Columns("C:C").Select
Selection.Delete Shift:=xlToLeft
Columns("E:E").Select
Selection.Delete Shift:=xlToLeft
Columns("F:F").Select
Selection.Delete Shift:=xlToLeft
Rows("1:1").Select
Selection.Delete Shift:=xlUp
Range("A1:E156").Select
Selection.Copy
Sheets("CAPELLA").Select
Range("IMPORTCapella[Dossier]").Select
ActiveSheet.Paste
End Sub

Le tout rattaché a un bouton que j'ai lié a la macro.

Alors comment transformé cette macro, pour qu'elle vienne se copié a la fin de mon tableau IMPORTCapella, SUR la derniere ligne SI VIDE (COLONNE B), ou, a la suite de la dernière ligne si celle ci est NON VIDE (TOUJOURS COLONNE B)

EXEMPLE SI DERNIÈRE LIGNE VIDE :

Je souhaite que l'import se colle a partir et SUR B23 et après

image

EXEMPLE SI DERNIÈRE LIGNE NON VIDE :

Je souhaite que l'import se colle a partir et SUR B24 et après

image

POuvez vous m'aider svp ?

D'avance merci a tout

je crains que ce ne sera pas apprécié d'ouvrir une nouvelle poste avec exactement la même question.

ce n'est pas le meme sujet de base et dans l'autre nous avions largement dévié du sujet initiale

je n'avais pas lu dès le début, sorry.

Pour être plus précis :

Les données que je copie en définitif via ma macro, ne sont que quelques colonnes qui me sont utiles de mon fichier brut

Je viens les collé dans mon tableau structuré a partir de la première colonne en B, a la fin, ou la suite comme vous préférez.

Les colonnes de droite de mon tableau structuré contiennent des colonnes masquées, et d'autres des fonctions.

comme cela, les fonctions s'appliquent à mes nouveaux ajouts de données, a la suite de mon tableau.

Dans tous les cas, il n'y aura aucune cellule vide dans la colonne B, sauf peut être la dernière. Donc ma question de ce post...

Est il possible d'utilisé ma macro initiale et la transformé la fin ? Dsl je suis novice et j'ai encore besoin de visualisé le code pour comprendre comment il fonctionne et comment le transposé dans mon fichier...

Bonjour,

Sub MAJfichierCapella()
'
' MAJfichierCapella Macro
'

'
Sheets("IMPORT").Select
Columns("A:D").Select
Selection.Delete Shift:=xlToLeft
Columns("B:E").Select
Selection.Delete Shift:=xlToLeft
Columns("C:C").Select
Selection.Delete Shift:=xlToLeft
Columns("E:E").Select
Selection.Delete Shift:=xlToLeft
Columns("F:F").Select
Selection.Delete Shift:=xlToLeft
Rows("1:1").Select
Selection.Delete Shift:=xlUp
Range("A1:E156").Select
Selection.Copy

Numligne=Worksheets("CAPELLA").Range("b65536").End(xlUp).Row +1
Sheets("CAPELLA").Cells(Numligne, 2).Select
ActiveSheet.Paste
End Sub

merci pour ta réponse, et aussi pour avoir repris la base de ma macro c est cool et je comprend mieux

par contre ca ne fonctionne pas regarde :

image image

j'arrête ici, les dernières lignes de la macro à Xmenpl est la même que la mienne de minuit, sauf que c'est pour un tableau, avec le nom "Tableau" (la seule chose à changer est le nom du tableau "Tableau" et dynamiser la plage de copie)

Sub teste()
     a = sheets("Import").Range("A1:E156").Value
     Range("Tableau").ListObject.ListRows.Add.Range.Range("A1").Resize(UBound(a), UBound(a, 2)).Value = a
End Sub

mais alors, vous montrez un image avec la première ligne du tableau vide est suggère qu'on doit coller là. Je le fais, mais au risque de déplacer d'autres choses sur la feuille, mais le seul replique, que ce n'est pas ce que vous voulez, mais vous n'êtez pas capable à donner un fichier exemplaire, ni à expliquer ce qui ne fonctionne pas.

ben dslBsAlv, mais si tu pouvais reprendre mes données et les transposé complétement avec mes noms etc...
Comme l a fait Xmenpl....
Il est vrai que cela fait un peu"faire le boulot par un autre" mais le fait est que je débute vraiment, j'ai encore beaucoup de mal a comprendre toute cette logique et toutes ces syntaxes à formulé....et dans ce cas, j'ai vraiment beaucoup de mal a comprendre comment ça marche, surtout si tous les noms, numéro de cellules etc etc sont différents de ma situation perso.
je n'arrive pas a comprendre comment inséré ta solution dans ma maccro.... alors dsl pour mon ignorance

et je n'ai rien demandé d'autre que de pouvoir trouvé et collé sur la dernière ligne vide ou après la dernière ligne non vide... je n'ai jamais demandé a collé sur la PREMIERE LIGNE absolument....ou de prendre le risque de deplacer d'autre chose....

avec ma macro de base, ca fonctionne très bien, sauf qu'il me sélectionne toujours la Ligne +1... donc si la dernière est vide....ben les nouvelles lignes reprennent pas mes fonctions présentent dans les colonnes de droite... tout simplement.

dans ce cas, ne peut on pas tout simplement prendre ma macro qui "fonctionne" et y ajouter une partie qui supprime les lignes vides après la copie des nouvelles données ? je sais pas c est une idée

on colle les données qui vont bien en laissant la ligne vide et dans la foulée si Cellule B de la plage [Dossier] est vide > supp de la ligne

Vous en pensez quoi ?

Du coup, si la dernière ligne est vide, elle est supprimée et je garde quand même mes fonction vu qu'elles seront copiés dans les nouvelles lignes.. et si la derniere ligne n était pas vide, le problème se pose pas puisque les données seront copié a la suite et la macro ne detectera pas de cellule vide

Est ce que quelqu'un peut m'aider à le formulé avec ma macro initiale svp ?

(je précise bien sur la plage [dossier] car il ne faut pas supprimé toutes les lignes avec cellules B vide au dessus de mon tableau structuré. L’entête de mon tableau est figée en volet et j'ai des synthases au dessus etc... donc uniquement dans la plage [dossier] ou plus bas mais pas au dessus de mon entête de tableau)

Sub MAJfichierCapella()
'
' MAJfichierCapella Macro
'

'
Sheets("IMPORT").Select
Columns("A:D").Select
Selection.Delete Shift:=xlToLeft
Columns("B:E").Select
Selection.Delete Shift:=xlToLeft
Columns("C:C").Select
Selection.Delete Shift:=xlToLeft
Columns("E:E").Select
Selection.Delete Shift:=xlToLeft
Columns("F:F").Select
Selection.Delete Shift:=xlToLeft
Rows("1:1").Select
Selection.Delete Shift:=xlUp
Range("A1:E156").Select
Selection.Copy
Sheets("CAPELLA").Select
Range("IMPORTCapella[Dossier]").Select
ActiveSheet.Paste
End Sub

Rebonjour, peut-être simplement sans faire de select juste le paste à la fin

Numligne=Worksheets("CAPELLA").Range("b65536").End(xlUp).Row +1
Worksheetsheets("CAPELLA").Cells(Numligne, 2).Paste

cette macro ajoute les données et puis elle efface toutes les lignes donc les cellules de la première colonne du tableau sont vide.

CAUTION : elle efface TOUTE LA LIGNE, donc s'il y a quelque chose important à gauche ou à droite du tableau .....

Sub VotreCode()
     '...... CODE PRECEDENT
     a = Sheets("Import").Range("A1:E156").Value     'la plage à copier
     With Range("Tableau").ListObject     'le tableau
          .Range.AutoFilter     'reset l'autofilter
          .ListRows.Add.Range.Range("A1").Resize(UBound(a), UBound(a, 2)).Value = a     'coller les données
          .Range.AutoFilter 1, ""     'filtrer les cellules vide de la première colonne du tableau
          If .Range.Columns(1).SpecialCells(xlVisible) > 1 Then .DataBodyRange.EntireRow.Delete     's'il y a des cellules comme ca, delete la ligne entière
          .Range.AutoFilter     'reset autofilter
     End With
End Sub

autre possibilité

au lieu de

a = Sheets("Import").Range("A1:E156").Value 'la plage à copier

ceci

a = Sheets("Import").Range("A1").currentregion.resize(,5).Value 'la plage (dynamique) à copier

merci beaucoup pour votre aide à tous et surtout pour votre patience problème réglé

Rechercher des sujets similaires à "vba copie colle ligne vide"