Déplacement non autorisé

Bonjour à toutes et à tous,

Feuille Dépenses alimentaires, tableau structuré TabDA1 : clic sur le bouton de commande Générer dépenses alimentaires : message d'erreur :

"Le déplacement de cellules dans un tableau de votre feuille de calcul n'est pas autorisé." 1) Je ne comprends rien à cette erreur; 2) Merci de m'aider à y remédier. Cette erreur concerne le module MGénérerTables, procédure GénérerDA, ligne 'Ajouter une ligne dans la table mensuelle concernée et récupérer son indice (J).

5budgets1.zip (289.82 Ko)

Bonjour

Erreur logique car tous vos tableaux structurés sont l'un en dessous de l'autre.

C'est juste une idée mais vu qu'il y a des doublons dans les titres de chaque tableau, pourquoi ne faites-vous pas un seul tableau avec toutes les colonnes. Après en fonction de vos choix vous remplissez les colonnes nécessaires

Cordialement

Bonjour Dan,

Merci d'avoir répondu, je vais essayer. Je vous tiendrai au courant du résultat. Si je mettais les tableaux structurés les uns à côté des autres, cela supprimerait-il l'erreur ?

Si je mettais les tableaux structurés les uns à côté des autres, cela supprimerait-il l'erreur ?

Oui mais il faudra voir pour le code je pense.
Par contre si vous le pouvez faites une seul tableau avec toutes les colonnes.

Crdlt

Un de vos compatriote a répondu à un autre sujet mais il s'est excusé de ne pouvoir s'exprimer clairement et de ne pas parler le français facilement. Le sujet est Multiplier deux tb dont le résultat doit aller dans un autre tb. Le principe de la multiplication est résolu mais pas celui de saisir les chiffres. Exemple : Prix unitaire : 1 250,85; quantité : 12,00; Je n'arrive pas à saisir les chiffres. Nota : le nombre de chiffres avant la virgule est variable tandis qu'après la virgule ce sera toujours deux chiffres. Si rien dans le sujet précité, voir le sujet suivant également : la méthode delete de la classe range a échoué. D'avance merci si vous pouvez m'apporter votre aide sur ce problème.

1. Je n'ai rien compris à ce que vous voulez faire.
2. Quel sujet suivant ? celui-ci est le dernier

Puis vous ne savez pas utiliser les retours à la ligne car le texte en bloc comme cela... c'est vraiment pas lisible.

Cordialement

Dans le formulaire, je n'arrive pas à saisir les tb Prix unitaire et quantité.

Chaque prix unitaire aura un certain nombre variable de chiffres avant la virgule et toujours deux chiffres après la virgule.

Chaque quantité aura un certain nombre variable de chiffres avant la virgule et toujours deux chiffres après la virgule.

Exemple :

Prix unitaire : 1 256,45

Quantité : 8 115,23

Merci d'essayer de renseigner les tb prix unitaire et quantité et de me signaler l'instruction nécessaire et où la placer afin que la saisie se fasse correctement.

3budgets1.zip (289.82 Ko)

Dans le formulaire, je n'arrive pas à saisir les tb Prix unitaire et quantité.

Quel formulaire ? Il y en a deux

C'est normal le décalage des textbox que vous par rapport aux libellés ?

Edit 1 : essayez en changeant la première ligne de code Private Sub tbPUABUPR_Change() par --> Private Sub tbPUABUPR_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Lorsque vous entrez le chiffre vous devez utiliser la virgule sur votre clavier et pas le point dans le pavé numérique
L'instruction format ne semble d'ailleurs pas servir dans ce cas

EDIT 2 :

essayez plutôt en remplaçant les deux codes Private Sub tbPUABUPR_Change() et Private Sub tbQABUPR_Change par ces deux-ci :

Private Sub tbQABUPR_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    If KeyAscii = 46 Then KeyAscii = 44
    Multiplication
End Sub
Private Sub tbPUABUPR_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    If KeyAscii = 46 Then KeyAscii = 44
    Multiplication
End Sub

Merci de penser à cloturer vos fils ouverts --> https://forum.excel-pratique.com/membre/29483

Bonsoir Dan,

