Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

VBA Somme évenementielle

  • Initiateur de la discussion Initiateur de la discussion Arpette
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Arpette

XLDnaute Impliqué
Bonjour à toutes et à tous,
J'ai deux tableaux que je rempli à l'aide d'un USF . Sur le tableau de droite dans la partie verte, si la cellule G n'est pas vide, pour la ligne je dois renseigner des valeurs manuellement. Je souhaiterais que les calculs des colonne N et O se fassent de manière évenementielle et non par formule comme dans le fichier joint.
Merci votre aide.
@+
 

Pièces jointes

Re : VBA Somme évenementielle

Salut Arpette et le forum
Je dois me faire vieux, j'ai l'impression de radoter !
Rappel : Il n'y a ni télépathe, ni devin sur ce site
Code:
Je souhaiterais que les calculs des colonne N et O se fassent de manière évènementielle
Et quel évènement ? Le mariage du prince d'Angleterre ? L'activation de la feuille ? un changement dans les colonnes H à M ? un changement A à D ?
A+
 
Re : VBA Somme évenementielle

Bonjour à tous,

En supposant un changement des colonnes de H à M, insérer dans ton code entre les lignes en gras : Je n'ai pas regardé les reste de ton code.
cordialement
 
Re : VBA Somme évenementielle

Bonjour Gorfael, Julberto, merci de vos réponses. Avec le fichier joint, celà me semblait évident, si je veux remplacer la formule qui se trouve en N et qui fait la somme de H à M, évidemment c'est lorsque j'interviens sur H à M que je souhaite l'évènement en N.
Ca fonctionne si je le fais seul, mais si je l'intègre au code existant çà ne marche pas. Même avec ton code Julberto
Merci de votre aide
@+
 
Re : VBA Somme évenementielle

Re,

Désolé mais je n'entrave que dalle.
J'ai deux tableaux que je rempli à l'aide d'un USF
OK (partiellement) car il ne remplit pas la zone verte du tableau de droite ????
Sur le tableau de droite dans la partie verte, ......, pour la ligne je dois renseigner des valeurs manuellement.
Je crois avoir répondu à cette demande ???? l'usf n'agissant pas sur la zone verte du tableau de droite que je sache.
Je passe le relai à qui comprend.

cordialement
 
Re : VBA Somme évenementielle

Bonjour à tous

Arpette, si je peux me permettre ...
pourquoi ne veux-tu pas utiliser de formule en colonne N et O ?

A+
 
Re : VBA Somme évenementielle

Bonjour Bruno,re Julberto, Je sais Julberto que le USF n'agit pas directement sur le tableau de droite, sauf qu'il renseigne la colonne D et qui est utilisée en colonne O. Bruno, je ne veux pas de formule car les utilisateurs les effaces, les décales... et ensuite, hé Arpette ça marche plus 😡. Mais bon, si ce n'est pas faisable en évennementiel, je vais le faire en formule en colonne IV et ramener le résultat.
Merci pour votre aide
@
 
Re : VBA Somme évenementielle

Bonsoir à toutes et à tous,
sans parler de mon problème de somme évennementielle que je vais régler, je pense que j'ai un problème plus important.
Quand je sélectionne avec le USF par exemple : Article = 3255Z, puis Matière L49764 et Qté 200 pas de problème tous mes tableaux s'alimentent correctement.
Mais si je veux supprimer une valeur en A, je boucle ad vitam aeternam.
Merci pour votre aide je vous joints le nouveau fichier
@+
 

Pièces jointes

Re : VBA Somme évenementielle

Salut Arpette

Bruno, je ne veux pas de formule car les utilisateurs les effaces, les décales... et ensuite, hé Arpette ça marche plus
Et bien la protection de feuille existe pous ça ;-)

Mais si je veux supprimer une valeur en A, je boucle
Comme dans ton évènement 😛rivate Sub Worksheet_Change(ByVal Target As Range)
Tu peux effectuer des changements : Cells(i, 4).Value = r.Offset(0, 3).Value
Il faut encadrer ces changements par :
Code:
Application.EnableEvents = False
Cells(i, 4).Value = r.Offset(0, 3).Value
Application.EnableEvents = True
Sinon tu boucles de nouveau sur l'évènement "Change" ad vitam aeternam ... 😉

A+
 
Re : VBA Somme évenementielle

Bonjour Bruno, merci pour ta réponse, mais j'avais déjà essayé et le problème est le même. En fait le problème est que j'utilise le USF pour renseigner les colonnes A,B,C et E. J'ai essayer de contourner le problème en concaténant A et B en C dans le USF çà fonctionne, sauf qu'il faudrait que target soit actif après validation du USF. Quand je fais appelle à Target, elle est la 1ère fois en A, puis B, puis C donc çà ne fonctionne pas. Je vais tout repenser, essayer de supprimer ce For and Next, mais si tu comprends ce que je veux faire et que tu as une idée, elle sera la bienvenue. Tu m'as aidé sur un autre projet qui "marche" du tonner.
@+
 
Re : VBA Somme évenementielle

Salut Arpette 😉

Je pense que le mieux est d'utiliser du code dans le bouton valider (simple à mettre en place)
et non les évènements (trop de paramètres à gérer) pour inscrire ce que tu veux

