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 08/01/2012, 09h45   #1
Invité de passage
 
Homme
Étudiant
Inscription : décembre 2011
Messages : 17
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Indre et Loire (Centre)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : décembre 2011
Messages : 17
Points : 4
Points : 4
Par défaut Problème codage archivage

Bonjour à tous,

J'ai fait un userform pour archiver des vendeurs. J'ai juste un petit soucis : je saisis mes données pour un vendeur et elles se mettent dans la première ligne. Mais quand je veux rajouter un nouveau vendeur, les données de ce nouveau vendeur se mettent à la place des anciennes données, c'est-à-dire dans la première ligne du tableau.
Je pense que j'ai oublié un petit truc dans mon codage, donc je vous le mets en ligne :

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
 
Private Sub Ajoutvendeur_Activate()
DerNom = Range("A5").End(xlDown).Address
Nom.RowSource = "A5:" & DerNom
Nom.ListIndex = 0
 
DerPrénom = Range("B5").End(xlDown).Address
Prénom.RowSource = "B5:" & DerPrénom
Prénom.ListIndex = 0
 
DerRégion = Range("C5").End(xlDown).Address
Région.RowSource = "C5:" & DerRégion
Région.ListIndex = 0
 
DerDatedenaissance = Range("D5").End(xlDown).Address
Datedenaissance.RowSource = "D5:" & DerDatedenaissance
Datedenaissance.ListIndex = 0
 
DerDatedembauche = Range("E5").End(xlDown).Address
Datedembauche.RowSource = "E5:" & DerDatedembauche
Datedembauche.ListIndex = 0
 
DerTéléphone = Range("F5").End(xlDown).Address
Téléphone.RowSource = "F5:" & DerTéléphone
Téléphone.ListIndex = 0
 
DerAdresse = Range("G5").End(xlDown).Address
Adresse.RowSource = "G5:" & DerAdresse
Adresse.ListIndex = 0
 
DerCodepostal = Range("H5").End(xlDown).Address
Codepostal.RowSource = "H5:" & DerCodepostal
Codepostal.ListIndex = 0
 
DerVille = Range("I5").End(xlDown).Address
Ville.RowSource = "I5:" & DerVille
Ville.ListIndex = 0
End Sub

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
46
47
48
49
50
Private Sub OK_Click()
If Nom = "" Or Prénom = "" Or Région = "" Or Datedenaissance = "" Or Datedembauche = "" Or Téléphone = "" Or Adresse = "" Or Codepostal = "" Or Ville = "" Then
MsgBox "VEUILLEZ SAISIR TOUTES LES INFORMATIONS"
Else
Sheets("Journal").Select
If Range("a2").Value = "" Then
Décalage = 0
Range("a2").Select
Else
 
Décalage = 1
Position = Range("A1").End(xlDown).Address
Range(Position).Select
Range("A1").End(xlDown).Select
End If
 
ActiveCell.Offset(Décalage, 0).Range("a1").Select
ActiveCell.Value = Nom
ActiveCell.Offset(0, 1).Range("a1").Select
ActiveCell.Value = Prénom
ActiveCell.Offset(0, 1).Range("a1").Select
ActiveCell.Value = Région
ActiveCell.Offset(0, 1).Range("a1").Select
ActiveCell.Value = Datedenaissance
ActiveCell.Offset(0, 1).Range("a1").Select
ActiveCell.Value = Datedembauche
ActiveCell.Offset(0, 1).Range("a1").Select
ActiveCell.Value = Téléphone
ActiveCell.Offset(0, 1).Range("a1").Select
ActiveCell.Value = Adresse
ActiveCell.Offset(0, 1).Range("a1").Select
ActiveCell.Value = Codepostal
ActiveCell.Offset(0, 1).Range("a1").Select
ActiveCell.Value = Ville
 
Nom.Value = ""
Prénom.Value = ""
Région.Value = ""
Datedenaissance.Value = ""
Datedembauche.Value = ""
Téléphone.Value = ""
Adresse.Value = ""
Codepostal.Value = ""
Ville.Value = ""
 
End If
 
Fichevendeur.Hide
 
End Sub
Désolé pour la longueur du message et bon Dimanche à tous

Valoche37
Valoche37 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2012, 10h29   #2
Expert Confirmé Sénior
 
Avatar de Qwazerty
 
Homme Stéphane
La très haute tension :D
Inscription : avril 2002
Messages : 2 446
Détails du profil
Informations personnelles :
Nom : Homme Stéphane
Âge : 32
Localisation : France

Informations professionnelles :
Activité : La très haute tension :D
Secteur : Service public

Informations forums :
Inscription : avril 2002
Messages : 2 446
Points : 4 620
Points : 4 620
Envoyer un message via MSN à Qwazerty
Salut

En espérant ne rien avoir manqué
Voila quelques remarques, corrections et simplifications

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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
Option Explicit
 
Sub test()
 
'Précise le classeur et la feuille sur lesquels tu travailles
With ThisWorkbook.Sheets("Feuil 1") 'a adapter
    'Il est plutot de coutume de chercher la derniere ligne de bas en haut (plus avantageux)
    Nom.RowSource = "'" & .Name & "'!" & .Range("A5", .Cells(.Rows.Count, "A").End(xlUp)).Address(False, False)
    'Il vaut mieux tester le nombre d'entrée avant d'en choisir une, sinon ça va planté si la liste est vide
    If Nom.ListCount > 0 Then Nom.ListIndex = 0
End With
End Sub
 
 
'Utilise les indentation pour organiser un peu mieux ton code.
'L'indentation c'est le fait de mettre une tabulation quand tu rentre dans une boucle ou dans une structure with, if, else, else if...
 
Private Sub OK_Click()
'Il faut déclarer tes variables
'Quelques règles qui aident au niveau des noms de variable et de composants que tu places sur un UserForm:
    'toujours au moins une majuscule dans le nom de tes variables, tu les repères plus vite dans ton code si tu fait une erreur de frappe (la majuscule ne se rajoute pas)
    'Pas d'accentuation
 
If Nom = "" Or prénom = "" Or Région = "" Or Datedenaissance = "" Or Datedembauche = "" Or Téléphone = "" Or Adresse = "" Or Codepostal = "" Or Ville = "" Then
    MsgBox "VEUILLEZ SAISIR TOUTES LES INFORMATIONS"
Else
    'Select ne s'utilise que si tu veux vraiment mettre une feuille particulière sous le nez de l'utilisateur
    'Sinon il suffit de pointer la feuille
    With ThisWorkbook.Sheets("Journal") '.Select
        'Dans la suite du code lorsque tu placera un . sans rien à gauche, vba rajouter ThisWorkbook.Sheets("Journal")
        'If .Range("a2").Value = "" Then
        '    Décalage = 0
        '    'Idem, pas besoin de selectionner une cellule pour travailler dessus
        '    'Range("a2").Select
        'Else
        '
        '    Décalage = 1
        '    Position = Range("A1").End(xlDown).Address
        '    Range(Position).Select
        '    Range("A1").End(xlDown).Select
        'End If
 
        'Voila pourquoi on commence toujours de faire la recherche de la dernière ligne vide par le bas du tableau
        'On remonte à la derniere ligne non vide (même si celle-si représente l'entête), puis on se décale d'une ligne vers le bas (offset(1)
        'Tout le code précédent est remplacé par
        With .Cells(.Rows.Count, "A").End(xlUp).Offset(1)
            .Value = Nom
            .Offset(0, 1).Value = Prenom
            .Offset(0, 2).Value = Region
            '...
        End With
 
        'ActiveCell.Offset(Décalage, 0).Range("a1").Select 'ça ne correspond pas à grand chose
        'ActiveCell.Value = Nom
        'ActiveCell.Offset(0, 1).Range("a1").Select
        'ActiveCell.Value = prénom
        'ActiveCell.Offset(0, 1).Range("a1").Select
        'ActiveCell.Value = Région
        'ActiveCell.Offset(0, 1).Range("a1").Select
        'ActiveCell.Value = Datedenaissance
        'ActiveCell.Offset(0, 1).Range("a1").Select
        'ActiveCell.Value = Datedembauche
        'ActiveCell.Offset(0, 1).Range("a1").Select
        'ActiveCell.Value = Téléphone
        'ActiveCell.Offset(0, 1).Range("a1").Select
        'ActiveCell.Value = Adresse
        'ActiveCell.Offset(0, 1).Range("a1").Select
        'ActiveCell.Value = Codepostal
        'ActiveCell.Offset(0, 1).Range("a1").Select
        'ActiveCell.Value = Ville
 
        Nom.Value = ""
        prénom.Value = ""
        Région.Value = ""
        Datedenaissance.Value = ""
        Datedembauche.Value = ""
        Téléphone.Value = ""
        Adresse.Value = ""
        Codepostal.Value = ""
        Ville.Value = ""
 
End If
 
Fichevendeur.Hide
 
End Sub
Je te laisse modifier tous les pavés sur le même principe.

++
Qwaz

Salut

Essai cette simplification au niveau du 1er code

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Sub test()
Dim AddressNames As String
 
'Précise le classeur et la feuille sur lesquels tu travailles
With ThisWorkbook.Sheets("Feuil 1") 'a adapter
    'On cherche l'adresse liste des noms
    AddressNames = .Range("A5", .Cells(.Rows.Count, "A").End(xlUp)).Address(False, False)
    Nom.RowSource = "'" & .Name & "'!" & AddressNames
    'Il vaut mieux tester le nombre d'entrée avant d'en choisir une, sinon ça va planté si la liste est vide
    If Nom.ListCount > 0 Then Nom.ListIndex = 0
 
    'Plutôt que de refaire la recherche de la dernier ligne à chaque fois, on décale toute la zone pointé d'une colonne
    Prenom.RowSource = "'" & .Name & "'!" & .Range(AddressNames).Offset(0, 1).Address(False, False)
    If Prenom.ListCount > 0 Then Prenom.ListIndex = 0
 
    Region.RowSource = "'" & .Name & "'!" & .Range(AddressNames).Offset(0, 2).Address(False, False)
    '... je te laisse poursuivre.
End With
End Sub
++
Qwaz
__________________

MagicQwaz := Harry Potter la baguette en moins
Le monde dans lequel on vit
HammerFest
Ma page perso DVP - Dernier Tutoriel : VBA & Internet Explorer
Qwazerty est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2012, 10h36   #3
Expert Confirmé Sénior
 
Avatar de jfontaine
 
Homme Jérôme FONTAINE
Contrôleur de Gestion
Inscription : juin 2006
Messages : 3 920
Détails du profil
Informations personnelles :
Nom : Homme Jérôme FONTAINE
Âge : 38
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Contrôleur de Gestion

Informations forums :
Inscription : juin 2006
Messages : 3 920
Points : 7 240
Points : 7 240
Bonjour,


Beaucoup de chose à optimiser

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
Private Sub OK_Click()
 
Dim i As Long
Dim c As Integer
Dim sh As Worksheet
 
If Nom = "" Or Prénom = "" Or Région = "" Or Datedenaissance = "" Or Datedembauche = "" Or Téléphone = "" Or Adresse = "" Or Codepostal = "" Or Ville = "" Then
    MsgBox "VEUILLEZ SAISIR TOUTES LES INFORMATIONS"
    Exit sub
Else
    Set sh = Sheets("Journal")
End If
 
i = sh.Range("A" & Rows.Count).End(xlUp).Row + 1
 
sh.Range("A" & i).Value = Nom
sh.Range("B" & i).Value = Prénom
sh.Range("C" & i).Value = Région
sh.Range("D" & i).Value = Datedenaissance
sh.Range("E" & i).Value = Datedembauche
sh.Range("F" & i).Value = Téléphone
sh.Range("G" & i).Value = Adresse
sh.Range("H" & i).Value = Codepostal
sh.Range("I" & i).Value = Ville
 
Nom.Value = ""
Prénom.Value = ""
Région.Value = ""
Datedenaissance.Value = ""
Datedembauche.Value = ""
Téléphone.Value = ""
Adresse.Value = ""
Codepostal.Value = ""
Ville.Value = ""
 
End Sub

NB : a eviter les noms de variables avec des accents

EDIT : Qwazerty
__________________
Jérôme

Citation:
"Ils ne savaient pas que c'était impossible, alors ils l'ont fait" - Marc Twain
Si la réponse répond à votre besoin, votre vote nous encouragera.
Dans le cas ou la réponse mérite, à vos yeux, un , nous faire partager la raison de ce vote, pourrait nous permettre de nous améliorer.
jfontaine est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2012, 14h22   #4
Invité de passage
 
Homme
Étudiant
Inscription : décembre 2011
Messages : 17
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Indre et Loire (Centre)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : décembre 2011
Messages : 17
Points : 4
Points : 4
Merci beaucoup pour vos réponses, ça fonctionne très bien grâce à vous

Bonne fin de week end
Valoche37 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 08h54.


 
 
 
 
Partenaires

Hébergement Web