J'ai suivi vos instructions et cela semble enfin marcher. J'ai fait de même pour la quantité. Dois-je le faire également pour la procédure Multiplication ?

D'après un autre fichier, j'ai ajouté une nouvelle procédure :

Private Sub tbPUABUPR_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)

Est-elle utile ? Si oui je la garde et je créée les deux autres pour la quantité et la multiplication.

Dans le cas contraire, je la supprime.

Elle se trouve dans l'UserForm UF02_CBUPR, feuille code, à la toute fin.

Pour ce qui est le problème du déplacement non autorisé, il est résolu.

9budgets1.xlsm (296.51 Ko)

Bonsoir DAN,

Je supprime donc les deux Exit que je remplace par les key_Press ?

Dois-je apporter une modification à la procédure Multiplication ou la garder telle qu'elle est actuellement ?

Dès que je serai satisfait par la création d'un article, je ne manquerai pas de clôturer tous les sujets créés.

Bonjour

Je supprime donc les deux Exit que je remplace par les key_Press ?

Dois-je apporter une modification à la procédure Multiplication ou la garder telle qu'elle est actuellement ?

Par rapport à votre dernier fichier posté, voici ce que je ferai

1. Supprimer les deux codes Exit et ajouter la ligne Multiplication dans le code Keypress. Cela simplifie le projet.
2. Autre point --> Dans vos userformes, remplacez la ligne Private Sub UserForm_Activate() par Private Sub UserForm_Initialize()

remarques :
- A noter qu'avec vos 2 codes Keypress, je pense que vous ne pouvez pas utiliser le clavier numérique pour mettre le point ou la virgule pour les décimales. Je suppose que vous l'avez remarqué.
- Vous utilisez la fonction datapicker dans votre projet. A moins que je ne me trompe cette fonction a été supprimée dans les plus récentes version d'excel. Dans ma version 2016 cela provoque un bug à l'ouverture.

je ne manquerai pas de clôturer tous les sujets créés.

Parfait !

Cordialement

Bonjour Dan,

À quoi correspondent KeyAscii = 46 et KeyAscii = 44 ?

que signifie if KeyAscii = 46 then KeyAscii = 44 ?

Pour DataPicker, Calendar pourrait-il le remplacer ? Si oui, quelles seraient alors les instructions à codifier et dans quelle procédure ?

Quel est l'avantage d'utiliser Initialize au lieu d'Activate ?

Vers 11 heures 30, je vais modifier mon programme pour respecter vos propres instructions. Je reviendrai vers vous en cas de problème.

Question hors programme : vous préférez que je vous tutoie ou que je vouvoie ? De vous à moi, vous faites ce que vous souhaitez.

À quoi correspondent KeyAscii = 46 et KeyAscii = 44 ?
que signifie if KeyAscii = 46 then KeyAscii = 44 ?

C'est la ref ASCii qui caractérise le point et la virgule. 44 pour la virgule et 46 pour le point

Pour DataPicker, Calendar pourrait-il le remplacer ? Si oui, quelles seraient alors les instructions à codifier et dans quelle procédure ?

Calendar c'est la même chose. J'avais cela sur excel 2010 mais après cela a été supprimé des contrôles supplémentaires VBA.
Mais si cela fonctionne chez vous, pas besoin de s'en préoccuper il me semble.

Quel est l'avantage d'utiliser Initialize au lieu d'Activate ?

L'explication est dans le nom.

