Problème avec page qui défile sur VBA

Fariri

XLDnaute Junior
Bonjour,

J'ai créé un Userform sur lequel je rentre des données dans des tableaux (sur plusieurs feuilles) via une ComboBox.
il se trouve que j'ai le même soucis sur 2 procédures : lorsqu'elles s'exécutent, je vois les feuilles défiler.

Je n'ai pas trouvé la solution pour que les procédures s'exécutent en toutes discrétion.
Quelqu'un aurait-il une solution svp

voici mes 2 codes :
(Je mets beaucoup de commentaire car je suis débutante en VBA)

'TRIE PAR ORDRE ALPHABETIQUE LES COLONNES NOMS (soit en colonne A, soit en colonne B)
'Je trie en B2 dans l'onglet AGENT
Sheets("Agents").Select
Range("B2:H10").Sort _
Key1:=Range("B1"), Header:=xlYes
'Je trie en A3 dans l'onglet MATERIEL
Sheets("Matériel").Select
Range("A3:H10").Sort _
Key1:=Range("A1"), Header:=xlYes
'Je trie en A2 dans l'onglet VEHICULE
Sheets("Véhicule").Select
Range("A2:H10").Sort _
Key1:=Range("A1"), Header:=xlYes
'Je trie en A3 dans l'onglet DOTATION
Sheets("Dotation").Select
Range("A3:H10").Sort _
Key1:=Range("A1"), Header:=xlYes
'Je trie en A3 dans l'onglet HABILITATON
Sheets("Habilitation").Select
Range("A3:H10").Sort _
Key1:=Range("A1"), Header:=xlYes
'Je trie en A3 dans l'onglet FORMATION
Sheets("Formation").Select
Range("A3:H10").Sort _
Key1:=Range("A1"), Header:=xlYes





et le second

'Apparition de la message Box
V_Boite = MsgBox("voulez-vous ajouter une nouvelle fiche agent ?", vbYesNo + vbQuestion, "question")

'Si la combobox 2 est vide la messageBox apparait
If ComboBox2.Value = "" Then
MsgBox ("veuillez remplir le champ : NOM")

'Sinon si clique sur "oui"
ElseIf V_Boite = vbYes Then

'Je rentre les données dans l'onglet AGENT
Sheets("Agents").Activate 'Activer l'onglet "Agents"
Range("A1").Select 'Se placer sur la cellule A1
Selection.End(xlDown).Select 'A partir de la cellule A1, descendre sur la dernière ligne qui contient du texte
Selection.Offset(1, 0).Select 'Se décaler d'une ligne vers le bas en restant sur la même colonne : (1,0)=(ligne,colonne)
ActiveCell = ComboBox1.Value 'Copier la valeur de la ComboBox Civilité et l'insérer dans le tableau
ActiveCell.Offset(0, 1).Value = ComboBox2 'Copier la valeur de la ComboBox Nom et l'insérer dans le tableau en décalant d'1 colonne
ActiveCell.Offset(0, 2).Value = ComboBox3 'Copier la valeur de la ComboBox Prenom et l'insérer dans le tableau en décalant de 2 colonnes
ActiveCell.Offset(0, 3).Value = ComboBox4 'Copier la valeur de la ComboBox NNI et l'insérer dans le tableau en décalant de 3 colonnes
ActiveCell.Offset(0, 4).Value = ComboBox5 'Copier la valeur de la ComboBox Statut et l'insérer dans le tableau en décalant de 4 colonnes
ActiveCell.Offset(0, 5).Value = Format(ComboBox6.Value, "0#"" ""##"" ""##"" ""##"" ""##") 'Copier la valeur de la ComboBox TélPortable et l'insérer dans le tableau en décalant de 5 colonnes en le mettant au format téléphone
ActiveCell.Offset(0, 6).Value = Format(ComboBox7.Value, "00"" ""00"" ""00"" ""00"" ""00") 'Copier la valeur de la ComboBox TélBureau et l'insérer dans le tableau en décalant de 6 colonnes en le mettant au format téléphone

'Je rentre les données dans l'onglet MATERIEL
Sheets("Matériel").Activate 'Activer l'onglet "Matériel"
Range("A2").Select 'Se placer sur la cellule A2
Selection.End(xlDown).Select 'A partir de la cellule A2, descendre sur la dernière ligne qui contient du texte
Selection.Offset(1, 0).Select 'Se décaler d'une ligne vers le bas en restant sur la même colonne : (1,0)=(ligne,colonne)
ActiveCell.Offset(0, 0).Value = ComboBox2 'Copier la valeur de la ComboBox Nom et l'insérer dans le tableau en restant sur la même colonne
ActiveCell.Offset(0, 1).Value = ComboBox3 'Copier la valeur de la ComboBox Prénom et l'insérer dans le tableau en décalant d'une colonne

'Je rentre les données dans l'onglet VEHICULE
Sheets("Véhicule").Activate 'Activer l'onglet "Matériel"
Range("A1").Select 'Se placer sur la cellule A1
Selection.End(xlDown).Select 'A partir de la cellule A1, descendre sur la dernière ligne qui contient du texte
Selection.Offset(1, 0).Select 'Se décaler d'une ligne vers le bas en restant sur la même colonne : (1,0)=(ligne,colonne)
ActiveCell.Offset(0, 0).Value = ComboBox2 'Copier la valeur de la ComboBox Nom et l'insérer dans le tableau en restant sur la même colonne
ActiveCell.Offset(0, 1).Value = ComboBox3 'Copier la valeur de la ComboBox Prénom et l'insérer dans le tableau en décalant d'une colonne

'Je rentre les données dans l'onglet DOTATION
Sheets("Dotation").Activate 'Activer l'onglet "Matériel"
Range("A2").Select 'Se placer sur la cellule A2
Selection.End(xlDown).Select 'A partir de la cellule A1, descendre sur la dernière ligne qui contient du texte
Selection.Offset(1, 0).Select 'Se décaler d'une ligne vers le bas en restant sur la même colonne : (1,0)=(ligne,colonne)
ActiveCell.Offset(0, 0).Value = ComboBox2 'Copier la valeur de la ComboBox Nom et l'insérer dans le tableau en restant sur la même colonne
ActiveCell.Offset(0, 1).Value = ComboBox3 'Copier la valeur de la ComboBox Prénom et l'insérer dans le tableau en décalant d'une colonne

'Je rentre les données dans l'onglet HABILITATION
Sheets("Habilitation").Activate 'Activer l'onglet "Matériel"
Range("A2").Select 'Se placer sur la cellule A2
Selection.End(xlDown).Select 'A partir de la cellule A2, descendre sur la dernière ligne qui contient du texte
Selection.Offset(1, 0).Select 'Se décaler d'une ligne vers le bas en restant sur la même colonne : (1,0)=(ligne,colonne)
ActiveCell.Offset(0, 0).Value = ComboBox2 'Copier la valeur de la ComboBox Nom et l'insérer dans le tableau en restant sur la même colonne
ActiveCell.Offset(0, 1).Value = ComboBox3 'Copier la valeur de la ComboBox Prénom et l'insérer dans le tableau en décalant d'une colonne

'Je rentre les données dans l'onglet FORMATION
Sheets("Formation").Activate 'Activer l'onglet "Matériel"
Range("A2").Select 'Se placer sur la cellule A2
Selection.End(xlDown).Select 'A partir de la cellule A1, descendre sur la dernière ligne qui contient du texte
Selection.Offset(1, 0).Select 'Se décaler d'une ligne vers le bas en restant sur la même colonne : (1,0)=(ligne,colonne)
ActiveCell.Offset(0, 0).Value = ComboBox2 'Copier la valeur de la ComboBox Nom et l'insérer dans le tableau en restant sur la même colonne
ActiveCell.Offset(0, 1).Value = ComboBox3 'Copier la valeur de la ComboBox Prénom et l'insérer dans le tableau en décalant d'une colonne