A+
 
Re : VBA Somme évenementielle

Oui Bruno, mais le bouton valider, je l'ai mis dans mon dernier fichier "Placement.Zip" mais il renseigne A, puis B etc...Ce que je cherche, c'est justement quand je valide, je valide tout. Mais en pas à pas , je vois qu'il renseigne A, puis B etc..je pense que je passe à côté de quelque chose. J'ai même mis "Application.EnableEvents" dans le USF, mais ensuite "Private Sub Worksheet_Change(ByVal Target As Range)" ne fonctionne plus.
Merci de ton aide
@+
 
Re : VBA Somme évenementielle

Salut Arpette et le forum
Si tu expliquais réellement ce que tu veux faire ? Quel est le but final ?
J'ai même mis "Application.EnableEvents" dans le USF, mais ensuite "Private Sub Worksheet_Change(ByVal Target As Range)" ne fonctionne plus.
Quand j'utilise une instruction de niveau application, je fais une gestion d'erreur.
Quand je teste une macro, comme je peux l'arrêter pour la corriger, je prévois une macro supplémentaire, toute simple, qui remet en état mon fichier :
Code:
Sub test
Application.EnableEvents=true
end sub
Tu arrêtes ta macro après avoir bloqué la gestion des évènements, il faut la relancer. Excel ne le fera que si tu exécutes l'instruction de ma macro.

Comme je ne comprends pas l'intégralité de ton codage, juste des remarques :
Sur ton USF :
Code:
Private Sub UserForm_Initialize()

Dim i As Integer
Dim dernLign As Long
Dim hwnd As Long

'*******************Supprime la croix du userform******************
hwnd = FindWindowA("Thunder" & IIf(Application.Version Like "8*", _
    "X", "D") & "Frame", Me.Caption)
SetWindowLongA hwnd, -16, GetWindowLongA(hwnd, -16) And &HFFF7FFFF

Application.ScreenUpdating = False

i = 3
With Worksheets("Nomenclature")
    While Worksheets("Nomenclature").Cells(i, 2).Value <> ""
    'Boucle dans le classeur sur feuille Nomenclature 2ème colonne affiche la valeur tant que les cellules ne sont pas vides
    Me.LART.AddItem (Worksheets("Nomenclature").Cells(i, 2).Value)
    i = i + 1
    Wend
    Module1.SortListBox Me.LART, 0, 1, 1
 
i = 3
With Worksheets("Nomenclature")
    While Worksheets("Nomenclature").Cells(i, 3).Value <> ""
    'Boucle dans le classeur sur feuille Nomenclature 3ème colonne affiche la valeur tant que les cellules ne sont pas vides
    Me.LMATIERE.AddItem (Worksheets("Nomenclature").Cells(i, 3).Value)
    i = i + 1
    Wend
    Module1.SortListBox Me.LMATIERE, 0, 1, 1

i = 3
With Worksheets("Nomenclature")
    While Worksheets("Nomenclature").Cells(i, 5).Value <> ""
    'Boucle dans le classeur sur feuille Nomenclature 5ème colonne affiche la valeur tant que les cellules ne sont pas vides
    Me.LQTE.AddItem (Worksheets("Nomenclature").Cells(i, 5).Value)
    i = i + 1
    Wend
    Module1.SortListBox Me.LQTE, 0, 1, 1

End With
End With
End With
Application.ScreenUpdating = True
End Sub
Peut-être que je me trompe, mais je n'ai pas l'impression que tu saches utiliser With : ça ne sert qu'à créer un préfixe. Ça n'a pas d'autre but.
Code:
Private Sub UserForm_Initialize()

Dim i As Integer
Dim dernLign As Long
Dim hwnd As Long

'*******************Supprime la croix du userform******************
hwnd = FindWindowA("Thunder" & IIf(Application.Version Like "8*", _
    "X", "D") & "Frame", Me.Caption)
SetWindowLongA hwnd, -16, GetWindowLongA(hwnd, -16) And &HFFF7FFFF

Application.ScreenUpdating = False

i = 3
With Sheets("Nomenclature")
    While .Cells(i, 2).Value <> ""
        Me.LART.AddItem (.Cells(i, 2).Value)
        i = i + 1
    Wend
    Module1.SortListBox Me.LART, 0, 1, 1
    
    i = 3
    While .Cells(i, 3).Value <> ""
        Me.LMATIERE.AddItem (.Cells(i, 3).Value)
        i = i + 1
    Wend
    Module1.SortListBox Me.LMATIERE, 0, 1, 1

    i = 3
    While .Cells(i, 5).Value <> ""
        Me.LQTE.AddItem (.Cells(i, 5).Value)
        i = i + 1
    Wend
    Module1.SortListBox Me.LQTE, 0, 1, 1
End With
Application.ScreenUpdating = True
End Sub
Tu reconnaîtra ton code, en utilisation de l'instruction With.
Personnellement, je n'aurais fait qu'une seule boucle, toujours plus rapide que 3

EDIT : je viens de parcourir le code du bouton Valider. Je croyais que toutes les infos devaient se trouver sur la même ligne ?
A+
 
Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
7
Affichages
987
  • Question Question
Microsoft 365 Export données
Réponses
4
Affichages
906
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…