Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 16/01/2012, 17h16   #1
Invité de passage
 
Inscription : janvier 2012
Messages : 6
Détails du profil
Informations forums :
Inscription : janvier 2012
Messages : 6
Points : 0
Points : 0
Par défaut Récupérer(copier) et trier des données

Bonjour à tous, je suis un petit peu embeté.

Je suis en face d'un gros tableau de données (confidentielles, je ne peux donc pas les mettrent sur internet)..

Ce qu'il me faut faire c'est 1 premier temps sélectionner les données de la feuille 2 et les copier sur la feuille 1

J'avais pensé à un truc comme ça.

Code :
1
2
Sheets(2).Range("A1:AX900").copy 
Sheets(1).range("A1")
Puis ensuite il me faut garder uniquement les lignes des totals et que certaines colonne. Je ne vois pas comment faire..

Merci d'avance à celui ou ceux qui pourront m'aider
BIOoOAG est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/01/2012, 17h23   #2
Membre Expert
 
Avatar de ZebreLoup
 
Homme Sebastien L
Ingénieur Financier
Inscription : mars 2010
Messages : 880
Détails du profil
Informations personnelles :
Nom : Homme Sebastien L
Âge : 33
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Ingénieur Financier
Secteur : Finance

Informations forums :
Inscription : mars 2010
Messages : 880
Points : 1 867
Points : 1 867
Tu ne donnes pas assez d'éléments pour qu'on t'aide. Il faut que tu détailles un peu plus la mise en page de ta feuille. On ne peut pas deviner comment on sait qu'une ligne est un total et quelles sont les colonnes que tu veux garder.

Et pour ce qui est d'un fichier illustratif, en général, on ne met de toute façon qu'une fichier le plus allégé possible et après avoir mis des données bidons à l'intérieur.
__________________
« Compter en octal, c’est comme compter en décimal, si on n’utilise pas ses pouces » - Tom Lehrer
« Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste. » - Steve McConnell
ZebreLoup est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2012, 13h29   #3
Invité de passage
 
Inscription : janvier 2012
Messages : 6
Détails du profil
Informations forums :
Inscription : janvier 2012
Messages : 6
Points : 0
Points : 0
Voila j'ai pris un peu de temps à midi pour faire un fichier "test" pour expliquer ce que je cherche à faire. J'ai mis les explications en commentaire sur le code VBA. Mais je les remet ici avec le fichier


Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Sub Mois()
Dim reponse As String
 
reponse = InputBox("Quel mois voulez vous choisir?")
 
If reponse = "Janvier" Then
'copier les données de la feuille 2 vers la feuille 1
'Puis faire en sorte de garder que les lignes de totals SCB et AA (ou supprimer les autres?(env 700 à supprimer en vrai ^^))
'Et ne garder que les colonne Marge A et Marge C (Ou supprimer les autres?)
ElseIf reponse = "autreMois" Then
'Meme principe mais de la feuille 3 vers la 1 etc...
End If
 
End Sub
FICHIER

http://www.terafiles.net/v-126062.html
BIOoOAG est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2012, 13h56   #4
Membre Expert
 
Avatar de MarcelG
 
Homme Marcel GALANO
Développeur informatique
Inscription : juillet 2009
Messages : 644
Détails du profil
Informations personnelles :
Nom : Homme Marcel GALANO
Localisation : France, Maine et Loire (Pays de la Loire)

Informations professionnelles :
Activité : Développeur informatique
Secteur : Finance

Informations forums :
Inscription : juillet 2009
Messages : 644
Points : 1 255
Points : 1 255
Par défaut lcombobox

Bonjour à toi, Bonjour le Forum,

Si je peux me permettre.

12 conditions pour gérer un mois donné ne me semble pas la méthode la plus efficace.

Plutôt qu'un Inputbox, je préconiserais une liste déroulante des mois proposés (combobox) et le traitement du mois choisi par activation d'un bouton (commandbutton), par exemple Les 2 contrôles étant intégrés à un formulaire. Ce processus suppose que les noms de tes feuilles soient bien normés afin d'argumenter efficacement une procédure.

Je n'arrive pas à télécharger ton fichier (Page introuvable). Pourrais-tu l'attacher à ton post.

A plus tard.
__________________

Bien Cordialement.

Marcel

Pas de messagerie personnelle pour vos questions, s'il vous plaît. La réponse peut servir aux autres membres. Merci.


MarcelG est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2012, 20h38   #5
Invité de passage
 
Inscription : janvier 2012
Messages : 6
Détails du profil
Informations forums :
Inscription : janvier 2012
Messages : 6
Points : 0
Points : 0
Voila le fichier.
ps: j'ai pris en compte tes remarques, je regarde d'un peu plus près ces ComboBox ce soir.
Fichiers attachés
Type de fichier : 7z Demo.7z (14,9 Ko, 7 affichages)
BIOoOAG est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2012, 09h10   #6
Membre Expert
 
Avatar de MarcelG
 
Homme Marcel GALANO
Développeur informatique
Inscription : juillet 2009
Messages : 644
Détails du profil
Informations personnelles :
Nom : Homme Marcel GALANO
Localisation : France, Maine et Loire (Pays de la Loire)

Informations professionnelles :
Activité : Développeur informatique
Secteur : Finance

Informations forums :
Inscription : juillet 2009
Messages : 644
Points : 1 255
Points : 1 255
Par défaut fichier

Bonjour à toi, Bonjour au Forum,

Je n'y arrive toujours pas.

Pourrais-tu
- enregistrer ton fichier au format Excel 2003 (.xls)
- l'attacher tel quel à ton post

Merci.
__________________

Bien Cordialement.

Marcel

Pas de messagerie personnelle pour vos questions, s'il vous plaît. La réponse peut servir aux autres membres. Merci.


MarcelG est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2012, 14h50   #7
Membre Expert
 
Avatar de ZebreLoup
 
Homme Sebastien L
Ingénieur Financier
Inscription : mars 2010
Messages : 880
Détails du profil
Informations personnelles :
Nom : Homme Sebastien L
Âge : 33
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Ingénieur Financier
Secteur : Finance

Informations forums :
Inscription : mars 2010
Messages : 880
Points : 1 867
Points : 1 867
Les colonnes que tu veux garder sont toujours les mêmes ?
Pour les totaux, ils seront toujours sur la même ligne ? Et sinon, il s'appelleraient toujours "TOTAL SCB" et "TOTAL AA" dans la colonne C ?
__________________
« Compter en octal, c’est comme compter en décimal, si on n’utilise pas ses pouces » - Tom Lehrer
« Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste. » - Steve McConnell
ZebreLoup est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2012, 18h46   #8
Invité de passage
 
Inscription : janvier 2012
Messages : 6
Détails du profil
Informations forums :
Inscription : janvier 2012
Messages : 6
Points : 0
Points : 0
Alors normalement les colonnes seront toujours les mêmes. Et les lignes elles changent tout le temps..

Normalement non il n'y a pas "Total" devant les lignes, mais je peut mettre total ou 1 ou autre chose pour marquer la présence de la ligne et reperer la ligne avec un For each Elements in ... Next Elements
Cependant comme cette ligne utilise la formule somme ca va pas créer de pb si on supprime celle qui servent au calcul?

ADD piece jointe en format xls
Fichiers attachés
Type de fichier : xls Demo.xls (44,5 Ko, 5 affichages)
BIOoOAG est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2012, 18h48   #9
Membre Expert
 
Avatar de MarcelG
 
Homme Marcel GALANO
Développeur informatique
Inscription : juillet 2009
Messages : 644
Détails du profil
Informations personnelles :
Nom : Homme Marcel GALANO
Localisation : France, Maine et Loire (Pays de la Loire)

Informations professionnelles :
Activité : Développeur informatique
Secteur : Finance

Informations forums :
Inscription : juillet 2009
Messages : 644
Points : 1 255
Points : 1 255
Bonsoir,

Voir ma demande plus haut.
__________________

Bien Cordialement.

Marcel

Pas de messagerie personnelle pour vos questions, s'il vous plaît. La réponse peut servir aux autres membres. Merci.


MarcelG est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/01/2012, 09h39   #10
Membre Expert
 
Avatar de ZebreLoup
 
Homme Sebastien L
Ingénieur Financier
Inscription : mars 2010
Messages : 880
Détails du profil
Informations personnelles :
Nom : Homme Sebastien L
Âge : 33
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Ingénieur Financier
Secteur : Finance