'Mise à jour de la TextBox contenant l'effectif des agents en l'incrémentant
TextEffectif = TextEffectif + 1


'je raffraichis la ComboBox 8 avec la liste Nom de la feuille Agents
With Sheets("Agents") 'Agents est le nom de sa feuille
V_I = .Range("B" & Rows.Count).End(xlUp).Row
For V_K = 2 To V_I
ComboBox8.AddItem .Range("B" & V_K).Value ' B est la colonne
Next V_K
End With

'Je vide le champ de la ComboBox intitulée RECHERCHE
ComboBox8 = ""

'Je retourne dans l'onglet "AGENTS"
Sheets("Agents").Activate

'Je fais apparaître une fenêtre avec un message et un bouton OK
MsgBox "Un nouvel agent a été rajouté à la base de données", vbOKOnly + vbInformation


'Sinon si clique sur "non"
Else
If Me.ComboBox8.ListIndex = -1 Then Exit Sub 'On sort si la réponse est non
MsgBox ("La base de données n'a pas été modifié")




merci pour votre aide
(je ne peux pas joindre le fichier car il contient des infos perso)
 

Efgé

XLDnaute Barbatruc
Bonjour Fariri
Je n'irais pas plus loin...
Sans fichier exemple il est impossible de traiter l'optimisation de ton code (qui en aurais bien besoin... )
Il est inutile d'utiliser les Select et autre Activate.
Juste un exemple:
Sheets("Agents").Activate 'Activer l'onglet "Agents"
Range("A1").Select 'Se placer sur la cellule A1
Selection.End(xlDown).Select 'A partir de la cellule A1, descendre sur la dernière ligne qui contient du texte
Selection.Offset(1, 0).Select 'Se décaler d'une ligne vers le bas en restant sur la même colonne : (1,0)=(ligne,colonne)
ActiveCell = ComboBox1.Value 'Copier la valeur de la ComboBox Civilité et l'insérer dans le tableau
Devrait devenir
VB:
Sheets("Agents").Range("A1").End(xlDown).Offset(1, 0).Value = ComboBox1.Value

Il faut commencer par nettoyer le code enregistré...
Cordialement
 

Fariri

XLDnaute Junior
Bonjour Fariri
Je n'irais pas plus loin...
Sans fichier exemple il est impossible de traiter l'optimisation de ton code (qui en aurais bien besoin... )
Il est inutile d'utiliser les Select et autre Activate.
Juste un exemple:

Devrait devenir
VB:
Sheets("Agents").Range("A1").End(xlDown).Offset(1, 0).Value = ComboBox1.Value

Il faut commencer par nettoyer le code enregistré...
Cordialement


Merci pour votre réponse,
J'ai essayé d'adapter votre méthode , mais ça plante
je vous ai envoyé un tit mp
 

Fariri

XLDnaute Junior
Bonjour Fariri
Je n'irais pas plus loin...
Sans fichier exemple il est impossible de traiter l'optimisation de ton code (qui en aurais bien besoin... )
Il est inutile d'utiliser les Select et autre Activate.
Juste un exemple:

Devrait devenir
VB:
Sheets("Agents").Range("A1").End(xlDown).Offset(1, 0).Value = ComboBox1.Value

Il faut commencer par nettoyer le code enregistré...
Cordialement


A chaque fois qu'un champ est vide sur la ligne mes données ne sont plus rempli comme il faut :(
Auriez vous une autre formule qui prend en compte les lignes vides d'un tableau, c'est à dire qui me rentre mes données par ligne ?

merci
 

Efgé

XLDnaute Barbatruc
Bonjour Fariri
Je te propose de sortir le Joker "Spécial ça saute de partout mais personne ne le voit"
Tu mets ces deux lignes dans toutes tes macros:
VB:
Sub Moncode()
Application.ScreenUpdating = False

'mon code plein de lignes

Application.ScreenUpdating = True
End Sub

Cordialement
 

Statistiques des forums

Discussions
313 313
Messages
2 097 043
Membres
106 816
dernier inscrit
Garry972