Tous les enregistrements du fichier ne sont pas édités

Résolu/Fermé
arsene53 Messages postés 48 Date d'inscription mardi 7 novembre 2017 Statut Membre Dernière intervention 23 novembre 2021 - 23 nov. 2021 à 10:59
 arsene - 7 déc. 2021 à 23:06
Bonjour à tous,

En Excel vba, je souhaiterais éditer les informations liés à un Matricule donné. La particularité est que pour un matricule qui dispose de plus d'1 enregistrement, j'utilise quelques données du 1er enregistrement de ce matricule pour traiter l'entête et les reste des données toujours de 1er enregistrement pour remplir les zones de "Détails".
Ainsi, je fais les remarques ci-après:
- l'entête est bien édité
- le "Détails" également
- le programme lit bien les autres enregistrements du même Matricule (par les tests effectués par MsgBox) mais n'édite plus rien
- le programme arrive à la fin.

Je vous remercie de bien vouloir m'aider à trouver une solution à ce problème.

A bientôt.

Arsène



Sub Testdesc04a()
Dim w1 As Worksheet
Dim w2 As Worksheet
'
Dim Ligne As Long
Dim L As Integer
'-------------------------
Dim Ent As Integer '
'-------------------------
Dim Ord_1 As String
Dim Nom_1 As String
Dim Pre_1 As String
Dim Datcot_1 As String
Dim Datper_1 As Variant
Dim Mont_1 As Variant
'
'Dim Ent As String
Ent = 0
N = 11
'----------------------
'
Workbooks.Open Filename:="C:\Divers\Fich_desc\Fic_des_04.xls"
'
Set w1 = Worksheets("List_01")
Set w2 = Worksheets("List_02")
'--------------------------
Ligne = w1.Cells(Rows.Count, 1).End(xlUp).Row

Application.ScreenUpdating = False
'
For L = 1 To Ligne
w1.Select
'
Ord_1 = w1.Cells(L, 1)
Nom_1 = w1.Cells(L, 2)
Pre_1 = w1.Cells(L, 3)
Datcot_1 = w1.Cells(L, 4)
Datper_1 = w1.Cells(L, 5)
Mont_1 = w1.Cells(L, 6)
'
If Ord_1 = 2 Then
Set w2 = Worksheets("List_02")
'
If Ent = 0 Then
Ent = 1
GoTo 101
'
GoTo 102
101:
N = 11
'
N = N + 1
w2.Range("D" & N).Value = w1.Cells(L, 1)
N = N + 1
w2.Range("D" & N).Value = w1.Cells(L, 2)
' N = N + 1
w2.Range("E" & N).Value = w1.Cells(L, 3)
'
Sheets("List_02").Select
w2.Cells.Select
Application.CutCopyMode = False
w2.Cells.Copy
Worksheets(Worksheets.Count).Select
Cells.Select
ActiveSheet.Paste

N = 18
Ent = 1
' On Error Resume Next
102:
'
N = N + 1
w2.Range("C" & N).Value = w1.Cells(L, 4)
w2.Range("D" & N).Value = w1.Cells(L, 5)
w2.Range("E" & N).Value = w1.Cells(L, 6)
'
Sheets("List_02").Select
w2.Cells.Select
Application.CutCopyMode = False
w2.Cells.Copy
Worksheets(Worksheets.Count).Select
Cells.Select
ActiveSheet.Paste
'
End If
End If
'End If
11:
Next L
Application.ScreenUpdating = True
End Sub
A voir également:

5 réponses

f894009 Messages postés 17206 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 22 novembre 2024 1 710
Modifié le 23 nov. 2021 à 17:51
Bonjour,

Vous pouvez mettre les deux fichiers a dispo car il semble que le code n'est pas dans le fichier ou vous recherchez les infos

Vous faites souvent de la programmation en VBA?

Pour transmettre un fichier,
Veillez a ce qu'il n'y ait PAS DE DONNEES CONFIDENTIELLES
il faut passer par un site de pièce jointe tel que cjoint.com

Allez sur ce site : https://www.cjoint.com/
Clic sur parcourir,
Cherche ton fichier,
clic sur ouvrir,
Clic sur "Créer le lien cjoint",
Copier le lien,
Revenir ici le coller dans une réponse...

Suite:

Cette partie de code est une part de votre probleme:

If Ent = 0 Then
Ent = 1
GoTo 101
GoTo 102

Premier tour Ent passe a 1 si Ord_1 = 2 mais ne repasse jamais a 0.
Si Ent passe a 1, vous ne sautez jamais a 102 puisque vous passez toujours par 101 et 102 ensuite
0
arsene53 Messages postés 48 Date d'inscription mardi 7 novembre 2017 Statut Membre Dernière intervention 23 novembre 2021
23 nov. 2021 à 20:47
Bonjour,

Je viens

Informaticien ayant travaillé sur Cobol, Excel et d’autres langages pendant au moins 2 décennies, je suis un débutant en Programmation VBA. Ainsi, je ne suis pas passé par le Code en tant que tel, mais j’ai écrit simplement le texte que j’ai soumis à exécution.

En fait, j’ai utilisé 1 seul fichier nommé « Fic_des_04.xls » ayant 2 feuilles appelées :
« List_1 » où se trouvent les données en Entrée et
« List_2 » qui constitue la Sortie à savoir les résultats.


Le lien a été crée : https://www.cjoint.com/c/KKxtSfuqEZP


arsène
0
f894009 Messages postés 17206 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 22 novembre 2024 1 710
Modifié le 24 nov. 2021 à 07:36
Bonjour,

En fait, j’ai utilisé 1 seul fichier nommé
Le code est donc dans un autre classeur puisque vous ouvrez le fichier Fic_des_04.xls
a cette ligne:
Workbooks.Open Filename:="C:\Divers\Fich_desc\Fic_des_04.xls"

Curieux!
Je regarde la chose

Vous lancez le code comment?

Vous pouvez expliquer ce que vous voulez exactement car votre variable
Ord_1 = 2
, pige pas trop vu que dans List_01 colonne A cela va de 1 a 6 pour le moment

Suite:

Vous voulez une programmation simple, un peu evoluee ou ce que j'appelle normale pour moi
0
yg_be Messages postés 23361 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 29 novembre 2024 Ambassadeur 1 556
Modifié le 24 nov. 2021 à 12:00
bonjour,
Connais-tu les possibilités de déboguer du VBA (exécution pas à pas, points d'arret, examen du contenu des variables)?
Par ailleurs, l'instruction
debug.print
permet d'afficher des informations pour comprendre le comportement du code.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Bonjour à tous,
Désolé pour le temps mis pour vous répondre.
J'ai revu toutes les instructions, ensuite, j'ai utilisé les possibilités que vous m'avez proposées.
Heureusement, en exécutant quelques éléments du Débogage tels que le pas à pas principal et le pas à pas détaillé, je suis arrivé à corriger progressivement les anomalies et à aboutir aux résultats escomptés.
Je vous remercie pour l'aide que vous m'avez apportée.
A toute l'équipe, encore une fois grand MERCI.
A bientôt.

arsène
0