Informations forums :
Inscription : mars 2010
Messages : 880
Points : 1 867
Points : 1 867
Voici le code qui fait ce que tu désires. A toi de l'adapter pour coller exactement à ton besoin. J'ai aussi fait en sorte que le bouton de la feuille 1 ne se déplace pas avec les cellules, sinon, on peut avoir un comportement bizarre quand on efface (à définir dans les propriétés du bouton)
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
Sub Mois()
    Dim wsMois As Worksheet
    Dim ws As Worksheet
    Dim reponse As String
    Dim i As Integer
 
    'On demande quel est le mois à traiter
    reponse = LCase(InputBox("Quel mois voulez vous choisir?"))
 
    'On cherche si un onglet correspond à ce mois
    For Each ws In ThisWorkbook.Worksheets
        If LCase(ws.Name) = reponse Then Set wsMois = ws
    Next ws
 
    'On sort si on n'a pas trouvé d'onglet
    If wsMois Is Nothing Then
        MsgBox "Feuille inexistante pour ce mois"
        Exit Sub
    End If
 
    'On copie les valeurs (pour enlever les formules)
    Set ws = Worksheets("Resumé")
 
    wsMois.Cells.Copy
    ws.Range("A1").PasteSpecial xlPasteValues
    ws.Range("A1").PasteSpecial xlPasteFormats
 
    'On efface les 2 premières lignes vides
    ws.Rows("1:2").Delete
 
    'On efface les colonnes
    For i = ws.UsedRange.Columns.Count + ws.UsedRange.Column - 1 To 1 Step -1
        If ws.Cells(1, i).Value <> "Marge A" And ws.Cells(1, i).Value <> "Marge C" And ws.Cells(1, i).Value <> "Entreprise" Then
            ws.Columns(i).Delete
        End If
    Next i
 
    'On efface les lignes
    For i = ws.UsedRange.Rows.Count + ws.UsedRange.Row - 1 To 1 Step -1
        If ws.Cells(i, 1).Value <> "Entreprise" And Left(ws.Cells(i, 1).Value, 5) <> "TOTAL" Then
            ws.Rows(i).Delete
        End If
    Next i
 
End Sub
__________________
« Compter en octal, c’est comme compter en décimal, si on n’utilise pas ses pouces » - Tom Lehrer
« Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste. » - Steve McConnell
ZebreLoup est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/01/2012, 12h20   #11
Invité de passage
 
Inscription : janvier 2012
Messages : 6
Détails du profil
Informations forums :
Inscription : janvier 2012
Messages : 6
Points : 0
Points : 0
Je te dis un très grand merci! je suis à cet instant même en train d'étudier ton code pour pouvoir l'appliquer à mon tableau. Si vraiment je comprend pas après avoir cherché sur le net je te demanderai. Mais ca devrait aller. Merci beaucoup!
BIOoOAG est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/01/2012, 11h33   #12
Invité de passage
 
Inscription : janvier 2012
Messages : 6
Détails du profil
Informations forums :
Inscription : janvier 2012
Messages : 6
Points : 0
Points : 0
Bon c'est bon j'ai réussi à l'adapter sur mon document. Par contre il y a des chose que je ne comprend pas très bien :

Set, si j'ai bien compris sert à définir la plage de données qui est associée à une variable?

C'est quoi la différence entre :
-Pastevalue (donc copie des valeurs)
et
-PasteFormat (qui sert à?? Copier la mise en forme?)

Et cette boucle For... To :
For i = ws.UsedRange.Columns.Count + ws.UsedRange.Column - 1 To 1 Step -1

UsedRange sert à quoi en fait?
-1 ?
Et le Step -1 je comprend pas son utilisation.
En fait je la comprend pas du tout celle là ^^

Merci encore pour ton aide. Bonne journée
BIOoOAG est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/01/2012, 11h46   #13
Membre Expert
 
Avatar de ZebreLoup
 
Homme Sebastien L
Ingénieur Financier
Inscription : mars 2010
Messages : 880
Détails du profil
Informations personnelles :
Nom : Homme Sebastien L
Âge : 33
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Ingénieur Financier
Secteur : Finance

Informations forums :
Inscription : mars 2010
Messages : 880
Points : 1 867
Points : 1 867
Set sert à affecter quelque chose à un objet. Il ne faut pas mettre de Set quand il s'agit d'un type "simple" (String, Integer, Double, ...), mais dès qu'il s'agit d'un objet (Worksheet, Workbook, Range, Collection, Classe quelconque...), c'est nécessaire.

PasteValue est l'équivalent d'un copier en valeurs, et PasteFormat d'un copier le format. Je fais ça pour ne pas garder les éventuelles formules.

UsedRange représente la plage utilisée de la feuille. La boucle va de la dernière colonne utile (première colonne + nombre de colonne de zone utile) à la première colonne de la feuille, et le Step -1 indique que l'on va à l'envers. On aurait pu mettre Step -2 pour aller à l'envers de 2 en 2 par exemple. Revoit la définition du For ... Next dans l'aide, tu comprendras mieux.
__________________
« Compter en octal, c’est comme compter en décimal, si on n’utilise pas ses pouces » - Tom Lehrer
« Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste. » - Steve McConnell
ZebreLoup est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 16h22.


 
 
 
 
Partenaires

Hébergement Web