- Activate est utilisé pour activer l'userform. Exemple : vous avez deux usf dans votre projet qui sont ouvertes et avec le code Activate vous passez d'une à l'autre.
- Initialize est utilisé à l'ouverture de l'userform. Exemple : vous lancez (ouvrez) l'usf avec l'instruction Show que ce soit depuis un bouton (c'est votre cas) ou via une instruction placée dans une autre macro.

Question hors programme :...

C'est comme vous voulez. J'ai prit l'habitude aujourd'hui de vouvoyer par défaut. C'est aussi par respect de la personne que je ne connais pas.

Cordialement

Bonjour Dan,

Voici le fichier modifié. J'ai supprimé tout le contenu de la feuille BD budgets prévisionnels et de la feuille Dépenses alimentaires. J'ai créé un article : aucun problème, aucune erreur n'ont surgi. Si vous estimez qu'il y a encore une modification à effectuer (par exemple pour la procédure Multiplication), merci de me le signaler. Dans le cas contraire, je vais clore les trois sujets.

5budgets1.xlsm (297.29 Ko)

Bonjour,

Je n'ai pas regardé tout le projet.
Là je ne vois rien de spécial sauf peut-être que le code Keypress précédent évitait d'entrer des lettres. Cela aurait peut-être été intéressant de garder aussi les lignes qui évitaient cette possibilité.

Mais à quoi bon compliquer car cela peut se voir aussi à l'utilisation et l'utilisateur n'ira tout de même pas mettre des lettres dans une quantité ou un prix...

Cordialement

Bonjour Dan,

J'apprends des choses avec vous malgré que cela reste obscur. Quelle était cette ligne qui évitait d'entrer des lettres lors de la saisie d'un prix unitaire et d'une quantité ? Il serait intéressant de les réintégrer dans les deux key_Presse ? Comme j'ai supprimé ce qui est devenu inutile, je ne sais pas quelle était cette ligne qui, du fait de mon manque de déduction chronique, ne m' a pas tapé à l'œil. J'ai regardé les précédents messages du présent sujet et n'ai rien vu qui pouvait ressembler à une telle instruction.

Quelle était cette ligne qui évitait d'entrer des lettres lors de la saisie d'un prix unitaire et d'une quantité

A l'origine, vous aviez ceci dans le fichier

    'N'autoriser que la saisie des chiffres et d'une seule virgule
    If InStr("1234567890,", Chr(KeyAscii)) = 0 _
        Or (InStr(tbPUABUPR.Value, ",") <> 0 And Chr(KeyAscii) = ",") _
    Then
        KeyAscii = 0
    End If

En regardant un peu de plus près faites plutôt comme ceci pour les deux textbox

1. Codes Exit : Supprimez les deux codes Exit si vous les avez toujours dans le fichier
2. Textbox tbPUABUPR
: Remplacez le code keypress, si existant dans le fichier, par celui ci-dessous et ajoutez le code Change

Private Sub tbPUABUPR_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    'N'autoriser que la saisie des chiffres et d'une seule virgule
    If KeyAscii = 46 Then KeyAscii = 44
    If InStr("1234567890,", Chr(KeyAscii)) = 0 _
        Or (InStr(tbPUABUPR.Value, ",") <> 0 And Chr(KeyAscii) = ",") _
    Then
        KeyAscii = 0
    End If
End Sub

Private Sub tbPUABUPR_Change()
    Call Multiplication
End Sub

3. Textbox tbQABUPR : Remplacez le code keypress, si existant dans le fichier, par celui ci-dessous et ajoutez le code Change

Private Sub tbQABUPR_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    'N'autoriser que la saisie des chiffres et d'une seule virgule
    If KeyAscii = 46 Then KeyAscii = 44
    If InStr("1234567890,", Chr(KeyAscii)) = 0 _
        Or (InStr(tbPUABUPR.Value, ",") <> 0 And Chr(KeyAscii) = ",") _
    Then
        KeyAscii = 0
    End If
End Sub

Private Sub tbQABUPR_Change()
    Call Multiplication
End Sub

4. Textbox tbTABUPR (Total)
- sélectionnez la textbox
- allez dans les propriétés de la textbox à la valeur LOCKED
- mettez la valeur à True au lieu de False (valeur par défaut)

Après je pense que tout est bon

Cordialement

EDIT : j'ai ajouté la ligne -->

If KeyAscii = 46 Then KeyAscii = 44

Du coup vous pouvez utiliser le point dans le clavier

Ceci est-il correct ?

Private Sub tbTABUPR_Change()
tbTABUPR.Locked = True
End Sub

Non. Pourquoi voulez-vous faire cela ??

Faites comme je vous ai expliqué. Pas besoin d'aller encore mettre un code de plus dans le fichier. Dans ce cas cela n'apporte rien de plus.

Je pensais que cela revenait au même que de mettre la propriété Locked à true.

Rechercher des sujets similaires à "deplacement autorise"