Variable objet ou variable de bloc non définie

Bonjour à toutes et à tous,

Feuille accueil : clic sur crédits budgétaires

Formulaire UF02CréditsBudgétaires : Catégorie : dans la liste déroulante, clic sur Budget primitif dépenses alimentaires; Nature article : dans la liste déroulante, clic sur dépenses alimentaires; Article : dans la liste déroulante, clic sur Yaourts matin; Prix unitaire : taper 3,00; Quantité : taper 12,00: clic sur Validation; Clic sur Oui; Message d'erreur : variable objet ou variable de bloc non définie : Débogage : Module MGénérerBudgets : procédure : Sub GénérerBudgetPrimitifDépensesAlimentaires() DerLig = Sheets("BD budgets primitifs").ListObjects("TabBDCréditsBudgétaires").DataBodyRange.Rows.Count : cette ligne est en jaune.

D'avance merci à toutes et à tous de me dire ce qui ne va pas aussi vite que possible car cela me bloque pour continuer. Dans la version 4, je n'ai pas ce problème.

Je viens de trouver quelque chose : si j'ai ce message, c'est parce que le tableau structuré TabBDCréditsBudgétaires de la feuille bd budgets primitifs est vide. J'ai rempli les deux premières colonnes manuellement : le message a disparu mais il y a des erreurs que j'ai rectifiées. J'ai créé, selon le détail donné à partir de feuille accueil, le crédit budgétaire pour Yaourts matin : à chaque message j'ai cliqué sur ok (ou oui) et aucun message d'erreur n'est apparu. Cependant, le yaourt matin n'apparaît pas dans le tableau structuré TabBDCréditsBudgétaires. Donc deux suggestions : 1) trouver la solution pour que Yaourts matin aille bien dans son tableau structuré; 2) Si ce la est possible, trouver une instruction qui permette que le message d'erreur n'apparaisse pas si le tableau structuré TabBDCréditsBudgétaires est vide.

Bonjour,

Attention dans la macro "Sub cmdValidation_Click()" les "Renumerotations" doivent être placées après les "Tris"

Bonjour Arturo83,

Donc, je vais remettre à jour mon code de cmdValidation_Click et transférer les renuméroter après les trier comme vous l'avez suggéré. Je vous tiens au courant du résultat. Le message a disparu mais toujours pas de transfert dans la feuille BD budgets primitifs, tabBDCréditsBudgétaires

Votre dernier fichier présente un problème, dans la feuille BD budgets primitifs, le tableau "TabBDbugetsPrimitifDepensesAlimentaires" a été supprimé, ce qui pourrait expliquer le dysfonctionnement, si le tableau n'est pas trouvé alors, sortie de la macro sans qu'elle puisse aller au bout de son déroulement.

J'ai rechargé le fichier : en effet, le tableau structuré n'est plus un tableau structuré, je ne sais pas ce qui s'est passé. De plus, le problème venait également de la procédure cmdValidation_Click : tabBDBudgetPrimitifDépensesNonAlimentaires au lieu de TabBDCréditsBudgétaires : j'ai rectifié et cela fonctionne.

Merci d'essayer de créer un crédit budgétaire pour vinaigre assaisonnement. Dites-moi ce qui arrive. Chez moi, j'ai un message d'erreur (l'indice n'appartient pas à la sélection) et l'erreur serait dans le module maffichageeffaçagemasquage, procédure purger tabbdbudgetprimitifdépensesnonalimentaires ! Erreur rectifiée : à un endroit, c'était dépenses alimentaires au lieu de dépenses non alimentaires.

Dans "Sub cmdValidation_Click", il faudrait faire comme ceci :(après le End with):

With sh05.ListObjects("TabBDCréditsBudgétaires").DataBodyRange
            .Item(I, 1) = cbCatégorie.Value
            .Item(I, 2) = tbCodeCatégorie.Value
            .Item(I, 3) = cbNatureArticle.Value
            .Item(I, 4) = tbCodeNatureArticle.Value
            .Item(I, 5) = cbArticle.Value
            .Item(I, 6) = tbCodeArticle.Value
            .Item(I, 7) = cbPériode.Value
            .Item(I, 8) = tbCodePériode.Value
            .Item(I, 9) = cbConditionnement.Value
            .Item(I, 10) = tbCodeConditionnement.Value
            .Item(I, 11) = tbPrixUnitaire.Value
            .Item(I, 12) = tbQuantité.Value
            .Item(I, 13) = tbTotalBudgetPrimitif.Value
            .Item(I, 14) = tbDateCréation.Value
            .Item(I, 15) = tbNuméroCréation.Value
        End With
        Select Case cbCatégorie.Value
            Case Is = "Budget primitif dépenses alimentaires"
                Call GénérerBudgetPrimitifDépensesAlimentaires
                Call TrierTabBDBudgetPrimitifDépensesAlimentaires
                Call RenuméroterBudgetPrimitifDépensesAlimentaires
            Case Is = "Budget primitif dépenses bancaires"
                Call GénérerBudgetPrimitifDépensesBancaires
                Call TrierTabBDBudgetPrimitifDépensesBancaires
                Call RenuméroterBudgetPrimitifDépensesBancaires
            Case Is = "Budget primitif dépenses horticoles"
                Call GénérerBudgetPrimitifDépensesHorticoles
                Call TrierTabBDBudgetPrimitifDépensesHorticoles
                Call RenuméroterBudgetPrimitifDépensesHorticoles
            Case Is = "Budget primitif dépenses medicales"
                Call GénérerBudgetPrimitifDépensesMédicales
                Call TrierTabBDBudgetPrimitifDépensesMédicales
                Call RenuméroterBudgetPrimitifDépensesMédicales
            Case Is = "Budget primitif dépenses non alimentaires"
                Call GénérerBudgetPrimitifDépensesNonAlimentaires
                Call TrierTabBDBudgetPrimitifDépensesNonAlimentaires
                Call RenuméroterBudgetPrimitifDépensesNonAlimentaires
             Case Is = "Budget primitif recettes bancaires"
                Call GénérerBudgetPrimitifRecettesBancaires
                Call GénérerBudgetPrimitifRecettesBancaires
                Call RenuméroterBudgetPrimitifRecettesBancaires
             Case Is = "Budget primitif recettes médicales"
                Call GénérerBudgetPrimitifRecettesMédicales
                Call TrierTabBDBudgetPrimitifRecettesMédicales
                Call RenuméroterBudgetPrimitifRecettesMédicales
             Case Is = "Budget primitif recettes numéraires"
                Call GénérerBudgetPrimitifRecettesNuméraires
                Call RenuméroterBudgetPrimitifRecettesNuméraires
                Call TrierTabBDBudgetPrimitifRecettesNuméraires
          End Select

        Call TrierTabBDCréditsBudgétaires
        Call RenuméroterCréditsBudgétaires

Merci. J'ai compris pourquoi je devais modifier certaines choses : Pour une procédure donnée, j'ai fait copier-coller. Au lieu de sélectionner la nouvelle procédure, j'ai fait remplacer : résultat : dans tout le programme tout a été modifié. Exemple procédure A : copier-coller; une deuxième procédure A; je ne la sélectionne pas; remplacer maman par papa; tout le programme, partout où il trouve maman, il met papa à la place. D'où les emmerdements qui surviennent.

Votre modification devrait me faciliter la tâche : moins de clics à faire sur oui (ou ok) lors de la création d'un crédit budgétaire. C'st bien le but recherché ?

Deux autres problèmes : création d'un crédit budgétaire : 1) Lors de la création du crédit budgétaire, dans le formulaire, le tbNuméroCréation reste vide mais il figure bien dans le TabBDCréditsBudgétaires; 2) Dans le TabBDBudgetPrimitifDépenses (suivi alimentaires, bancaires, etc.), le numéro création est vide; clic sur le bouton de commande GénérerTabBDBudgetprimitifdépenses adéquat, le numéro création s'inscrit bien. Peut-on résoudre ce problème s'il vous plaît ?

Je vais tester une formule d'Als35 : pour les prix unitaires quantité et total BP, dans la procédure concernée, je vais utiliser la fonction replace (vous connaissez ?) afin que dans les tableaux structurés les colonnes pré-indiquées se remplissent correctement (6 000,00 au lieu de 6000 actuellement).

Bonjour à tous,

Tous les appels aux procédures GénérerBudgetsxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx, vous avez-vu j'ai mis beaucoup de x étant sensiblement identiques, et les colonnes traitées étant les mêmes, il serait peut-être bon de ne faire qu'une procédure ou fonction, à voir, avec deux arguments, tableau source et cible.

Puisque l'on travaille sur des tableaux structurés à quoi bon utiliser des méthodes archaïques de recherche de dernière ligne etc... Utilisez plutôt l'objet LisRow.

afin que dans les tableaux structurés les colonnes pré-indiquées se remplissent correctement (6 000,00 au lieu de 6000 actuellement).

Change le format de la colonne concernée du tableau tout simplement, Cela évitera du code inutile.

Bonsoir Jean-Paul,

Je ne me considère pas du tout expert en VBA, sans être absolument nul. Donc d'avance merci de me proposer un fichier avec ListRow pour, d'après ce que j'ai compris, les tableaux structurés.

Bonjour à tous,

L'utilisation des ListRows a été à maintes fois évoquée.

Considérons que l'on ai un tableau structuré nommé "vtDatas" avec les colonnes "ID", "Nom", "Prénom", "Date de naissance", "Age".

Pour ajouter une ligne à ce tableau il y a plusieurs façons, pour ma part je récupère d'abord le ListObject en passant par l'objet Range. Ensuite j'affecte la nouvelle ligne à une variable, il ne reste plus qu'a renseigner les valeur de chaque colonnes de la nouvelle ligne.

Public Sub testListRow()
    Dim itemRow As Excel.ListRow
    Set itemRow = Range("vt_Datas").ListObject.ListRows.Add
    With itemRow
        .Range(.Parent.liscolumns("ID").index).Value = GetMaxID ' // On considère que GetMaxID est une fonction qui renvoie le max de la colonne ID + 1
        .Range(.Parent.liscolumns("Nom").index).Value = NomContact.Value ' // Contrôle textbox
        .Range(.Parent.liscolumns("Prénom").index).Value = PrenomContact.Value ' // Contrôle textbox
        .Range(.Parent.liscolumns("Date de naissance").index).Value = Anniversaire.Value ' // Contrôle textbox
        .Range(.Parent.liscolumns("Age").index).Value = DateDiff("yyyy", CDate(Anniversaire.Value), Date) ' // l'Age est calculer selon la valeur du contrôle date d'anniversaire
    End With
End Sub

Bien entendu c'est le minimum syndical, car il y a des tests à faire notamment sur l'existence du tableau, etc...

Il est possible d'avoir un fonction toute prête pour cela, évoquée dans ce post :

VBA - AJouter une ligne dans un tableau structuré et y placer des valeurs
Rechercher des sujets similaires à "variable objet bloc definie"