Excel VBA remplissage automatique selon somme voulu
Résolu/FerméT3chN0g3n Messages postés 5102 Date d'inscription samedi 16 février 2019 Statut Membre Dernière intervention 22 novembre 2024 - 3 août 2022 à 12:31
- Excel VBA remplissage automatique selon somme voulu
- Formule somme excel colonne - Guide
- Liste déroulante excel - Guide
- Somme si couleur excel - Guide
- Si et excel - Guide
- Message automatique thunderbird - Guide
4 réponses
2 août 2022 à 14:59
Bonjour,
Oui, c'est surement possible. Mais ont est pas là pour te fournir un code entier "tout cuit". Je pense qu'il y'a suffisamment de ressources disponibles pour commencer par toi même, et revenir nous voir avec au moins une "ébauche" de code et des questions plus précises.
Cdlt.
Bonjour,
Mon code fonctionne mais est très long car que des répétitions sans arrêt.
Nbr_poteau est déclarer en public et récupère un nombre dans une autre macro.
Voici mon début de code ou je met des conditions a chaque fois que la plage change
Sub Remplissage Dim Plage As currency Plage = Nbr_Poteau +1 If Plage = 2 Then If Range(A1) = "" And Range(A2) <> "" Then Range(A1) = Range(B1).Value - (Range(A2).Value) End If If Range(A2) = "" And Range(A1) <> "" Then Range(A2) = Range(B1).Value - (Range(A1).Value) End If End if If Plage = 3 Then If Range(A1) = "" And Range(A2) <> "" And Range(A3) <> "" Then Range(A1) = Range(B1).Value - (Range(A2).Value + Range(A3).Value) End If If Range(A2) = "" And Range(A1) <> "" And Range(A3) <> "" Then Range(A2) = Range(B1).Value - (Range(A1).Value + Range(A3).Value) End If If Range(A3) = "" And Range(A1) <> "" And Range(A2) <> "" Then Range(A3) = Range(B1).Value - (Range(A1).Value + Range(A2).Value) End If End if If Plage = 4 Then If Range(A1) = "" And Range(A2) <> "" And Range(A3) <> "" And Range(A4) <> "" Then Range(A1) = Range(B1).Value - (Range(A2).Value + Range(A3).Value + Range(A4).Value) End If If Range(A2) = "" And Range(A1) <> "" And Range(A3) <> "" And Range(A4) <> "" Then Range(A2) = Range(B1).Value - (Range(A1).Value + Range(A3).Value + Range(A4).Value) End If If Range(A3) = "" And Range(A1) <> "" And Range(A2) <> "" And Range(A4) <> "" Then Range(A3) = Range(B1).Value - (Range(A1).Value + Range(A2).Value + Range(A4).Value) End If If Range(A4) = "" And Range(A1) <> "" And Range(A2) <> "" And Range(A3) <> "" Then Range(A4) = Range(B1).Value - (Range(A1).Value + Range(A2).Value + Range(A3).Value) End If End if End Sub
Je souhaiterai donc un code plus simple mais je n'arrive pas.
Alors je sollicite votre aide.
Modifié le 2 août 2022 à 16:12
Ha ba voilà ont a déjà une base ! Effectivement avec cette approche tu va pas t'en sortir ...
Question, pourquoi tu déclare la variable "Plage" en type "Currency" (= monétaire) ?
Ensuite, le VB ne se limite pas aux instructions "if" et "then".
Une idée déjà plus compact serait de faire appel à des boucle "for" :
Sub Remplissage() Plage = Range("E1").Value '(j'ai mis la longueur de la plage en cellule E1 pour mon essais) Somme = 0 Result = 0 For IndexSomme = 1 To Plage Somme = Somme + Range("A" & IndexSomme).Value Next IndexSomme Result = Range("B1").Value - Somme For IndexCellVide = 1 To Plage If IsEmpty(Range("A" & IndexCellVide).Value) Then Range("A" & IndexCellVide).Value = Result End If Next IndexCellVide End Sub
Bonjour,
Merci beaucoup de ton aide
Ton code fonctionne bien, mais je doit l'adapter pour qu'elle ne s'active uniquement quand 1 seule cellule est vide. car c'est une macro qui se déclenche en automatique "Private Sub Worksheet_Change(ByVal Target As Range)" et du coup ca beugue.
Dès que la cellule A1 est remplis il n'attend pas de remplir d'autre cellule selon la plage, mais il met directement en A2 le résultat.
Je vais l'ajuster par rapport a mes cellules. et si vraiment j'y arrive pas je reviendrais pour demander de l'aide ou bien cloturer le sujet si j'y suis arrivé.
Bonne fin de journée et encore merci.
Modifié le 2 août 2022 à 17:04
Tu donne les infos au goute à goutte donc je ne peut pas deviner ... Mais si au moins si ça t'a donné une piste c'est le principal.
Bonjour,
Ca fonctionne merci beaucoup,
J'ai mis une boucle for pour compter le nombre de cellule pleine dans le nombre de cellule de la plage .
Et si nombre de cellule pleine = nombre de cellule plage - 1 alors appel la macro pour remplir la dernière cellule. Sinon rien
Merci T3chN0g3n pour ton aide, et pour répondre a ta question sur le Currency.
Je met tout les chiffres en Currency au cas ou j'ai une virgule, car j'ai déjà essayé single et double, mais il me limite en décimal, alors du coup je met tout en Currency.
ça peut poser problème si dans un cas ou on est sûr d'avoir un chiffre entier comme dans ce cas-ci de ne pas le déclarer en byte, integer ou long ??
Bonne journée et encore merci.
3 août 2022 à 12:31
Merci d'avoir pris le temps de nous faire un retour,
Le type "Currency" est particulier, je sais pas si c'est une super habitude d'utiliser ça systèmatiquement ... Un nombre de cellule sera forcément un entier donc je vois pas trop l'intérêt de déclarer une donnée avec décimales dans ce cas. Mais si tu veut des virgules de manière générale, il y'a tout simplement le type "decimal"
https://docs.microsoft.com/fr-fr/office/vba/language/reference/user-interface-help/data-type-summary
Sinon je t'invite à passer le sujet en résolu si tout est bon pour toi →
https://www.commentcamarche.net/infos/25917-forum-ccm-mode-d-emploi-marquer-mon-sujet-comme-resolu/
Cdlt.