Copier cellules non vide d'une plage

lmc71

XLDnaute Occasionnel
Bonjour le Forum
Je reviens vers vous car je n'arrive pas à trouver mon bonheur sur la toile.
J'ai une feuille nommée JANVIER et dans cette feuille je voudrais sélectionner toutes les cellules NON VIDES de la plage C6:I150 pour les COPIER et les COLLER dans la feuille VERIFICAT à la première cellule vide de la colonne D4. Cette cellule est aléatoire.
Merci de votre aide, car je tourne en boucle dans mes recherches.
Cordialement
 

Papou-net

XLDnaute Barbatruc
Re : Copier cellules non vide d'une plage

Bonjour lmc71,

A défaut d'en savoir plus sur la structure de ton fichier, je ne peux que te proposer la macro suivante à écrire dans un module de code et à lancer par un bouton ou autre commande de ton choix:

Code:
Sub MacroCopie()
Dim Cel As Range

For Each Cel In Sheets("JANVIER").Range("C6:I50").SpecialCells(xlCellTypeConstants)
  Cel.Copy Sheets("VERIFICAT").Range("D" & Rows.Count).End(xlUp).Offset(1, 0)
Next
End Sub
A +

Cordialement.
 

lmc71

XLDnaute Occasionnel
Re : Copier cellules non vide d'une plage

Bonjour Staple
Bonjour Papou-net

Pour Staple : Je ne savais pas que l'on pouvait rester sur le même fil, alors que la question était totalement différente au premier fil, malgré que le fichier est initial. Je le saurai pour l'éventuel prochaine fois.
Donc, avant que je ne réponde à Papou-net ( que je remercie maingenant, mais je vais le faire personnellement), dois-je rester sur ce fil ou reprendre ma question sur l'initial.
J'attends ta réponse pour poursuivre avec Papou-net et toi-même.
Cordialement
 

lmc71

XLDnaute Occasionnel
Re : Copier cellules non vide d'une plage

Merci Papou-Net
Pour ta réponse et pour te soucier de mon problème.
Donc j'ai essayé ton code : disons qu'il fonctionne partiellement. Je m'explique : 1°- Il ne prend pas en compte un Mot de Passe - 2° - il recopie les données non pas en ligne mais seulement dans la colonne D et 3° - il n'enregistre pas la première colonne de la plage.
Je te joins un boute du fichier. J'ai supprimé des onglets pour qu'il puisse passer. Il faut savoir que le nombre d'onglet équivaut au mois de l'année.
Je voudrais que la macro réagisse à 'ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True, Password:="123", UserInterfaceOnly:=True 'Enlève et remet le mot de passe

- Que les données de JANVIER en ligne 6 colonnes de C à i soient recopier dans Verificat ligne 4 colonne de D à J et ainsi de suite tant qu'il y a ligne à copier dans JANVIER.
Le but final de la feuille Verificat va servir au contrôle avec la banque tout au long de l'année. Je vais créer un bouton macro pour chaque mois à recopier avec cette macro.

Je te remercie d'avance
 

Pièces jointes

  • Gestion Internet 2.zip
    173.5 KB · Affichages: 31
Dernière édition:

lmc71

XLDnaute Occasionnel
Re : Copier cellules non vide d'une plage

Re Papou-net
Tu comprends vite, il ne faut pas t'expliquer longtemps, en un mot tu es un PRO.
C'est exactement ce que je souhaitais.
A n'utiliser qu'une seule fois dans le mois, car risque de doublons.
Je te remercie pour m'avoir débloquer. Je vais pouvoir poursuivre dans l'élaboration de ce fichier.
Cordialement
 

lmc71

XLDnaute Occasionnel
Re : Copier cellules non vide d'une plage

Re
Pour comprendre ton code MacroCopie et à la lecture de ce dernier, je n'ai pas trouver où tu imposes la direction de l'onglet Verificat. Je n'ai remarqué que With Feuil3, mais je n'ai aucun onglet qui se nomme Feuil3.
Peux-tu me décortiquer ton code, s'il te plait.
Merci.
 

Papou-net

XLDnaute Barbatruc
Re : Copier cellules non vide d'une plage

RE:

Voici une copie du code avec les commentaires.

Dans la fenêtre VBA Project, tu constateras que Feuil3 mentionne (Verificat) entre parenthèses. Feuil3 est le nom donné par Excel aux feuilles: il est immuable au sein du projet et ne peut être modifié par l'utilisateur, contrairement au nom entre parenthèses. J'utilise préférentiellement ce CodeName car il présente l'avantage de ne pas avoir à retoucher le code en cas de modification du nom ou de la position des feuilles dans la liste d'onglets.

Espérant avoir répondu explicitement.

Cordialement.

Code:
Sub MacroCopie()
Dim Cel As Range, lg As Integer

