Copier d'une feuille à une autre avec test si ligne vide

Graxy

XLDnaute Nouveau
Copier d'une feuille à une autre en code VBA

Bonjour le forum.

Malgrès des heures de recherches sur le forum je n'arrive toujours pas à comprendre boucle et copier-coller. Etant novice encore en VBA, je me tourne vers vous pour me filer une petit coup de main.

J'ai 2 feuille Base et tableau de bord.

Dans la base il y à des valeur de la ligne A5 à G5. Il n'y a pas de ligne de fin puisque dans la programmation final, on crée et supprime des lignes. Bref les ligne peuvent aller jusqu'au bout du classeur si il le faut.

Ce que je veux c'est qu'en programmation VBA, lorsque l'on ouvre le classeur, les différente ligne soit copier et coller en lieu et place sur la feuille tableau de bord (donc sur la plage A5:G5 sur autant de ligne que necessaire) et qu'après un trie soit effectué sur la collone A comportant le N°.

Voila j'ai essayer de faire des choses en fouinnant sur le forum et en bidouillant des bout de code. Mais la je ne comprend pas la selection de plage, et surtout la boucle.


Dans le must il me restera a voir comment mettre la date (colone F) en rouge si elle est dépassé.

Je vous donne mon bout d'ébauche qui marche pas est ressemble pas a grand chose.

Bien à vous et merci d'avance
 

Pièces jointes

  • Statistique test.zip
    43.2 KB · Affichages: 49
Dernière édition:

skoobi

XLDnaute Barbatruc
Re : Copier d'une feuille à une autre avec test si ligne vide

Bonjour,

Dans le titre de la discussion tu parles de test si ligne vide mais rien dans le message...
De plus, le tableau source est déjà trié sur la colonne a non?
 

alex67800

XLDnaute Impliqué
Re : Copier d'une feuille à une autre avec test si ligne vide

Bonsoir Graxy,
essai ceci à mettre en lieu et place de ton code commandbutton1.
Code:
Sheets("Base").Range("A5:G" & Range("A65536").End(xlUp).Row).Copy
Sheets("Tableau de bord").Range("A5").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
Range("A5:G" & Range("A65536").End(xlUp).Row).Select
Application.DisplayAlerts = False
Selection.Sort _
Key1:=Range("A:A"), Order1:=xlAscending, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
Le seul soucis est ta codification des demandes D-1, D-2, etc... le tri ascendant se fait D-1, D-10, D-11, puis D-2, etc...
Pour éviter ceci pour D-1 met D-01, D-2>>>>D-02............D-13, etc...

Regarde si cela te convient!

Edit: Ou à placer en début de code de workbook_open()
 
Dernière édition:

Graxy

XLDnaute Nouveau
Re : Copier d'une feuille à une autre avec test si ligne vide

C'est génial ça marche !!!

Me reste a comprendre la logique de tout ca .

Si je comprend bien on sélectionne chaque ligne, si il y a quelque chose dans la cellule on copy et dès qu'il y a une cellule vide ca s'arrete. C'est bien C'est pile ce qui me fallait.

Par contre je suis pas sur d'un bout de code.

Si je veux faire en sorte que la date de la colone F soit coloriser en rouge si la date dépasse celle de mon ordianateur faut mettre un truc du genre ?


Dim mydate
mydate = Date
If
Sheets("Base").Range("G" & Range("A65536").End(xlUp).Row)<mydate then
Interior.ColorIndex = 3
end if

je suis pas sur je fait ca de tete ^^

merci en tout cas pour la partie du code cza m'enleve une bonen épine du pied.

Pour skoobi je voulais dire qu'il fallait testerles ligne au besoin .Mais en faite je vias opter pour un écrasement des donnée étant donnée que le tableau base ce met a jour au démarrage ;)
 
Dernière édition:

Graxy

XLDnaute Nouveau
Re : Copier d'une feuille à une autre avec test si ligne vide

narf de narf.

Le programme a comme un problème il veut pas boucler.

En effet il s'arrete a la cellule A20.

J'ai simplifier le code pour pas trier. Ca me donne ça:
Private Sub CommandButton2_Click()
Sheets("Base").Range("A5:G" & Range("A65536").End(xlUp).Row).Copy
Sheets("Tableau de bord").Range("A5").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("A5:G" & Range("A65536").End(xlUp).Row).Select
Application.DisplayAlerts = False

End Sub

Donc je croyais que avec A65536 on ce donner toute la plage du document.

Alors je pense qu'il faut rajouter une fonctin DO........Loop Mais on va dire que l'aide de microsft est assé obscur lol :)

quelqu'un peut-il m'aider ?
 

alex67800

XLDnaute Impliqué
Re : Copier d'une feuille à une autre avec test si ligne vide

Bonjour Graxy,
Une simple MFC pour la coloration de ta cellule suffit. Pas besoin de macro.
Tu selectionne toute ta colonne date (colonne F).
Format>>>>Mise en forme conditionnelle>>>>>la valeur de la cellule est>>>>>>supérieure>>>>>>=AUJOURDHUI(), tu choisis ta couleur.
Donc toute date supérieur à la date du jour changera de couleur.

Pour la première partie, en effet cela s'arrête à A20, Bizarre.
Sinon fait à l'arrache via l'enregistreur:
Code:
    Sheets("Base").Select
    Range("A5:G5").Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Copy
    Sheets("Tableau de bord").Select
    Range("A5").Select
    ActiveSheet.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
    Application.CutCopyMode = False
    Range("A5").Select
