Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Copier conditionel des lignes

C

Chris

Guest
Bonjour à tous,

Sur une feuille excel, j'ai sous forme de base de donnée (donc de lignes) des informations concernant les devis reçus.
Je suis completement debutant en Macro, j'ai essayer d'utiliser la macro pour les cellules mais je ne suis pas arriver à la transposé en ligne.

Plus precisement, je voudrais activé la cellule avec le n° du mois. A partir de la l'ensemble des lignes avec le meme n° de mois doivent etre couper/coller dans une autre feuille.

Ca va me servir à faire un historique des devis avec ceux en cours et ceux archivés.

Si qq'un peut me donner un coup de pouce ca m'arrangerais, ca fait 2 jours que j eme casse la tete dessus.


Merci d'avance
 
E

EricS

Guest
Bonjour et désolé

je ne sais pas qui a eu l'idée de donner aux 2 fichiers quasiment le même nom (sans doute moi pour des questions de gestion car il va falloir que je me mette à les ranger mes fichiers du forum, ma tête ne va plus me suffire)

donc ci-joint le fichier historique INVERSE chris

A+
Eric
 

Pièces jointes

  • HistoriqueInverseChris.zip
    17.7 KB · Affichages: 14
C

Christophe

Guest
Salut Eric

Nickel, ca marche bien!
Au risque d'être pénible j'ai encore quelques questions:

* Mes dates à classer sont par mois et le format utilisé est "janv-04" à "déc-04". Comment lancer le tri sans qu'il y ait demande du mois à traiter et que la macro réalise le tri et la création des feuilles automatiquement pour tous les mois de l'année en cours?
* J'aimerais extraire les données en question d'un fichier et créer les feuilles mois par mois dans un autre fichier. Est-ce réalisable?
* de quelle façon fait-on éxécuter la macro automatiquement à l'ouverture du fichier Excel?

Merci encore pour ton aide précieuse.

A bientot

Christophe
 
E

EricS

Guest
Bonjour

1/pour un autre format de dates essaie:

Dim x As String
x = Format(Range("c3").Value, "MMM-yyyy ")


2/ lancer la macro en automatique : il faut la placer non pas dans un module mais au niveau workbook dans une macro workbook_open()

3/ tri automatique : cela veut dire que tu le fais à chaque fois, donc que tu n'enregistres pas le fichier avec les feuilles générées ?

Dans ce cas il faut détecter tous les mois et réaliser une boucle qui englobe la macro déjà faite (sauf la sélection du mois évidemment)

Sub moisauto()
'détection des mois

Dim acréer(1 To 30) As Single, date_courante As Single

dernière_histo = Range("c65536").End(xlUp).Row
jmax = 1
For i = 2 To dernière_histo
j = 1
créé = 0
date_courante = Range("c" & i).Value
While j <= jmax And créé = 0
'MsgBox Month(date_courante) & " " & Month(acréer(j)) & " " & Year(date_courante) & " " & Year(acréer(j))
If Month(date_courante) = Month(acréer(j)) And Year(date_courante) = Year(acréer(j)) Then
créé = 1
End If
j = j + 1
Wend
If créé = 0 Then acréer(jmax) = date_courante: jmax = jmax + 1
Next i

' pour la suite au lieu du message mois, tu crées la feuille en reprenant ta macro existante
' et en affectant acréer(j) à date_courante

If jmax = 1 Then MsgBox "pas d'enregistrement": Exit Sub
For j = 1 To jmax - 1
MsgBox (Month(acréer(j)) & "-" & Year(acréer(j)))
Next j

4/ utilisation de plusieurs fichiers
tu peux évidemment récupérer les données dans un fichier et les enregistrer dans un autre.
regarde l'appli jointe pour t'en inspirer

le fichier automobile a besoin de automobilemodèle(i) (vides pour cet essai mais pouvant contenir des données) et génère des fichiers nomvoiture

il faut bien stocker les noms de fichier dans des variables pour les ouvrir, fermer et basculer fiablement

Bonne lecture A+
Eric
 

Pièces jointes

  • automobile.zip
    18.8 KB · Affichages: 25
  • automobile.zip
    18.8 KB · Affichages: 22
  • automobile.zip
    18.8 KB · Affichages: 22
C

Christophe

Guest
Salut Eric!

Merci pour tes conseils et solutions, tu me tires une épine du pied!
concernant le point 3/ pour ton info: l'extraction qui est réalisée sert ponctuellement à l'édition des données (fréquence tous les mois, pour récapitulatif).

Merci encore, je vais essayer les propositions.

@+

Christophe.
 
C

Christophe

Guest
Salut Eric

Merci super ca marche! 2 ptites questions supplémentaires:

* j'aimerais, une fois que toutes les lignes sont copiées dans les feuilles mois par mois, supprimer des colonnes pour rendre le tableau plus lisible. De quelle façon est-ce réalisable?

* De plus, j'aimerais faire apparaitre le nom du mois dans chaque feuille créée. Que me conseilles-tu?

Merci encore et encore ;O)

Christophe.
 
E

EricS

Guest
Bonjour

content que cela te plaise

1/
pour effacer des colonnes (les mêmes sur plusieurs feuilles), tu peux t'inspirer du code suivant (obtenu par l'enregistreur de macro en faisant l'opération à la main)

Sheets(Array("Feuil1", "Feuil3")).Select
Sheets("Feuil1").Activate
Range("B:B,D,E:E,G:G,I:I").Select
Range("I1").Activate
Selection.Delete Shift:=xlToLeft
Range("A1").Select

sélection de feuil1 et feuil3, suppression de B D E G et I sur les 2 feuilles en même temps et décalage vers la gauche des colonnes

2/

repère une cellule libre sur les feuilles que tu vas créer (par exemple a1)
tu crée la feuille
tu fais ton copier coller
tu vas sur la feuille que tu viens de créer, la colonne date est par exemple la D

tu fais
Range("a1") = Format(Range("D2").Value, "MMM-yyyy ")

que tu peux compléter par

Range("A1").Select
With Selection.Font
.Name = "Arial"
.Size = 12
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
.ColorIndex = xlAutomatic
End With
Selection.Font.Bold = True
Columns("A:A").EntireColumn.AutoFit

qui passe en taille 12 gras et ajuste la colonne

Note : tous ces codes sont obtenus en utilisant l'enregistreur de macro, en faisant l'opération à la main et en allant voir le code généré. il reste ensuite à l'adapter à l'appli

A+

Eric
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…