Copier cellules non vide d'une plage

  • Initiateur de la discussion Initiateur de la discussion lmc71
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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
 
Re : Copier cellules non vide d'une plage

Au temps pour moi, j'ai oublié de tenir compte de ces 2 touches spéciales. Voici qui est réparé:

Code:
Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
Select Case KeyCode
  Case 8, 9, 13, 46
    ' si touche frappée=SUPPR ou RET ou ENTER ou TAB, fin de la procédure (l'effacement reste donc possible)
    Exit Sub
  Case 96 To 105
    ' si touche frappée <> 0...9, pas d'action
  Case Else
    ' si autre touche frappée, annulation de la frappe
    KeyCode = 0
End Select
End Sub
Sur la copie ci-jointe, j'ai ajouté la procédure suivante:
Code:
Private Sub UserForm_Activate()
With TextBox1
  .Value = CStr(Date)
  .SelStart = 0
  .SelLength = 10
End With
End Sub
qui affiche la date du jour dans TextBox1.

Pour faciliter l'éventuelle modification de cette date, elle est présélectionnée. Il ne reste donc plus qu'à taper sur les touches sans avoir besoin d'effacer TextBox1.

A +

Cordialement.
 

Pièces jointes

Re : Copier cellules non vide d'une plage

Re
Ok pour ta deuxième réponse, quoi qu'il n'y ait pas de cellule fusionnée dans la partie de la feuille où je fais la copie colonne CA. Il n'y a aucun message d'erreur.

Pour la première : voici le code que tu m'as envoyé et modifié :

Sub CopieDoublonMensuelVersAccueil()

' Motif
Dim Cel As Range, lg As Integer
On Error Resume Next
With Feuil7
.Unprotect "123"

' Motif
For Each Cel In ActiveSheet.Range("ab156:ab" & Rows.Count).SpecialCells(xlCellTypeConstants).Value
lg = .Range("ca" & Rows.Count).End(xlUp).Row + 1
If lg < 5 Then lg = 4
Cel.Offset(0, 0).Resize(1, 3).Copy Destination:=.Range("Ca" & lg)
Next


Protect "123"
End With

'Call Va_Feuil_Verificat
End Sub


Dans la cellule AB156 existe du texte
dans la cellule AC156 la formule =NB.SI($E$6:$E$152;$AB$156:$AB$306)
dans la cellule AD156 la formule =SOMME.SI($E$6:$E$152;$AB$156:$AB$309;$H$6:$H$152)

Ce sont les cellules AC et AD où un 0 (zéro) m'est renvoyé
En espérant que je sois suffisamment clair.
 
Re : Copier cellules non vide d'une plage

Je crois avoir saisi le problème des formules.

J'ai donc modifié MacroCopie afin de ne recopier que les valeurs et non les formules. N'ayant pas ton fichier final, je te laisse le soin d'adapter ce code.

Pour une raison que je ne m'explique pas, j'ai dû introduire des lignes de déprotection/reprotection de la feuille de mois, sans quoi la copie ne se faisait pas sur Verificat. Alors qu'hier, ça fonctionnait parfaitement.

A +

Cordialement.
 

Pièces jointes

Dernière édition:
Re : Copier cellules non vide d'une plage

Re

J'ai essayé ta nouvelle macro.
Je te joins mon fichier actualiser sans différents onglets (question de poids).
J'ai retravaillé ta macro.
Je cherche à saisir ta nouvelle ligne : .Range("CA" & lg & ":CA" & lg).PasteSpecial Paste:=xlPasteValues
à quoi sert ":CA" & lg :CA = Colonne & lg = ligne, mais pourquoi ?

sinon avec cette ligne supplémentaire l'ancien code était moins aléatoire (je me trompe peut-être) mais la ligne Cel.Offset(0, -1).Resize(1, 3).Copy ne répond plus aux critères. En Effet si l'on reprend tes explications et la ligne For Each Cel In ActiveSheet.Range("AB156:AB" & Rows.Count).SpecialCells(xlCellTypeConstants)
je devrais trouver comme colonne prise en compte AC et de la ligne 156 à la dernière pleine, or le résultat ne correspond pas aux critères de sélection.
Je te laisse vérifier le résultat dans la feuille Accueil ou Janvier, feuilles prises en référence.
Merci encore
 

Pièces jointes

Re : Copier cellules non vide d'une plage

RE:

Concernant ce point:

Code:
.Range("CA" & lg & ":CA" & lg).PasteSpecial Paste:=xlPasteValues
Code:
.Range("CA" & lg).PasteSpecial Paste:=xlPasteValues
devrait suffire.

Pour le reste, ça se complique sérieusement: la structure des onglets est bien différente de celle du classeur d'origine et j'aurais besoin de précisions concernant les plages qui doivent être traitées par la macro.

En te souhaitant une bonne nuit (moi je vais faire reposer mes neurones).

Cordialement.
 
Re : Copier cellules non vide d'une plage

Re
Tu as raison il faut savoir se ressourcer de temps en temps.
Après pal mal de galère et de tripotage, je suis arriver à faire fonctionner ta macro dans la page d'accueil.

la voici en partie de ce qui nous intéresse.