A tester. Sinon je regarderais pourquoi la première méthode ne fonctionne pas!

A+
 

Graxy

XLDnaute Nouveau
Re : Copier d'une feuille à une autre avec test si ligne vide

Bonjourle fil, bonjour le forum.

Effectivement avec une MFC ca passe bien. Le probleme c'est que je voudrais tout mettre en codage VBA pour sécuriser au maximum mon travail.

Je vais essayer le truc de l'enregistreur. ou alors faudrait vraiment que j'arrive a mettre cette petite boucle mais je comprend vraiment pas la logique ^^


Bien a toi forum !!
 

alex67800

XLDnaute Impliqué
Re : Copier d'une feuille à une autre avec test si ligne vide

Re Bonjour Graxy,

J'ai à nouveau essayer la méthode que je te proposais, mais avec un nouveau classeur, en reprenant ton tableau Base. Cette fois si cela fonctionne, la macro prend bien toutes les lignes non vides. A préciser dans le doute j'ai mis des dates cohérente plus tôt que 1900 pour l'année au cas ou!

Je t'ai codé ta MFC comme demandé.

Il arrive qu'à force de triturer un fichier il soit vérolé et ne focntionne donc plus correctement. Pour celui que je te joint cela fonctionne correctement avec workbook_open;)

Regarde si cela te convient!

A te lire

Edit: Si tu ne protèges pas ton projet VBA rien n'empêchera l'utilisateur de le modifier ;)
 

Pièces jointes

  • testgraxy2.xls
    38 KB · Affichages: 109

Graxy

XLDnaute Nouveau
Re : Copier d'une feuille à une autre avec test si ligne vide

Super !!!

Ca fait pile ce que je voulais pour coloriser les cases.

Pour le copier coller, j'ai remplacer le xlUp par xlDown et ca marche niquel ;) ca me copie tout pile ce que je veux. J'ai meme réussit en cherchant sur l'aide et le fofo comment copier les bordure (fallait mettre xlPasteAll ^^)

Donc je suis content car grace a tout ça j'ai bien compris ce mode de fonctionnement :)

La je planche sur un autre problème.

Je souhaite définir la variable Count pour une rechercher.


En effet j'ai vu que par defaut cette variable selectionner la valeur la plus forte. Donc si je recherche un numéro comme S-1, il me sort en résultat de recherche le numéro S-15 Donc je voudrais faire en sorte de changer la fonction Count pour prendre dans ma recherche la valeur la plus basse.

Ainsi si je tape S-1 dans mon champ de recherche, je sort S-1 et si j'ai besoin de S-15 je tape S15 tout betement lol ^^

Donc voila je cherche je cherche mais si qqun sais comment faire (ou par une autre methodes) je suis prenneurs ;)

Merci en tout cas pour toute les infos déjà donnée ;)

Bien a toi forum, le fil

Edit pour répondre à ton Edit.
Edit: Si tu ne protèges pas ton projet VBA rien n'empêchera l'utilisateur de le modifier ;)

Je mise sur la non connaissance de VBA et la faible connaissance en maccro pour proteger mon classeur. JE cache les feuille senssible et je protege leur édition par mot de passe c'est suffisant pour les utilisateur du programme final ;) C'est de l'auto protection lol ^^
 
Dernière édition:

Graxy

XLDnaute Nouveau
Re : Copier d'une feuille à une autre avec test si ligne vide

BOnjour le fil bonjour le forum.

Je double post car je vien de trouver la solution. Je la post si ça peut aider quelqu'un qui lis le forum.

J'ai fouiller plus en profondeur l'aide de microsft et la paff la solution ma sauter dessus ^^

Donc voila ma fonction recherche

Dim plage As Range, Cell As Range
Dim Recherche As String, Adresse As String
Dim c As Range

Recherche = Textbox1.value
DerLigne = Sheets("Stat A").Range("A" & "65536").End(xlUp).Row
Set plage = Sheets("Stat A").Range("A" & "2:" & "A" & DerLigne)
With plage
Set c = .Find(Recherche, lookat:=xlWhole) '<== La ce trouve la solution
If Not c Is Nothing Then
Adresse = c.Address
Do
If UCase(Recherche) = UCase(Left(c, Len(Recherche))) Then
c.Offset(0, 7) = ("OUI")
c.Offset(0, 7).Interior.ColorIndex = 19
End If
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address <> Adresse
End If
End With

Donc voila. Quand on définit la variable Lookat on peut choisir entre xlPart ou xlWhole. La constante xlPart ne recherche que le 1er terme qui arrive en saisie (dans mon exemple je rechercher S-1 et ça me sortait S-16 qui était le 1er sur la ligne)
Avec xlWhole on prend la valeur jsute ou précise comme on veut. Du coup quand je recherche S-1 ça me donne S-1 et si je recherche S-16 ca me donne S-16. ^^


Donc voila. C'était pas avec count qu'il fallait chercher.

Merci a tous pour votre aide. Je suis heureux de dire que ma grande programmation est désormais terminer. J'ai coller tous les morceaux de mes fichier excel et tout mon fichier de suivie et de saisie marche a la perfection :D;):p

Donc MERCI à tous et à ce forum complet

Bien à vous et au plaisir de vous lire

Graxy
 

Discussions similaires

Statistiques des forums

Discussions
312 305
Messages
2 087 080
Membres
103 457
dernier inscrit
fab2614