IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Problème alimentation données sur nouvelle ligne


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Femme Profil pro
    Responsable administratif et comptable
    Inscrit en
    Juillet 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 7
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Responsable administratif et comptable
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2018
    Messages : 4
    Par défaut Problème alimentation données sur nouvelle ligne
    Bonjour,

    J'ai créé un code permettant d'alimenter un tableau via un formulaire, mais de temps en temps au lieu de me mettre les données sur une nouvelle ligne ça m'écrase mes libellés de colonnes.
    Je ne comprends pas d'où provient l'erreur surtout que ce n'est pas systématique.

    Le fichier étant trop volumineux je n'arrive pas à le déposer sur le forum donc voici le code que j'ai raccourci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Private Sub Valider_Click()
        Dim i As Long
        Dim j As Long
        Dim y As Long
        Dim rng As Range
     
        ' Contrôle des données saisies
        If Formulaire_saisie_bons.Mvt_bon = "" Or Formulaire_saisie_bons.Transporteur = "" _
        Or Formulaire_saisie_bons.N°_lot = "" Or Formulaire_saisie_bons.N°_bon = "" _
        Or Formulaire_saisie_bons.Catégorie = "" Or Formulaire_saisie_bons.Poids_brut = "" _
        Or Formulaire_saisie_bons.Céréale1 = "" Or Formulaire_saisie_bons.Impureté = "" _
        Or Formulaire_saisie_bons.Xcéréale1 = "" Or Formulaire_saisie_bons.Zone1 = "" Then
            MsgBox "Veuillez renseigner tous les champs", _
                vbExclamation, strAppName
            Formulaire_saisie_bons.Date_bon.SetFocus
            Exit Sub
        End If
     
        If Not (Oui Or Non) Then
            MsgBox "METEIL : oui ou non", vbExclamation, strAppName
            Formulaire_saisie_bons.Non.SetFocus
            Exit Sub
        End If
     
        With ThisWorkbook.Worksheets("SUIVI DES ENTREES & SORTIES")
        .Activate
            ' Ajout du bon sur la 1ère ligne vide
            If bNouveau Then
                i = .Range("A" & Rows.Count).End(xlUp).Row + 1
            Else
     
            ' Modification du bon sélectionné
            i = ListeBons.ListIndex + 2
            End If
            If Oui Then
                .Cells(i, 4) = "OUI"
            Else
                .Cells(i, 4) = ""
            End If
     
            If Oui = True Then
     
                If Formulaire_saisie_bons.Poids_normes2.Value = "" Then
                MsgBox "Veuillez cliquer sur le bouton 'Poids aux normes 2' avant de valider", vbExclamation, strAppName
                Formulaire_saisie_bons.Bouton_PN2.SetFocus
                Exit Sub
                End If
            .Cells(i, 1) = Formulaire_saisie_bons.Date_bon.Value
            Formulaire_saisie_bons.Date_bon.Value = Format(Formulaire_saisie_bons.Date_bon.Value, "dd/mm/yyyy")
            .Cells(i, 2) = Formulaire_saisie_bons.Mvt_bon
            .....
     
            Else:
            .Cells(i, 1) = Formulaire_saisie_bons.Date_bon.Value
            Formulaire_saisie_bons.Date_bon.Value = Format(Formulaire_saisie_bons.Date_bon.Value, "dd/mm/yyyy")
            .Cells(i, 2) = Formulaire_saisie_bons.Mvt_bon
            .....
     
            End If
     
     
            ' Tri par date
            Tri_Date
        End With
     
     
            'Réaffichage de la liste des bons
            Affiche_Bons
            Init_Bons
     
     
    End Sub

  2. #2
    Membre Expert Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Par défaut
    Bonjour Skjaldmo, bonjour le forum,

    Le code semble correct. Fait le tourner pas à pas ([Alt]+[F8]) et teste la valeur des variable bNouveau et i... Sans le fichier, difficile de t'en dire plus...

  3. #3
    Membre Expert Avatar de Transitoire
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Décembre 2017
    Messages
    733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Auditeur informatique

    Informations forums :
    Inscription : Décembre 2017
    Messages : 733
    Par défaut
    Bonjour,
    Ainsi que Thauteme, je n'ai rien remarqué de suspect en apparence dans votre code.
    Le chose a laquelle je pense :
    Puisque vous avez un tri des données, vous êtes vous assuré que vos libellés de colonne ne se trouvent pas prise dans le tri puis écrasés pour une raison que je ne n'ai pas le moyen de vérifier.
    Ayant vérifié la correction d'appel à la première ligne vide, je ne vois guère que cela ou possiblement aussi en cas d'une modification. mais j'imagine que vous sous seriez rendu compte que cela ne se passe qu'en modifications
    Cordialement

  4. #4
    Membre à l'essai
    Femme Profil pro
    Responsable administratif et comptable
    Inscrit en
    Juillet 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 7
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Responsable administratif et comptable
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2018
    Messages : 4
    Par défaut
    Bonjour Transitoire,

    Merci pour votre réponse en effet c'est peut-être mon tri qui pose problème car je le fais commencer sur la ligne 1, me conseillez-vous de le faire à partir de la ligne 2 ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub Tri_Date()
        Dim rng As Range
        'Tri des bons par date et n°
        Set rng = Worksheets("SUIVI DES ENTREES & SORTIES").Range("A1").CurrentRegion
        rng.Sort Key1:=Range("W1"), Order1:=xlAscending, _
                    Key2:=Range("A1"), Order2:=xlAscending, _
                    Key3:=Range("X1"), Order3:=xlAscending, _
                    Header:=xlYes
    End Sub
    Cordialement.

  5. #5
    Membre à l'essai
    Femme Profil pro
    Responsable administratif et comptable
    Inscrit en
    Juillet 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 7
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Responsable administratif et comptable
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2018
    Messages : 4
    Par défaut
    Bonjour,

    J'ai donc modifié mon tri en partant de la ligne et pour l'instant le problème ne sais pas représenté mais comme c'était aléatoire je ne vais crier victoire trop vite...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub Tri_Date()
        Dim rng As Range
        'Tri des bons par date et n°
        Set rng = Worksheets("SUIVI DES ENTREES & SORTIES").Range("A1").CurrentRegion
        rng.Sort Key1:=Range("W2"), Order1:=xlAscending, _
                    Key2:=Range("A2"), Order2:=xlAscending, _
                    Key3:=Range("X2"), Order3:=xlAscending, _
                    Header:=xlYes
    End Sub
    J'ai un autre problème que je ne m'explique pas :
    Dans mon formulaire on peut saisir un bon contenant une seule céréale ou 2 céréales (= méteil), comme il s'agit d'une activité bio on doit pouvoir assurer la traçabilité des céréales et comme mon tableau de suivi contient sur la même ligne la céréale 1 et la céréale 2 je ne peux pas faire de TCD directement.
    J'ai donc créé 2 tableaux indépendants qui ensuite via une requête se regroupent en un seul tableau et à partir de là j'obtiens mes TCD.
    Cela fonctionne plutôt bien mais il y a une anomalie dans mon second tableau (Céréale 2) car lorsque dans mon formulaire je viens modifier ou revalider un bon ça me crée une nouvelle ligne alors que ça ne me le fait pas dans le 1er tableau et je suis parti du même code.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
         'Tableau de synthèse 1 et 2
     
            ' Ajout du bon sur la 1ère ligne vide
            If bNouveau Then
            i = ThisWorkbook.Worksheets("LISTE BONS 1").Range("A" & Rows.Count).End(xlUp).Row + 1
            j = ThisWorkbook.Worksheets("LISTE BONS 2").Range("A" & Rows.Count).End(xlUp).Row + 1
            Else
            ' Modification du bon sélectionné
            i = ListeBons.ListIndex + 2
            j = ListeBons.ListIndex + 2
            End If
     
            ThisWorkbook.Worksheets("LISTE BONS 1").Cells(i, 1) = "Céréale 1"
            ThisWorkbook.Worksheets("LISTE BONS 1").Cells(i, 2) = Formulaire_saisie_bons.Date_bon.Value
            Formulaire_saisie_bons.Date_bon.Value = Format(Formulaire_saisie_bons.Date_bon.Value, "dd/mm/yyyy")
            ThisWorkbook.Worksheets("LISTE BONS 1").Cells(i, 3) = Formulaire_saisie_bons.Mvt_bon
            ThisWorkbook.Worksheets("LISTE BONS 1").Cells(i, 4) = Formulaire_saisie_bons.Nom_tiers
            ThisWorkbook.Worksheets("LISTE BONS 1").Cells(i, 5) = Formulaire_saisie_bons.Céréale1
            ThisWorkbook.Worksheets("LISTE BONS 1").Cells(i, 6) = Formulaire_saisie_bons.Zone1
            ThisWorkbook.Worksheets("LISTE BONS 1").Cells(i, 7) = Rows(ThisWorkbook.Worksheets("SUIVI DES ENTREES & SORTIES").Range("X:X").Find(Me.N°_bon.Value, lookat:=xlWhole).Row).Cells(y + 1, 9)
            ThisWorkbook.Worksheets("LISTE BONS 1").Cells(i, 8) = Rows(ThisWorkbook.Worksheets("SUIVI DES ENTREES & SORTIES").Range("X:X").Find(Me.N°_bon.Value, lookat:=xlWhole).Row).Cells(y + 1, 10)
            ThisWorkbook.Worksheets("LISTE BONS 1").Cells(i, 9) = CDbl(Formulaire_saisie_bons.Poids_normes1.Value)
            Formulaire_saisie_bons.Poids_normes1.Value = Format(Formulaire_saisie_bons.Poids_normes1, "#.000")
            ThisWorkbook.Worksheets("LISTE BONS 1").Cells(i, 10) = Rows(ThisWorkbook.Worksheets("SUIVI DES ENTREES & SORTIES").Range("X:X").Find(Me.N°_bon.Value, lookat:=xlWhole).Row).Cells(y + 1, 20)
            ThisWorkbook.Worksheets("LISTE BONS 1").Cells(i, 11) = Formulaire_saisie_bons.Transporteur
            ThisWorkbook.Worksheets("LISTE BONS 1").Cells(i, 12) = CDbl(Formulaire_saisie_bons.N°_lot.Value)
            ThisWorkbook.Worksheets("LISTE BONS 1").Cells(i, 13) = CDbl(Formulaire_saisie_bons.N°_bon.Value)
            ThisWorkbook.Worksheets("LISTE BONS 1").Cells(i, 14) = Formulaire_saisie_bons.Catégorie
     
            ThisWorkbook.Worksheets("LISTE BONS 2").Cells(j, 1) = "Céréale 2"
            ThisWorkbook.Worksheets("LISTE BONS 2").Cells(j, 2) = Formulaire_saisie_bons.Date_bon.Value
            Formulaire_saisie_bons.Date_bon.Value = Format(Formulaire_saisie_bons.Date_bon.Value, "dd/mm/yyyy")
            ThisWorkbook.Worksheets("LISTE BONS 2").Cells(j, 3) = Formulaire_saisie_bons.Mvt_bon
            ThisWorkbook.Worksheets("LISTE BONS 2").Cells(j, 4) = Formulaire_saisie_bons.Nom_tiers
            ThisWorkbook.Worksheets("LISTE BONS 2").Cells(j, 5) = Formulaire_saisie_bons.Céréale2
            ThisWorkbook.Worksheets("LISTE BONS 2").Cells(j, 6) = Formulaire_saisie_bons.Zone2
            ThisWorkbook.Worksheets("LISTE BONS 2").Cells(j, 7) = Rows(ThisWorkbook.Worksheets("SUIVI DES ENTREES & SORTIES").Range("X:X").Find(Me.N°_bon.Value, lookat:=xlWhole).Row).Cells(y + 1, 16)
            ThisWorkbook.Worksheets("LISTE BONS 2").Cells(j, 8) = Rows(ThisWorkbook.Worksheets("SUIVI DES ENTREES & SORTIES").Range("X:X").Find(Me.N°_bon.Value, lookat:=xlWhole).Row).Cells(y + 1, 17)
            If Formulaire_saisie_bons.Poids_normes2.Value <> "" Then
            ThisWorkbook.Worksheets("LISTE BONS 2").Cells(j, 9) = CDbl(Formulaire_saisie_bons.Poids_normes2.Value)
            End If
            Formulaire_saisie_bons.Poids_normes2.Value = Format(Formulaire_saisie_bons.Poids_normes2, "#.000")
            ThisWorkbook.Worksheets("LISTE BONS 2").Cells(j, 10) = Rows(ThisWorkbook.Worksheets("SUIVI DES ENTREES & SORTIES").Range("X:X").Find(Me.N°_bon.Value, lookat:=xlWhole).Row).Cells(y + 1, 20)
            ThisWorkbook.Worksheets("LISTE BONS 2").Cells(j, 11) = Formulaire_saisie_bons.Transporteur
            ThisWorkbook.Worksheets("LISTE BONS 2").Cells(j, 12) = CDbl(Formulaire_saisie_bons.N°_lot.Value)
            ThisWorkbook.Worksheets("LISTE BONS 2").Cells(j, 13) = CDbl(Formulaire_saisie_bons.N°_bon.Value)
            ThisWorkbook.Worksheets("LISTE BONS 2").Cells(j, 14) = Formulaire_saisie_bons.Catégorie
     
            ' Tri par date
            Tri_Date_Liste1
            Tri_Date_Liste2

    Au niveau des colonnes 7, 8 et 10 j'ai tenté d'utiliser les données du formulaire mais ça me donne des choses aberrantes donc je me sert du tableau de suivi de base, c'est étrange ça aussi.
    Si quelqu'un veut voir le fichier je peux l'envoyer par en privé puisqu'il est trop gros pour le forum.

    Merci d'avance pour votre aide.

Discussions similaires

  1. Problème Enregistrement données sur USB
    Par jakkihm dans le forum Windows XP
    Réponses: 3
    Dernier message: 30/08/2009, 13h32
  2. données sur plusieurs lignes
    Par DuDe92 dans le forum Requêtes et SQL.
    Réponses: 30
    Dernier message: 06/08/2008, 22h31
  3. entête de colonne du mode feuille de données sur 2 lignes
    Par aba_tarn dans le forum VBA Access
    Réponses: 2
    Dernier message: 04/07/2007, 12h04
  4. Réponses: 8
    Dernier message: 29/08/2006, 08h31
  5. Réponses: 4
    Dernier message: 02/02/2006, 18h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo