Exporter des plages de données non contigues en VBA

Amilo

XLDnaute Accro
Bonsoir le forum,

Après quelques recherches sur ce forum, j'ai réussi à adapter que trés partiellement un bout de code pour mon problème indiqué dans le fichier ci-joint,

Pour résumer, j'ai un onglet "Fiche de saisie" dans lequel je saisie des données commençant de la ligne 9 et pouvant aller jusqu'à la ligne 24 et ceci tjrs de la plage A:U (donc si voulez de $A$9:$U$24 au maximum),

Une fois les données saisies, je souhaite exporter à l'aide du bouton :

- la plage délimitée en jaune de l'onglet "Fiche de saisie" vers l'onglet "Base" (colonnes A à L)
- et la plage bleue de l'onglet "Fiche de saisie" vers l'onglet "CSV" (colonnes M à U + la cellule L7),

Par contre les données pour la zone en bleue ne sont pas contigues et comportent pour la zone à exporter une ligne L7:R7 et une plage de données de M9:U24 décalées...!!!

Mon bouton me servira également à supprimer ma plage de colonnes (qui reste encore à définir...!!!).

Par ailleurs, je souhaite alimenter l'onglet "Base" après chaque nouvelle saisie et clic sur le bouton

Vous trouverez davantage d'information dans le fichier.

Merci d'avance pour votre aide.
 

Fichiers joints

Dernière édition:

Amilo

XLDnaute Accro
Re : Exporter des plages de données non contigues en VBA

Bonsoir,

Je continue à patoger dans mon problème depuis hier soir,

J'ai abondonné le précédent code VBA pour tester avec un enregistrement de Macro mais c'est guère mieux,

Je vous transmets le même fichier mais avec la nouvelle Macro pour exporter dans un 1er temps la 1ère plage vers le 1er onglet "Base",

Pouvez-vous svp m'aider déjà sur la 1ère partie du problème à savoir exporter la plage A9:L24 de "Fiche de saisie" vers l'onglet "Base"...?

Après l'export, je souhaite supprimer les données exportées de l'onglet "Fiche des saisie"

Merci d'avance

Cordialement
 

Fichiers joints

Dernière édition:

BrunoM45

XLDnaute Barbatruc
Re : Exporter des plages de données non contigues en VBA

Bonsoir Amilo, voici le code qui pourrait te convenir

VB:
Sub DéplacementDonnées() 
 Dim NLigD As Long, DLigS As Long
  ' Trouver la prochaine ligne vide de la feuille base
  NLigD = Sheets("Base").Range("A" & Rows.Count).End(xlUp).Offset(1, 0).Row
  ' Trouver la dernière ligne remplie de la feuille Saisie
  DLigS = Sheets("Fiche de saisie").Range("A" & Rows.Count).End(xlUp).Row
  ' Si aucune donnée dans la feuille de saisie : dernière ligne = 9, on sort
  If DLigS = 9 Then Exit Sub
  ' Empêcher le scintillement de l'écran
  Application.ScreenUpdating = False
  ' Copier le données de la feuille Source à la feuille Destination
 Sheets("Fiche de saisie").Range("A9:L" & DLigS).Copy
 Sheets("Base").Range("A" & NLigD).PasteSpecial Paste:=xlPasteValues
  ' Effacer le les données sources
  Sheets("Fiche de saisie").Range("A9:L" & DLigS).ClearContents
  ' Activer le rafraichissement écran
  Application.ScreenUpdating = True
End Sub
A+
 

Amilo

XLDnaute Accro
Re : Exporter des plages de données non contigues en VBA

Bonjour le Froum, BrunoM45,


Mille mercis Bruno pour votre code qui fonctionnent trés bien pour cette 1ère partie,

et vos commentaires trés utiles,


Bonne journée à vous

Cordialement
 

Amilo

XLDnaute Accro
Re : Exporter des plages de données non contigues en VBA

Bonsoir le forum, BrunoM45,

Je reviens sur le code à Bruno qui fonctionne trés bien sur mon fichier en exemple mais une fois appliqué à mon fichier réel celui-ci pose un ptit problème.

En réalité, j'ai des formules dans ma colonne A (plage A9:A24) de l'onglet "Fiche de saisie",

Ce code considère donc la cellule A24 comme la dernière cellule non vide et me copie donc toute la plage de A9 à L24 alors que ma saisie s'arrête bien avant.

J'ai dans mon fichier perso, la colonne J qui ne comporte aucune formule mais par contre la 1ère colonne non vide est J1 et en dessous de ma plage J9:J24 se trouve une autre donnée en J30...!!!

J'ai essayé donc de prendre comme référence la colonne J avec une plage définie de J9:J24 au lieu de la colonne A,


En modifiant la ligne ci-dessous que j'ai reprise du code à Bruno avec pour référence la colonne A, j'ai testé donc avec la nouvelle ligne en rouge mais sans succès....!!!

DLigS = Sheets("Fiche de saisie").Range("A" & Rows.Count).End(xlUp).Row
DLigS = Sheets("Fiche de saisie").Range("J8:J" & Rows.Count).End(xlUp).Row

Pouvez-vous svp m'aider sur ce problème ??

P.S : j'aurais souhaité rajouter une colonne supplémentaire à la plage initiale A9:L24, par exemple la colonne N,

Comment l'indiquer dans ce code ??

Merci d'avance

Cordialement
 
Dernière édition:

Amilo

XLDnaute Accro
Re : Exporter des plages de données non contigues en VBA

Bonjour le forum,

Je vous transmets ci-dessous mon précédent fichier modifié en indiquant donc des formules dans les colonnes en violet A:E,

Par mesure de simplicité, j'ai testé le code à BrunoM45 en adaptant la ligne ci-dessous à ce nouveau fichier pour ne pas effacer les formules :
Sheets("Fiche de saisie").Range("A9:L" & DLigS).ClearContents)
Pour aller plus vite, j'ai testé le code en indiquant une seule valeur en cellule A9 et ce code renvoi la valeur avec des lignes vides à chaque fois..!!!

Comment résoudre ce problème sans que le code ne prenne pas en compte les cellules vides avec formules ??

Faut-il passer par une autre colonne comme la colonne J qui n'a pas de formules ??

Mais en l'adaptant à J, le code exporte toute la plage J1:J30 de la colonne J car j'ai du texte en cellule J1 et J30 alors que je souhaite exporter que les valeurs comprises entre les lignes 9 à 24.

Merci d'avance pour votre aide

Cordialement
 

Fichiers joints

Dernière édition:
Haut Bas