Bloqué en VBA !
yg_be Messages postés 23193 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 18 septembre 2024 - 18 sept. 2024 à 21:56
- Bloqué en VBA !
- Uptobox bloqué - Guide
- Code puk bloqué - Guide
- Pavé tactile bloqué - Guide
- Comment savoir si on est bloqué sur messenger - Guide
- Compte gmail bloqué - Guide
8 réponses
17 sept. 2024 à 12:08
Je vous joins le fichier, ce sera plus aisé pour comprendre le problème
17 sept. 2024 à 13:01
bonjour,
Comment déterminer quelles sont les "dernières" opérations?
Le plus simple, je pense, serait d'ajouter une colonne dans l'onglet "Banque", et que la macro utilise cette colonne pour indiquer que le montant a été dispatché, et ne doit donc plus être traité la fois suivante.
On peut imaginer d'autres techniques, si cette suggestion ne convient pas. Explique, alors, pourquoi cela ne convient pas, pour guider notre créativité.
17 sept. 2024 à 17:55
Merci de ta réponse aussi rapide !
en effet, je pense que c'est une excellente idée.
je vais donc ajouter une colonne en début, c'est à dire en A.
Serait il possible, lorsque je vais cliquer sur "dispatcher" que cette colonne se remplisse jusqu'à la dernièree opération; et de là repartir à partir de la première cellule vide de cette nouvelle colonne ?
Je vais essayer, mais une aide serait aussi la bienvenue.
Merci et excellente fin de journée
17 sept. 2024 à 18:20
Je ferais ainsi:
If wsSource.Range("D" & i).Value = "Achats" And wsSource.Cells(i, "A") = "" Then ' Obtenir la valeur de la colonne F de la source valeurF = wsSource.Range("F" & i).Value ' Trouver la première ligne vide dans la colonne F de la feuille "achats" dernièreLigne = wsCible.Cells(wsCible.Rows.Count, "E").End(xlUp).Row + 1 ' Inscrire la valeur dans la première ligne vide wsCible.Cells(dernièreLigne, "E").Value = valeurF wsSource.Cells(i, "A") = "X" End If
Cela ne fait le travail que si la colonne A est vide, et la remplit après avoir fait le travail. (je n'ai pas testé)
17 sept. 2024 à 18:23
Merci, j'essaie de suite !
j'avais réussi à me situer sur la première cellule non vide, mais ne voyais pas comment remplir la colonne A jusque là.
J'essaie et je reviens vers toi.
SimKmil
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question17 sept. 2024 à 18:27
Je viens d'essayer et ça bloque sur la première ligne. MAIS ! j'ai fais un module rien qu'avec cela, ne devais-je pas le joindre à l'intérieur du premier module ?
je vais voir cela
17 sept. 2024 à 20:12
Ce que j'ai proposé, c'est une adaptation d'une partie de ton code.
Sub dispatcher_opération() Dim i As Long i = 5 'débute à la ligne 5 pour D5 'boucle jusqu'à ce que nous trouvions une cellule vide Do While Not IsEmpty(Range("D" & i).Value) 'placer ici le code à exécuter Dim wsSource As Worksheet Dim wsCible As Worksheet Dim valeurF As Variant Dim dernièreLigne As Long ' Définir les feuilles Set wsSource = ThisWorkbook.Sheets("Banque") ' Remplacez par le nom de votre feuille source Set wsCible = ThisWorkbook.Sheets("Achats") ' Vérifier si la cellule D1 contient "achats" If wsSource.Range("D" & i).Value = "Achats" And wsSource.Cells(i, "A") = "" Then ' Obtenir la valeur de la colonne F de la source valeurF = wsSource.Range("F" & i).Value ' Trouver la première ligne vide dans la colonne F de la feuille "achats" dernièreLigne = wsCible.Cells(wsCible.Rows.Count, "E").End(xlUp).Row + 1 ' Inscrire la valeur dans la première ligne vide wsCible.Cells(dernièreLigne, "E").Value = valeurF wsSource.Cells(i, "A") = "X" End If MsgBox "la valeur de D" & i & " est: " & Range("D" & i).Value 'incrémenter le compteur de ligne i = i + 1 Loop End Sub
18 sept. 2024 à 09:31
Super !!
ça marche. j'ai changé la colonne A vers la colonne H et celle-çi se remplit de "X" à chaque fois que j'ai "Achats".
Ces montants se retrouvent bien sur la feuille Achats.
Maintenant, je dois essayer de ne dispatcher que les nouveaux montants en me basant sur la cellule suivant le dernier "x"
Je vais essayer d'y arriver ...
je fais ceci afin d'aider une association qui s'occupe d'enfants placés et ils n'ont évidemment pas les moyens de s'offrir un "vrai" informaticien, alors je me débrouille comme je peux, et surtout avec ton aide.
Merci beaucoup
18 sept. 2024 à 09:43
ne dispatcher que les nouveaux montants, c'est le but du second test dans l'instruction suivante, dans le code proposé plus haut:
If wsSource.Range("D" & i).Value = "Achats" And wsSource.Cells(i, "H") = "" Then
18 sept. 2024 à 17:26
Merci, en effet, les montants inscrivent un "X" dans la colonne H, mais je n'ai pas compris si au départ de cela mes nouveaux montants démarreraient sous cette ligne.
Je vais donc essayer en introduisant de nouveaux montants
Merci de tes explications.
18 sept. 2024 à 17:30
Ouf ! tout fonctionne !
je n'avais pas fait de nouvel essai. c'est ma faute, trop pressé .
Maintenant il me reste à faire le même module pour l'argent qui va du compe Banque vers la caisse (retrait pour besoin d'argent en espèces)
Merci beaucoup et excellente fin de journée. Ici du soleil.
18 sept. 2024 à 21:56
Soleil ici aussi.
Pour éviter de dupliquer tout le code, tu pourrais utiliser la valeur en colonne D pour déterminer la feuille de destination. C'est surtout utile si tu as plus de deux feuilles de destinatons.