On Error Resume Next
With Feuil3 'Feuil3 est le CodeName (nom attribué par Excel et non modifiable) de la feuille Verificat
'Toutes les adresses précédées d'un point se rattachent à cette feuille
  .Unprotect "123"
  For Each Cel In ActiveSheet.Range("D6:D" & Rows.Count).SpecialCells(xlCellTypeConstants)
  'Cette boucle lit toutes les cellules non vides de la feuille affichée à l'écran
  'dans la colonne PRENOM, de la ligne 6 et vers le bas
    lg = .Range("D" & Rows.Count).End(xlUp).Row + 1 'lg est le numéro de la première ligne vide de Feuil3
    If lg < 5 Then lg = 4 'si lg est inférieur à 5 alors on se positionne sur la ligne 4
    Cel.Offset(0, -1).Resize(1, 7).Copy Destination:=.Range("D" & lg)
    'Cel.Offset(0, -1).Resize(1, 7) cette instruction définit les colonnes à copier
    'puisque la lecture se fait en colonne D, on repart de C --> Cel.Offset(0, -1)
    'et on étend de 7 colonnes à droite --> .Resize(1, 7)
  Next
  .Protect "123"
End With
End Sub
 

lmc71

XLDnaute Occasionnel
Re : Copier cellules non vide d'une plage

Bonjour Papou-Net

J'ai essayé d'adapter ta macro pour un autre copier/coller, mais j'ai un petit soucis avec le .value. En effet la macro fonctionne, mais elle me renvoie les formules qui se trouvent dans l'une des cellules. Où dois-je placer le .value pour n'avoir que le résultat et non les formules.
D'autre part, j'ai remarqué que l'histoire de Feuil3 fonctionne très bien avec une feuille fraichement créée, mais non pas avec une ancienne. Dans le fichier transmis, j'ai essayé ta macro avec la feuille nommée Feuil2 par Excel renommée par mes soins Accueil, mais cette Feuil2, n'est, apparemment pas reconnue. Pour tricher, j'ai recréé une nouvelle feuille (Feuil7 par défaut) et la macro a fonctionné à merveille. Phénomène de l'informatique, pour moi, mais peut-être pas pour toi.
Tes explications me servent énormément.

Un autre petit service de plus.
J'utilise ce code

Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If KeyAscii.Value = Asc(".") Then KeyAscii.Value = Asc(",")
End Sub

et ceci : Range("H" & l).Value = CDbl(TextBox1.Text) 'TextBox5

pour format monétaire dans un textbox

Peux-tu me donner la marche à suivre pour un format date jj/mm/aaaa dans un textBox
Et éventuellement, que la date du jour soit d'autoriser afficher dans ce textbox.
Merci.
 
Dernière édition:

Papou-net

XLDnaute Barbatruc
Re : Copier cellules non vide d'une plage

Bonjour lmc71,

Ci-joint une démo de saisie au format date automatique.

Seules les touches numériques (0...9) sont autorisées, l'ajout des caractères de séparation (/) se fait d'office. Tu remarqueras que je préfère utiliser KeyDown au lieu de KeyPress, mais c'est une convenance toute personnelle.

Reste à préciser ce que tu veux dire par:

Et éventuellement, que la date du jour soit d'autoriser afficher dans ce textbox.
A +

Cordialement.
 

Pièces jointes

  • Saisie date formatee.xlsm
    20.3 KB · Affichages: 29

Papou-net

XLDnaute Barbatruc
Re : Copier cellules non vide d'une plage

RE:

J'ai essayé d'adapter ta macro pour un autre copier/coller, mais j'ai un petit soucis avec le .value. En effet la macro fonctionne, mais elle me renvoie les formules qui se trouvent dans l'une des cellules. Où dois-je placer le .value pour n'avoir que le résultat et non les formules.
Peux-tu être plus précis ou, mieux encore, envoyer ta macro?

D'autre part, j'ai remarqué que l'histoire de Feuil3 fonctionne très bien avec une feuille fraichement créée, mais non pas avec une ancienne. Dans le fichier transmis, j'ai essayé ta macro avec la feuille nommée Feuil2 par Excel renommée par mes soins Accueil, mais cette Feuil2, n'est, apparemment pas reconnue. Pour tricher, j'ai recréé une nouvelle feuille (Feuil7 par défaut) et la macro a fonctionné à merveille. Phénomène de l'informatique, pour moi, mais peut-être pas pour toi.
Ca ne fonctionne pas avec Feuil2 pour la simple et bonne raison que la structure du tableau est différente des feuilles de mois. Par exemple, la colonne D, sur laquelle se fait la recherche, est vide. D'autre part, elle comporte des cellules fusionnées, ce que VBA n'apprécie généralement pas.

A +

Cordialement.
 

lmc71

XLDnaute Occasionnel
Re : Copier cellules non vide d'une plage

Merci
J'ai recopié et adapter ton code pour la date dans mon USF. Cela fonctionne, mais, il faut toujours un mais...... Je ne peux pas sortir du textBox soit avec la touche Entr soit la touche Tab. Il me faut sortir avec la souris. Est-ce normal ?

Dans cet USF, j'utilise un combobox pour le mois et Staple m'a fourni ce code Me.ComboBox1.Text = ActiveSheet.Name pour que le mois de l'onglet soit afficher. Je voudrais, si cela est possible que la date du jour soit affichée dans le textbox à l'ouverture du USF. Ceci est secondaire, mais néanmoins utile.
Je ne te l'ai pas précisé, mais je ne suis pas un féru en VBA, j'arrive à les lire et les comprendre, mais pas à les constituer, d'où toutes ces questions.
Et en ce qui concerne le problème de MacroCopie qui copie les formules d'une cellule et non la valeur, as-tu une solution ?

Encore une fois merci de te soucier de moi.
 

Discussions similaires

Statistiques des forums

Discussions
312 299
Messages
2 086 991
Membres
103 420
dernier inscrit
eric.wallet46