For Each Cel In ActiveSheet.Range("AB156:AB" & Rows.Count).SpecialCells(xlCellTypeConstants)
Cel.Select
lg = .Range("cB" & Rows.Count).End(xlUp).Row + 1 '
If lg < 6 Then lg = 5 '
Cel.Offset(0, 0).Resize(1, 3).Copy
.Range("cB" & lg & ":cA" & lg).PasteSpecial Paste:=xlPasteValues
Next

les parties en rouge sont les parties que j'ai dû adapter pour qu'elle fonctionne. J'ai été obligé de garder les deux protections. Bizarre

Pour la structure des onglets, avec tous les remaniements je vais les reprendre pour les rendre identiques. Car je progressais dans l'élaboration des macros quand tu es venu à mon secours et qui de ce fait me fait revoir toute ma stratégie dans la construction du classeur et dans la suite des événements depuis la saisie d'une dépense jusqu'au bilan final du solde annuel. Pour mon compte personnel, je fais mes comptes sur Access et je trouve que c'est plus pratique pour ce genre d'exploitation. Mais tout ceci me fait progresser dans l'étude d'excel.

Merci encore pour tous.
Je reviendrai surement te revoir, pour tes précieux conseils.
Il est vrai, il faut le dire, même le crier haut et fort, que ce forum est GENIAL avec du personnel compétent et très à l'écoute de personnes novices comme moi.
Encore merci à toi Staple, Papou-Net et tous les autres qui m'ont aidé et donné des conseils.
 
Re : Copier cellules non vide d'une plage

Bonjour Papou-Net
Boujour le Forum
Je vous présente tous mes voeux pour cette année 2015, qu'elle soit généreuse, avec de la santé et sans problème.
Je reviens vers toi, toujours dans le même fichier et j'ai remarqué un petit souci, que je n'arrive pas à m'explique.
C'est dans mon USF de saisie mensuelle dans le textbox date. Tu m'as crée ce code

Private Sub UserForm_Activate()
Dim DateJour As Date

DateJour = Date
With TextBox2
.Value = CStr(DateJour)
.SelStart = 0
.SelLength = 10
End With
End Sub



qui affiche la date du jour dans le texbox, pas de souci c'est bien la date du jour sous le format jj/mm/aaaa.
Où ça se complique c'est dans l'écriture de cette date dans la cellule de la feuille. La cellule est formatée jj/mm/aa et la date qui s'inscrit et sous le format mm/jj/aa.
Lorsque j'utilise le raccourci clavier ctrl; la date du jour est bien sous le format jj/mm/aa.
J'ai recherché sur la toile, et je n'arrive pas à adapter un code qui oblige le format jj/mm/aa dans la cellule.
Où est le problème.
Merci et bonne année à toi
 
Dernière édition:
Re : Copier cellules non vide d'une plage

Bonjour lmc71, et meilleurs voeux pour toi également,

Dans la ligne d'affectation du TextBox à ta cellule, essaie de convertir la valeur en date.

Ex:
Code:
Range("A1") = Cdate(TextBox1.Value) *
Il faut savoir que le contenu des TextBox est toujours considéré comme du texte, sauf s'il ne contient que des caractères numériques.

Donc, ne jamais oublier de convertir avant manipulation.

Par ailleurs, en jetant un oeil sur l'ensemble de ton code, je te propose de simplifier ta procédure Copie_Motif_à_Accueil() comme ceci:

Code:
Sub Copie_Motif_à_Accueil()
Dim LstMois, Lg As Integer

LstMois = Array("JANVIER", "FEVRIER", "MARS", "AVRIL", "MAI", "JUIN", "JUILLET", "AOUT", "SEPTEMBRE", "OCTOBRE", "NOVEMBRE", "DECEMBRE")
'
' Macro2 Macro
'
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True, Password:="123", UserInterfaceOnly:=True 'Enlève et remet le mot de passe

    ' supprime les données dans la feuille Accueil
    Columns("CA:CO").ClearContents
    Range("A1:P1").Select

    'Ouvre toutes  les  feuilles

Call Affiche_Ts_Mois

Lg = 2
For m = LBound(LstMois) To UBound(LstMois)
  Sheets(LstMois(m)).Range("AB156:AP309").Copy
  Feuil2.Range("CA" & Lg).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
  Lg = Lg + 153
Next

Call Masquer
    Sheets("Accueil").Select

    Call Doublons_Ac_quatre_colonne
    Range("b1").Select

End Sub
NB: il n'est pas nécessaire de sélectionner des feuilles et des cellules pour les manipuler.

A +

Cordialement.

* Tu remplaces bien évidemment l'adresse et le nom par ceux que tu as fixés.
 
Re : Copier cellules non vide d'une plage

Re
Merci pour la date. Tout fonctionne
En ce qui concerne la macro Sub Copie_Motif_à_Accueil() je te remercie pour les modifs.
Je poursuis la construction du fichier.
Je te l’enverrai directement si tu veux.
Cordialement
 
Re : Copier cellules non vide d'une plage

Re
Merci pour la date. Tout fonctionne
En ce qui concerne la macro Sub Copie_Motif_à_Accueil() je te remercie pour les modifs.
Je poursuis la construction du fichier.
Je te l’enverrai directement si tu veux.
Cordialement

Merci pour le retour d'info.

Tu peux m'envoyer la version finale, je la regarderai avec plaisir. Sinon je reste à ta disposition pour le cas où.

Cordialement.
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
4
Affichages
101
Réponses
72
Affichages
1 K
Retour