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 07/01/2012, 10h16   #1
Invité de passage
 
Homme
Ressources humaines
Inscription : janvier 2012
Messages : 6
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Ressources humaines
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : janvier 2012
Messages : 6
Points : 0
Points : 0
Par défaut Automatisation du remplissage d'un tableau

Bonjour,
Je souhaite automatiser le remplissage d'un tableau de la manière suivante :
les cellules A1:H1 contiennent des formules alimentées par les utilisateurs du fichier.
je veux automatiser le "copier spécial valeur" de ces cellules dans un tableau en fonction de la date.
si les modifications interviennent à la même date : écrasement de la ligne du tableau, si les modifications ont lieu à une date ultérieure, les valeurs s'inscrivent dans la ligne au dessous.

Merci de vos réponses.
BEUTCHE est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/01/2012, 10h55   #2
Membre chevronné
 
Avatar de defluc
 
Architecte
Inscription : mai 2002
Messages : 1 057
Détails du profil
Informations personnelles :
Âge : 62

Informations professionnelles :
Activité : Architecte

Informations forums :
Inscription : mai 2002
Messages : 1 057
Points : 745
Points : 745
Recueillir la valeur de la date à tester dans une variable.
Tester si cette date existe dans la colonne date de référence.
Si c'est le cas, écraser la ligne par les nouvelles valeurs, sinon ajouter ces valeurs dans une nouvelle ligne.
defluc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/01/2012, 15h25   #3
Invité de passage
 
Homme
Ressources humaines
Inscription : janvier 2012
Messages : 6
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Ressources humaines
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : janvier 2012
Messages : 6
Points : 0
Points : 0
Merci pour la réponse mais en code, ça donne quoi ? En fait, je ne sais pas comment créer le code pour sélectionner la ligne à coller. je ne suis pas fort en vba.
BEUTCHE est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/01/2012, 20h38   #4
Membre chevronné
 
Avatar de defluc
 
Architecte
Inscription : mai 2002
Messages : 1 057
Détails du profil
Informations personnelles :
Âge : 62

Informations professionnelles :
Activité : Architecte

Informations forums :
Inscription : mai 2002
Messages : 1 057
Points : 745
Points : 745
Difficile de répondre sans connaître ton niveau de compétence ainsi que ce que tu veux exactement faire.

Point de départ, est-ce que tu veux l'exécution automatique d'une macro quand une valeur est entrée dans une cellule particulière ou l'exécution manuelle par appel de la macro ?

Question 2 quand tu dis
Citation:
je veux automatiser le "copier spécial valeur" de ces cellules dans un tableau en fonction de la date.
le tableau dans lequel tu veux coller est-il celui du "copier" ou un autre ?

Pour t'aider à débuter, voici le code des déclarations des classeurs et des feuilles
Code :
1
2
3
4
  Dim C1Wbk As Workbook, C2Wbk As Workbook
  Dim C1Sheet, C2Sheet As Worksheet
  Dim C1WbkFile as String, C2WbkFile as String  '  Nom des fichiers
  Dim RowNo as Integer  '  Ligne où le collage doit se faire
Ensuite, leur affectation
Code :
1
2
3
4
  Set C1Wbk = Workbooks.Open(C1WbkFile)
  Set C2Wbk = Workbooks.Open(C2WbkFile)
  Set C1Sheet = C1Wbk.Sheets(1)
  Set C2Sheet = C2Wbk.Sheets(C2Wbk.Sheets.Count)  '  Dernière feuille du classeur C2Wbk
Enfin, copier la ligne iet la coller
Code :
C2Sheet.Cells(RowNo, 1).Insert  '  Paste peut engendre une erreur avec certaines versions de Excel
defluc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/01/2012, 09h57   #5
Invité de passage
 
Homme
Ressources humaines
Inscription : janvier 2012
Messages : 6
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Ressources humaines
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : janvier 2012
Messages : 6
Points : 0
Points : 0
Merci pour ces réponses. Je n'ai pas encore eu le temps de tester.
En fait, j'ai créé un fichier excel pour le suivi des matériels de ma boite. Ce fichier est en partage entre les différents intervenants qui modifient une feuille du fichier.
Sur une deuxième feuille, cachée des utilisateurs, j'ai une ligne de formules. avec ces formules je remplis un tableau situé en dessous qui me sert à faire différents bilans. Pour éviter de faire un "copier coller spécial valeur" manuel à chaque modification des données, je voudrais que les utilisateurs, en validant leurs modifications à l'aide d'un bouton, remplissent automatiquement mon tableau.
Le seul truc que je ne sais pas faire, c'est écrire le script pour dire à vba ou coller la fameuse ligne de calcul, en fonction de la date. s'il y a plusieurs modifications dans la même journée, je ne conserve que la dernière, si la modification intervient à une date différente, je veux que la macro me remplisse la ligne suivante.
BEUTCHE est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/01/2012, 18h12   #6
Membre chevronné
 
Avatar de defluc
 
Architecte
Inscription : mai 2002
Messages : 1 057
Détails du profil
Informations personnelles :
Âge : 62

Informations professionnelles :
Activité : Architecte

Informations forums :
Inscription : mai 2002
Messages : 1 057
Points : 745
Points : 745
Pour automatiser la récolte des données entrées par l'utilisateur sans que celui-ci ne doive intervenir en cliquant sur un bouton, je placerais le code dans l'évènement SelectionChange.
Cette macro doit donc débuter par la vérification que les cellules à copier comportent les valeurs nécessaires pour ne s'exécuter que si c'est bien le cas.
defluc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2012, 18h26   #7
Invité de passage
 
Homme
Ressources humaines
Inscription : janvier 2012
Messages : 6
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Ressources humaines
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : janvier 2012
Messages : 6
Points : 0
Points : 0
Comme je l'ai dit plus haut, je débute en vba. Restons simple, si quelqu'un pouvais m'aider à écrire ce script, ce serais sympa. il sera toujours temps de le perfectionner plus tard.
BEUTCHE est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2012, 20h53   #8
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
Alors j'utiliserais l'évènement Worksheet_Change plutôt que Worksheet_SelectionChange. Ce qui donnerait le code suivant, après avoir écrit par exemple "date" en I1 de la feuille qui contiendra l'historique.
Pense aussi à modifier le nom de le cette feuille dans le code (ici "Feuil2").
Ce code doit être placé dans le code de la feuille sur laquelle les modifications sont effectuées

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
Option Explicit 'Bonne habitude à prendre, oblige à déclarer les variables
 
'Ce code se déclenche quand on change une valeur dans la feuille
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not (Intersect(Target, Me.Range("A1:H1")) Is Nothing) Then 'On vérifie si la modification est bien dans le plage A1:H1
        'On déclare et initialise la feuille de copie
        Dim ws As Worksheet
        Set ws = Worksheets("Feuil2") 'A MODIFIER EN FONCTION DE TON CLASSEUR
        'On cherche la dernière ligne remplie
 
        Dim lastRow As Integer
        Dim lastDate As Date
        lastRow = ws.Range("I65000").End(xlUp).Row '(Equivalent d'un Ctrl+Flèche haut dans la colonne I qui va contenir les dates
        If lastRow = 1 Then lastDate = 0 Else lastDate = ws.Cells(lastRow, "I").Value  'Cas avec aucune date de remplie ou non
 
        If Date <> lastDate Then
            lastRow = lastRow + 1 'on passe à la ligne suivante
            ws.Cells(lastRow, "I").Value = Date
        End If
 
        'Recopie des valeurs
        Dim v As Variant
        v = Me.Range("A1:H1").Value
        ws.Range(ws.Cells(lastRow, "A"), ws.Cells(lastRow, "H")).Value = v
    End If
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 11/01/2012, 11h41   #9
Invité de passage
 
Homme
Ressources humaines
Inscription : janvier 2012
Messages : 6
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Ressources humaines
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : janvier 2012
Messages : 6
Points : 0
Points : 0
Merci la macro fonctionne, sauf qu'il faut rentrer manuellement les valeurs dans les cellules a1:h1. Ces cellules contiennent des fonctions. Comment modifier le script pour qu'il fonctionne lorsque les valeurs de ces cellules changent ?
BEUTCHE est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2012, 11h49   #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
Il faut mettre le worksheet_change sur les cellules dont dépendent les fonctions. Ou si tu ne les connais pas, sur toutes les cellules susceptibles de modifier le range.
__________________
« 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 11/01/2012, 21h00   #11
Invité de passage
 
Homme
Ressources humaines
Inscription : janvier 2012
Messages : 6
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Ressources humaines
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : janvier 2012
Messages : 6
Points : 0
Points : 0
Excellent, c'est exactement ce que je voulais. Merci beaucoup pour le coup de pouce et longue vie au forum.
BEUTCHE est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 04h36.


 
 
 
 
Partenaires

Hébergement Web