Bonjour, merci pour ces différents cours très instructif et dont les exemples sont très appréciable pour bien assimiler le processus. Je continue mon apprentissage pour arriver à créer un tirage de ronde suisse automatisé en fonction du classement. Encore beaucoup de chose à apprendre avant mais je ne désespère pas d'y arriver en partant de zéro ou plus exactement ce que je découvre dans vos vidéos. 👍
9 місяців тому
Bonjour Franck, je vous remercie beaucoup pour votre intérêt. Les séries que je propose en VBA sont très complètes donc je ne doute pas que vous parviendrez à vos fins à l'issue.
Bonjour Cher Professeur ! Je me suis mis à l'ouvrage, et refait totalement l'exercice, (je suis très bon...). J'en ai refait un ensuite à ma façon, et j'y suis parvenu !! Je suis hyper content !!!! Je vous souhaite une bonne continuation et une excellente journée ! Merci pour tous !
7 років тому+1
Bonsoir George, je n'en doutais pas ! D'où venait cette erreur 400, était ce dû, par le parcours d'une boucle à l'affectation d'une cellule avec un indice de ligne ou de colonne à 0 ?
Oui, tout à fait exact ! J'avais affecté un mauvais indice, d'ou erreur à chaque fois !! Pas toujours facile le VBA, il fonctionne très bien, mais une simple "virgule" fait tout rater parfois !! Dur dur....!! Mais cela est super quand même...!! Bonne soirée cher Professeur !!
7 років тому+1
Le code réplique exactement ce qu'on lui dit de faire. Pas évident parfois de s'apercevoir qu'on l'induit en erreur tellement la procédure semble logique. Personnellement, je teste chaque fragment de code avant de poursuivre le programme ce qui ne m'empêche pas parfois de perdre du temps pour résoudre l'erreur improbable générée. Merci à vous George et je vous souhaite une très bon Week End
vraiment j'ai adoré cette vidéo bon courage Monsieur Stéphane merci beaucoup
7 років тому+1
Oui ici il s'agit d'automatiser le code et les actions grâce aux boucles de programmation en VBA Excel. Le fait de pouvoir réaliser une mise en forme automatique par détection systématique des bornes de tous les tableaux d'une feuille permet de montrer la puissance et l'intérêt de ces instructions en terme d'automatisation et de gain de temps. C'est moi qui vous remercie Abouomar Maghribi pour avoir pris le temps de faire un message.
Fantastique ! Il suffit (me semble-t-il) d'écrire un code similaire dans un module à part, de sorte à pouvoir mettre en forme rapidement tous ses nouveaux tableaux (quel que soit le fichier Excel). Énorme gain de temps lorsque l'on doit souvent créer de nouveaux tableaux. Un tout grand merci.
3 роки тому
Oui parfaitement Marcus dans le modèle Excel Personal.xlsb. Le Gain de temps, je vous le confirme. C'est exactement le but de la manœuvre. Merci à vous.
you probably dont care but does any of you know a method to get back into an Instagram account?? I was stupid forgot the account password. I would appreciate any tricks you can offer me!
@Calvin Rocco thanks for your reply. I got to the site through google and im in the hacking process now. Looks like it's gonna take quite some time so I will get back to you later when my account password hopefully is recovered.
bonjour je cherche à mettre des barre de données dans des cellules suivant les valeurs minimum et maximum qui varient suivant chaque ligne comment faire une macro VBA?
11 місяців тому+1
Bonjour Alexandre. Vous pouvez peut être essayer simplement d'appliquer des graphiques SparkLine dans vos cellules depuis le ruban Insertion.
J'ai une petite info ou astuce que j'ai mise sur mon fichier pour revenir à l'état d'origine sans devoir prendre le pinceau de mise en forme et qui préserve l'état des cellules (pourcent, monétaire ...) : j'ai fait un petit programme qui me remet les polices que j'ai choisi à une taille définie, en Bold=false, sans remplissage ni bordure. J'ai juste à ajouter un second bouton pour tout remettre en état après chaque test. Comme quoi vos enseignements portent à des initiatives de simplification. Merci pour tout.
6 років тому+1
Très belle mise en oeuvre qui plus est, adaptée à des besoins pratiques. Je vous remercie pour ces témoignages fort plaisants.
Bonjour! SVp ou pourrais je avoir le fichier de base de traitement?
2 роки тому
Bonjour Raoul. Le fichier source est proposé au téléchargement à cette adresse, vers le début de la formation : www.bonbache.fr/boucles-for-next-en-vba-excel-pour-traitements-automatises-125.html
je suis entrain de faire votre tuto,et la minute 15 quand il s'agit de mettre la couleur verte j'ai un message d'erreur(propriété ou méthode non géré par cet objet) et je suis coincer si vous pouviez éclaire ma lanterne je vous en serrais très reconnaissant .merci pour vos vidéos qui me font progresser par votre approche très détailler.
5 років тому
Bonjour Michel et merci pour votre message. Il doit y avoir un souci dans le nom de l'objet que vous exploitez ou de des propriétés. Je vous invite à consulter la formation détaillée à cette adresse : www.bonbache.fr/boucles-for-next-en-vba-excel-pour-traitements-automatises-125.html Tout le code y est donné.
Bonjour Monsieur Rossetti, tout d'abord je vous remercie pour vos formations très efficaces. J'ai suivi la formation sur la boucle For. J'ai écrit tout le code qui s'exécute bien étape par étape avec F8 mais qui bloque avec F5. je reçois le message suivant "Can't exécute code in break mode". L'aide visual basic n'étant pas très explicite pour moi, pourriez-vous s'il vous plaît m'indiquer comment résoudre le problème? Merci
4 роки тому
Bonjour Doris et merci beaucoup pour votre message. Le mode arrêt se déclenche suite à une erreur de syntaxe ou lorsqu'une macro est déjà en cours d'exécution. Vous devez cliquer sur le bouton Stop (Réinitialiser) pour arrêter le débogueur. Dès lors, F5 fonctionnera jusqu'à la prochaine erreur.
Bonjour, je ne rajoute jamais la variable à côté du mots clé next dans les boucles for et foreach et je n'ai jamais eu de problèmes, est-ce facultatif ou il y a des cas où c'est vraiment essentiel ? Aussi traitez-vous les modules de classe dans votre livre vba avancées ? Merci d'avance et bon réveillon : )
2 роки тому
Bonjour Jack. Le VBA est permissif mais ce n'est pas le cas d'autres langages. Il est donc préférable d'être puriste et de prendre les bonnes habitudes. Un programmeur doit être précis. Je traite les classes mais pas encore les modules de classe. Cela viendra. Je vous remercie beaucoup pour ce message et pour votre intérêt.
Bonjour, tout d'abords je souhaite vous remercier pour ces vidéos qui sont bien plus clair que des livres de cours. Lorsque je souhaite lancer le programme pour mettre en forme les en tête de tableau qui ce trouve environ a la 14ème minutes je me retrouve avec une cette erreur : "erreur d'exécution 1004" "Erreur définie par l'application ou par l'objet" J'ai chercher d'où provient cette erreur mais je ne trouve pas auriez vous une idée d'où cela peut venir ? Encore merci pour les vidéo.
Рік тому
Bonjour Hugolin. Merci pour ce message. Ce type d'erreur intervient principalement lors d'un conflit système a priori indépendamment du code que vous développez, dans la mesure ou vous avez bien déclaré et typé vos variables en suivant la procédure que je propose dans le pas à pas détaillé : www.bonbache.fr/boucles-for-next-en-vba-excel-pour-traitements-automatises-125.html Des guides sont proposés sur le Web. Je ne pourrais vous en dire plus sans être directement confronté au cas : fr.repairmsexcel.com/blog/comment-reparer-une-erreur-dexecution-1004 help.xlstat.com/fr/6452-erreur-dexecution-1004-lacces-par-programme-au-projet
Gross merci pour votre temps et pour nous partager vos connaissances! j'ai besoin de copier une liste de la Colonne 1 de la Feuille 1 aux Colonnes 1, 2, 3 et 4 de la Feuille 2 (Ex : Feuille1 A1, A2, A3, A4 A,5…jusqu’à la dernière = Feuille2 A1, B1, C1, D1, A2, B2, C2, D2, A3, B3, C3, D3....jusqu’a la dernière, dans cette séquence. Avez-vous un vidéo qui puisse m’aider?
3 роки тому
Bonjour Dora. Merci beaucoup pour ce message. Je n'ai pas de vidéo collant spécifiquement à votre demande. Mais il suffit d'engager une boucle sur la hauteur de la liste 1. For i=1 To Valeur_Max Sheets("Feuille2").cells(i,1).Value=Sheets("Feuille1").cells(i,1).Value Sheets("Feuille2").cells(i,2).Value=Sheets("Feuille1").cells(i,2).Value ... Next i
Bonjour Stéphane. J'ai un petit problème au début de cet exercice. Je teste la der-ligne qui me répond bien 21. Mais la der_colonne me répond 11 et non 10. J'ai essayé de la "clearer" pour effacer toute valeur que ne je verrais pas, mais rien ne fait. J'ai toujours 11. Sub boucles() Dim der_ligne As Integer Dim der_colonne As Integer Dim tempo As Integer Range("K:K").ClearContents der_colonne = Cells.SpecialCells(xlCellTypeLastCell).Column der_ligne = Cells.SpecialCells(xlCellTypeLastCell).Row MsgBox der_ligne & " " & der_colonne End Sub Mon tableau est le vôtre téléchargé. Le dernier tableau se termine à la colonne J. Pourriez-vous m'aider ? Un tout grand merci d'avance :-)
4 роки тому+1
Bonsoir Patricia, je n'ai pas bien le temps de vous aiguiller ce soir. Avez-vous reproduit le code de la formation détaillée fournie à cette adresse ? www.bonbache.fr/boucles-for-next-en-vba-excel-pour-traitements-automatises-125.html
@ J'ai retéléchargé le fichier à partir du site, réécrit le code et tout fonctionne parfaitement. Mon ordinateur devait être fatigué ;-) Merci vraiment pour votre réponse rapide et votre aide
4 роки тому+1
Je vous en prie Patricia et félicitations pour la mise en oeuvre.
Bonjour, Je viens de découvrir vos séries de vidéos et je les trouve vraiment très bonnes, simples et TRES explicites, autant pour les novices que ceux ayant déjà quelques notions (je découvre bcp de choses). Une question, j'ai pour habitude d'utiliser "Range("A" & Rows.Count).End(xlUp).Row" pour récupérer l'indice de la dernière ligne saisie d'un fichier, et pas conséquent connaître le nombre de lignes non vides. Je ne connaissais pas votre méthode "cells.specialcells(xlcelltypelastcell).row. A priori ces 2 méthodes retournent la même valeur, est ce-qu'il y en a une préférable à une autre ?
4 роки тому
Bonjour Paul et merci beaucoup pour votre message. C'est le principe même de la programmation, plusieurs méthodes et techniques permettent d'atteindre le même résultat. Dans la mesure où l'une n'est pas plus complexe que l'autre, c'est à l'utilisateur de choisir selon ses affinités.
Bonjour, Merci pour toutes ces vidéos très claires J'ai une petite question. Pourquoi la variable 'Ligne' est compris comme une Ligne (Row) sans être déclaré en tant que telle? Le mot ligne est connu par VBA?
4 роки тому
Bonjour Loïc. La variable Ligne n'est pas interprétée comme un objet Row soit une ligne en tant que telle. Elle est déclarée comme un entier. Ce sont tous les numéros de ligne qu'elle sert à passer en revue.
@ merci de cette réponse rapide. Mais je ne comprends pas comment est compris que Ligne passe les lignes en revue et pas autre chose...?
4 роки тому
Ligne est une variable. Cette valeur incrémentée est passée à l'objet Cells : Cells(ligne,colonne). L'objet Cells désigne une cellule. Avec ces indices progressifs, ce sont toutes les cellules ciblées qui sont parcourues.
Bonjour Stéphane! j'espère que tu vas bien, j'aimérai connaitre le lien sur le tuto relatif au boucle While. merci!
5 років тому
Bonjour Monsieur. Voici le lien : www.bonbache.fr/boucles-for-next-en-vba-excel-pour-traitements-automatises-125.html. Désolé de vous poser cette question. Comme il n'est pas courant, pouvez-vous me confirmer que votre prénom est bien Ward ?
en réalité, je cherche à savoir comment fonctionne la boucle WHILE, afin de me permettre de mieux comprendre l'exercise sur le facturier automasé avec gestion de stocks
5 років тому
Rock n'est pas non plus un prénom courant. Enchanté donc. Je propose de nombreuses formations exploitant la boucle While en VBA Excel. Je vous suggère de taper les mots clés suivants : While Excel, dans la zone du petit moteur de recherche en haut à droite, sur le site Bonbache.fr. Ensuite, vous pourrez faire votre choix.
Bonjour Monsieur pouvez me dire si parmi tous vos tutoriels si un d'entre eux expliquerait comment exemple en rapport avec cette vidéo. Mettre la première ligne du tableau à la place de la deuxième et la deuxième à la place de la première. Désolé pour le dérangement et bravo pour toutes vos explications !
6 років тому+1
Bonjour Jacques, je n'ai pas d’exemple précis à ce sujet. Mais avec les formations VBA, vous avez toutes les billes. Il s'agit de mémoriser les informations de la première et seconde ligne dans des variables et de les inscrire inversement dans les cellules. Je vous propose néanmoins plus simple,. Vous faites une macro automatique vous enregistrant en train de simuler ces actions, Couper, clic droit, insérer au dessus (par exemple). Après l'enregistrement, vous consultez le code (Alt + F11) et vous le prélevez.
Rossetti Stéphane comme d'habitude qu'elle réactivité. Bravo et merci. Dans le premier cas dois je utiliser une boucle ou pas du tout ?
6 років тому
Je vous en prie Jacques. Oui c'est préférable pour passer en revue plus facilement toutes les colonnes d'une ligne si vous connaissez leurs bornes, donc boucle For Next.
Bonjour Stéphane,Je vous remercie pour toutes ces vidéos qui me sont d'une énorme utilité. Alors j'ai refais l'exercie en essayant d'aller plus loin et de mettre une somme en dessous de la colonne prix TTC. En revanche je n'y arrive pas du tout. Pouvez-vous m'éclaire ?Voici le code: Sub calcul()Dim ligne As Integer: Dim colonne As Integer Dim Der_ligne As Integer: Dim Der_colonne As IntegerDer_ligne = Cells.SpecialCells(xlCellTypeLastCell).Row Der_colonne = Cells.SpecialCells(xlCellTypeLastCell).Columnligne = 1: colonne = 1 For ligne = 1 To Der_ligne For colonne = 1 To Der_colonne
If (Cells(ligne + 1, colonne).Value = "" And Cells(ligne, colonne + 1).Value = "" And Cells(ligne, colonne).Value "") Then Cells(ligne, colonne).xlUp.Select Selection.Worksheet.Function.Sum End If
Next colonneNext ligne End Sub
7 років тому
Bonjour Guillaume et merci pour votre retour, l'emploi de l'objet Selection en tant que Range est intéressant pour désigner la plage de la somme, il n'y a donc plus qu'à l'exécuter mais en sélectionnant la cellule du résultat : cells(ligne,colonne).Value = Application.WorksheetFunction.Sum(Selection)
Bonjour ! j'aimerais savoir si le langage VBA fonctionne avec "OpenOffice" car je n'ai plus excel ! j'avais une version (gratuite) sur un vieux PC (qui à rendu l'âme) et pour l'instant pas les moyens financier de l'acheter, j'ai découvert il y à quelques jours vos "tutos" que je trouve vraiment bien ! c'est bien expliqué ! je ne suis pas dans le domaine ! et j'arrive à comprendre facilement ! je me servais beaucoup d'Excel pour mes statistiques ! j'avais un programme VBA qu'un ancien collègue de travail m'avait créé en 2008 ! j'ai une sauvegarde mais je ne sais pas comment faire pour qu'elle fonctionne sur Openoffice ! encore un grand merci pour ce que vous faites !
3 роки тому
Bonjour Laurent. Votre message est un réel plaisir et je vous remercie beaucoup pour ces compliments. Malheureusement, Microsoft est propriétaire du VBA, donc il va de soi que les versions libres et openOffice ne le proposent pas. Encore merci pour votre attention.
Je suis encore là Monsieur Stéphane, Dans l'application de la seconde boucle For, j'ai suivi le tuto malheureusement j'obtiens une erreur de type "438 propriété ou méthode non gérée par cet objet" dont je ne comprends pas l'origine. Voici ci-dessous le code à cet effet Sub boucles() Dim ligne As Integer: Dim colonne As Integer Dim der_ligne As Integer: Dim der_colonne As Integer der_ligne = Cells.SpecialCells(xlCellTypeLastCell).Row der_colonne = Cells.SpecialCells(xlCellTypeLastCell).Column For ligne = 1 To der_ligne For colonne = 1 To der_colonne If (ligne > 1) Then If (Cells(ligne - 1, colonne).Value = "" And Cells(ligne, colonne).Value "") Then With Cells(ligne, colonne) .Borders(xlEdgeTop).LineStyle = xlContinuous .Borders(xlEdgeTop).weigth = xlThick .Font.Bold = True .Interior.Color = RGB(70, 170, 30) End With End If End If Next colonne Next ligne End Sub
4 роки тому+1
Bonjour Monsieur, vous avez une erreur sur le nom de la propriété pour l'épaisseur du trait, il s'agit de Weight et non de weigth. Lorsque VBA ne transforme pas la casse, c'est que la propriété ou méthode n'est pas reconnue.
Bonjour Stéphane et les autres internautes. Merci pour votre vidéo. Il y a une chose que je ne comprends pas dans cette vidéo. Pourquoi n'avez vous pas défini les variables ligne et column : Ligne = cells.row colonne = cells.column Comment excel fait-il pour comprendre l'instruction: for colonne = 1 to der_colonne s'il ne sait pas que colonne = column Si quelqu'un a la réponse, ça m'intéresse, Merci d'avance !
4 роки тому
Bonjour Baptiste. Les variables ligne et colonne sont bien déclarées. Les variables der_ligne et der_colonne sont initialisées sur les bornes de la feuille, jusqu'à la dernière cellule non vide. Donc l'instruction for colonne = 1 to der_colonne permet de faire varier l'indice de colonne du premier au dernier recensé. On fait de même pour l'indice de ligne : for ligne = 1 to der_ligne. De cette manière, toutes les cellules utiles sont passées en revue. Vous avez toutes les explications en pas à pas détaillé à cette adresse : www.bonbache.fr/boucles-for-next-en-vba-excel-pour-traitements-automatises-125.html
Bonjour, j'ai bien compris toutes vos vidéos mais n'arrive pas à les mettre en pratique. J'ai un tableau de commandes. Chaque commande à plusieurs lignes mais aucune n'a le meme nombre de ligne. Chaque commande porte un numéro. Colonne A = nom du client, colonne B = numéro de facture, colonne C = montant HT, colonne D = TVA. Je souhaite faire une macro pour insérer deux lignes au dessous à chaque fois que le numéro de facture change. Ensuite, sur ces deux lignes, je souhaite automatiser la saisie comptable avec les contreparties. Pouvez-vous m'aider ????? MERCI
6 років тому
Bonjour Anne, une boucle While pourrait vous aider. While (cells(ligne, indice_colonne) "") ligne=ligne+1 Wend Au sortir de la boucle, l'indice mémorisé dans la variable ligne est celui de la fin de votre tableau, soit la position à partir de laquelle vous pouvez débuter l'insertion automatisée. J'aimerais vous aider plus, mais difficile de trouver du temps. Et même si je vous demandais plus de détail sur votre projet, je ne pourrais me pencher dessus avant quelques semaines.
Bonjour j'ai suivi votre vidéo et recopié votre exercice mais au 2eme test il me renvoie à la case A1 au lieu de B4 pourquoi malgré cela c'est un plaisir de suivre vous explications
7 років тому
Pouvez vous copier le code que vous avez saisi ? En tous cas merci pour votre message.
Dim ligne As Integer: Dim colonne As Integer Dim der_ligne As Integer: Dim der_colonne As Integer der_ligne = Cells.SpecialCells(xlCellTypeLastCell).Row der_colonne = Cells.SpecialCells(xlCellTypeLastCell).Column For ligne = 1 To der_ligne For colonne = 1 To der_colonne If (Cells(ligne, colonne).Value " ") Then MsgBox ligne & " " & colonne Exit Sub End If
Next colonne Next ligne je travaille sous excel 2016 merci
7 років тому
Oui en effet, la boucle consiste à détecter les bornes des tableaux sur la feuille de calcul en parcourant tous les indices de lignes et colonnes jusqu'aux derniers. Et le test consiste à vérifier la première cellule non vide "" pour se positionner sur la première cellule d'entête détectée. Le souci vient du critère, vous avez écrit le test If (Cells(ligne, colonne).Value " ") Then et il y a un espace entre les deux guillemets. Comme aucun cellule n'est égale à un espace, ce test est toujours vrai. Il faut écrire strictement If (Cells(ligne, colonne).Value "") Then, en supprimant l'espace entre les guillemets donc pour bien détecter la première cellule non vide.
Bonjour cher professeur ! J'ai refait à l'intégrale l'exercice, et pourtant une erreur 400 apparaît à chaque fois que je veux envoyer la boucle !! J'ai bien vérifier, car le VBA n'est point facile, il suffit d'un rien.....! Mais là j'avoue ne plus rien découvrir ! D'autant plus que le débogage pas à pas, ne fonctionne pas, alors je ne sais ou j'ai fait l'erreur !!....Pour le reste, ce fut un plaisir de reprendre le VBA, même si celui-ci n'est point facile à digérer....Merci !!
7 років тому+1
Bonsoir George, les causes d'une erreur 400 peuvent être multiples. Comme ce code détecte automatiquement les bornes des tableaux présents dans la feuille pour les parcourir et les mettre en forme, explicitement différemment pour les titres d'ailleurs, il suffirait qu'une ligne ou une colonne soit affectée à l'indice 0 (Ce qui n'existe pas dans une feuille Excel), dans les boucles par le jeu des incrémentations, pour que l'affection d'une propriété de cellule renvoie ce type d'erreur. Dans la double boucle While, il faudrait temporairement enlever le code pour déjà tester son bon fonctionnement, juste après l'initialisation des variables : While (ligne < der_ligne) colonne = 1 While (colonne < der_colonne) MsgBox (ligne & "-" & colonne) colonne = colonne + 1 Wend ligne = ligne + 1 Wend Pour vérifier dans un premier temps que les valeurs renvoyées pour les lignes et colonnes sont cohérentes.
Bonjour Stéphane, J'essaye depuis maintenant 1 semaine de créer une macro pour me faire gagner un temps précieux au travail. Je dois automatiser une tache longue et répétitif : la valeur cible. Ainsi j'ai trouvé le code suivant, me permettant donc de faire une valeur cible sur la ligne 13. Sub ValeurCible() ' V13 cellule contenant la formule ' X13 cellule contenant la valeur que la formule doit atteindre ' I13 cellule contenant la variable à modifier Range("V13").GoalSeek Goal:=Range("X13").Value, ChangingCell:=Range("I13") End Sub Sauf que cela me fait seulement la ligne 13. Après de longues minutes à essayer de mettre une boucle, et en ayant suivi de nombreux tutos, je n'y suis pas arrivé... Ainsi, j'aimerai une boucle allant de la cellule V13 à V213. Avez-vous une idée de quel boucle dois-je utiliser ? Et comment faire ? Milles mercis par avance ! Martin
7 років тому
Bonjour Martin, la valeur cible consiste à résoudre une équation à une ou plusieurs inconnues. C'est un problème que j'ai résolu sur une demande spécifique, le distributeur de billets. En fonction de la somme demandée inscrite dans une cellule, et en fonction des billets encore disponibles en banque, le code doit fournir en retour la combinaison de billets permettant d'atteindre le solde demandé : www.bonbache.fr/distributeur-de-billets-en-visual-basic-excel-143.html La clé est l'imbrication de boucles pour tester toutes les valeurs jusqu'à trouver celles qui matchent.
Re-bonjour Stéphane, Je vous remercie de votre réponse. Il me semble que j'ai mal expliqué mon problème. Je dois régulièrement remplir des fichiers Excel avec des remises plus ou moins différentes pour mes clients tous les mois. J'ai environ 120 produits à faire à chaque fois, et je dois donc faire : Analyse Scénarios - Valeur Cible, et changer les 3 cases; et faire cette manip 120 fois. J'aurai aimé gagner du temps, et automatiser ou faire en sorte que toutes les colonnes des 120 produits se fassent d'un coup. J'ai donc une macro qui fonctionne mais uniquement sur la ligne 13. Sub ValeurCible() ' V13 cellule contenant la formule ' X13 cellule contenant la valeur que la formule doit atteindre ' I13 cellule contenant la variable à modifier Range("V13").GoalSeek Goal:=Range("X13").Value, ChangingCell:=Range("I13") End Sub Je cherche donc à incorporer une boucle afin de pouvoir faire les 120 fiches produits d'un coup. Je vous remercie par avance ! Martin
7 років тому
En mettant en pratique ce qu'enseigne cette formation sur les boucles For Next vous devriez arriver à vos fins. Plutôt que d'utiliser l'objet Range pour désigner V13 par exemple, vous pouvez exploiter l'objet Cells(indice_ligne,22), 22 pour V et faire varier l'indice de ligne 120 fois : for indice_ligne=13 To 132 ... Le traitement doit être intégré dans la boucle et chaque cellule adapté avec l'indice de ligne en variable et l'indice de colonne fixe.
Bonjour Stéphane, Je vous remercie de votre réponse. Je débute juste avec les macros, et le VBA reste assez compliqué à comprendre. J'ai dû mal à comprendre toutes vos explications. Si je comprends bien, je dois utiliser For Next pour la boucle. Est-ce que je peux garder l'objet range ? Ou je dois indéniablement passer par Cells? Merci par avance.
7 років тому
Cells est plus approprié car avec une boucle For Next, on peut ainsi faire varier son indice de ligne 120 fois comme vous le souhaitez afin d'intégrer toutes les cellules dans un seul traitement. C'est exactement ce que propose cette formation sur laquelle nous commentons.
Bonjour, merci pour ces différents cours très instructif et dont les exemples sont très appréciable pour bien assimiler le processus. Je continue mon apprentissage pour arriver à créer un tirage de ronde suisse automatisé en fonction du classement. Encore beaucoup de chose à apprendre avant mais je ne désespère pas d'y arriver en partant de zéro ou plus exactement ce que je découvre dans vos vidéos. 👍
Bonjour Franck, je vous remercie beaucoup pour votre intérêt. Les séries que je propose en VBA sont très complètes donc je ne doute pas que vous parviendrez à vos fins à l'issue.
merci Stéphane pour ce cours très intéressant sur les boucles For
Je vous en prie Laurence. Je vous remercie également pour ce message en retour.
Bonjour Stéphane, voila une semaine que je travail VBA, je débute mais grâce à vous j'ai réussi à faire mon 1ier programme VBA.
Merci beaucoup :)
Merci à vous Nono 1975 d'avoir pris le temps de faire un message. Ce genre de retour est très gratifiant.
Oui c'est gratifiant , je comprends, vous devriez donner de vrai cours, vous avez une voie excellente pour travailler.
Merci infiniment. J'en donne en effet, quasiment au quotidien d'ailleurs.
l’explication est nettement claire, c'est plus que génial, merci beaucoup
Merci infiniment pour ce message sumaili lpatient.
Grand Merci pour vos efforts louables et vos explications claires.
C'est un plaisir Abdelaziz. Merci beaucoup pour ce message.
Bonjour Cher Professeur ! Je me suis mis à l'ouvrage, et refait totalement l'exercice, (je suis très bon...). J'en ai refait un ensuite à ma façon, et j'y suis parvenu !! Je suis hyper content !!!! Je vous souhaite une bonne continuation et une excellente journée ! Merci pour tous !
Bonsoir George, je n'en doutais pas ! D'où venait cette erreur 400, était ce dû, par le parcours d'une boucle à l'affectation d'une cellule avec un indice de ligne ou de colonne à 0 ?
Oui, tout à fait exact ! J'avais affecté un mauvais indice, d'ou erreur à chaque fois !! Pas toujours facile le VBA, il fonctionne très bien, mais une simple "virgule" fait tout rater parfois !! Dur dur....!! Mais cela est super quand même...!! Bonne soirée cher Professeur !!
Le code réplique exactement ce qu'on lui dit de faire. Pas évident parfois de s'apercevoir qu'on l'induit en erreur tellement la procédure semble logique. Personnellement, je teste chaque fragment de code avant de poursuivre le programme ce qui ne m'empêche pas parfois de perdre du temps pour résoudre l'erreur improbable générée. Merci à vous George et je vous souhaite une très bon Week End
merci pour cette formation ils nous aident plus, merci encore
Avec plaisir Pierrot. Merci à vous pour ce message en retour.
vraiment j'ai adoré cette vidéo bon courage Monsieur Stéphane merci beaucoup
Oui ici il s'agit d'automatiser le code et les actions grâce aux boucles de programmation en VBA Excel. Le fait de pouvoir réaliser une mise en forme automatique par détection systématique des bornes de tous les tableaux d'une feuille permet de montrer la puissance et l'intérêt de ces instructions en terme d'automatisation et de gain de temps. C'est moi qui vous remercie Abouomar Maghribi pour avoir pris le temps de faire un message.
vraiment merci beaucoup l’explication est très bien et tous vous vidéos
C'est un plaisir Kaw Ther. Merci beaucoup pour cet agréable message en retour.
Fantastique ! Il suffit (me semble-t-il) d'écrire un code similaire dans un module à part, de sorte à pouvoir mettre en forme rapidement tous ses nouveaux tableaux (quel que soit le fichier Excel). Énorme gain de temps lorsque l'on doit souvent créer de nouveaux tableaux. Un tout grand merci.
Oui parfaitement Marcus dans le modèle Excel Personal.xlsb. Le Gain de temps, je vous le confirme. C'est exactement le but de la manœuvre. Merci à vous.
you probably dont care but does any of you know a method to get back into an Instagram account??
I was stupid forgot the account password. I would appreciate any tricks you can offer me!
@Roberto Damian Instablaster =)
@Calvin Rocco thanks for your reply. I got to the site through google and im in the hacking process now.
Looks like it's gonna take quite some time so I will get back to you later when my account password hopefully is recovered.
@Calvin Rocco it worked and I finally got access to my account again. Im so happy!
Thank you so much, you really help me out !
facile a comprendre .Merci
C'est un plaisir Konan. Merci pour ce message.
Rebonjour Stéphane. Je vous serai gré de bien vouloir donner suite à ma demande dès vous serez en mesure de le faire. Merci!
Rebonjour Raoul. Je vous ai répondu.
bonjour je cherche à mettre des barre de données dans des cellules suivant les valeurs minimum et maximum qui varient suivant chaque ligne comment faire une macro VBA?
Bonjour Alexandre. Vous pouvez peut être essayer simplement d'appliquer des graphiques SparkLine dans vos cellules depuis le ruban Insertion.
J'ai une petite info ou astuce que j'ai mise sur mon fichier pour revenir à l'état d'origine sans devoir prendre le pinceau de mise en forme et qui préserve l'état des cellules (pourcent, monétaire ...) : j'ai fait un petit programme qui me remet les polices que j'ai choisi à une taille définie, en Bold=false, sans remplissage ni bordure. J'ai juste à ajouter un second bouton pour tout remettre en état après chaque test. Comme quoi vos enseignements portent à des initiatives de simplification. Merci pour tout.
Très belle mise en oeuvre qui plus est, adaptée à des besoins pratiques. Je vous remercie pour ces témoignages fort plaisants.
Bonjour! SVp ou pourrais je avoir le fichier de base de traitement?
Bonjour Raoul. Le fichier source est proposé au téléchargement à cette adresse, vers le début de la formation :
www.bonbache.fr/boucles-for-next-en-vba-excel-pour-traitements-automatises-125.html
je suis entrain de faire votre tuto,et la minute 15 quand il s'agit de mettre la couleur verte j'ai un message d'erreur(propriété ou méthode non géré par cet objet) et je suis coincer si vous pouviez éclaire ma lanterne je vous en serrais très reconnaissant .merci pour vos vidéos qui me font progresser par votre approche très détailler.
Bonjour Michel et merci pour votre message. Il doit y avoir un souci dans le nom de l'objet que vous exploitez ou de des propriétés. Je vous invite à consulter la formation détaillée à cette adresse :
www.bonbache.fr/boucles-for-next-en-vba-excel-pour-traitements-automatises-125.html
Tout le code y est donné.
Bonjour Monsieur Rossetti,
tout d'abord je vous remercie pour vos formations très efficaces.
J'ai suivi la formation sur la boucle For. J'ai écrit tout le code qui s'exécute bien étape par étape avec F8 mais qui bloque avec F5. je reçois le message suivant "Can't exécute code in break mode". L'aide visual basic n'étant pas très explicite pour moi, pourriez-vous s'il vous plaît m'indiquer comment résoudre le problème? Merci
Bonjour Doris et merci beaucoup pour votre message. Le mode arrêt se déclenche suite à une erreur de syntaxe ou lorsqu'une macro est déjà en cours d'exécution. Vous devez cliquer sur le bouton Stop (Réinitialiser) pour arrêter le débogueur. Dès lors, F5 fonctionnera jusqu'à la prochaine erreur.
Bonjour, je ne rajoute jamais la variable à côté du mots clé next dans les boucles for et foreach et je n'ai jamais eu de problèmes, est-ce facultatif ou il y a des cas où c'est vraiment essentiel ?
Aussi traitez-vous les modules de classe dans votre livre vba avancées ?
Merci d'avance et bon réveillon : )
Bonjour Jack. Le VBA est permissif mais ce n'est pas le cas d'autres langages. Il est donc préférable d'être puriste et de prendre les bonnes habitudes. Un programmeur doit être précis. Je traite les classes mais pas encore les modules de classe. Cela viendra. Je vous remercie beaucoup pour ce message et pour votre intérêt.
Bonjour, tout d'abords je souhaite vous remercier pour ces vidéos qui sont bien plus clair que des livres de cours.
Lorsque je souhaite lancer le programme pour mettre en forme les en tête de tableau qui ce trouve environ a la 14ème minutes je me retrouve avec une cette erreur :
"erreur d'exécution 1004" "Erreur définie par l'application ou par l'objet"
J'ai chercher d'où provient cette erreur mais je ne trouve pas auriez vous une idée d'où cela peut venir ?
Encore merci pour les vidéo.
Bonjour Hugolin. Merci pour ce message. Ce type d'erreur intervient principalement lors d'un conflit système a priori indépendamment du code que vous développez, dans la mesure ou vous avez bien déclaré et typé vos variables en suivant la procédure que je propose dans le pas à pas détaillé :
www.bonbache.fr/boucles-for-next-en-vba-excel-pour-traitements-automatises-125.html
Des guides sont proposés sur le Web. Je ne pourrais vous en dire plus sans être directement confronté au cas :
fr.repairmsexcel.com/blog/comment-reparer-une-erreur-dexecution-1004
help.xlstat.com/fr/6452-erreur-dexecution-1004-lacces-par-programme-au-projet
Gross merci pour votre temps et pour nous partager vos connaissances! j'ai besoin de copier une liste de la Colonne 1 de la Feuille 1 aux Colonnes 1, 2, 3 et 4 de la Feuille 2 (Ex : Feuille1 A1, A2, A3, A4 A,5…jusqu’à la dernière = Feuille2 A1, B1, C1, D1, A2, B2, C2, D2, A3, B3, C3, D3....jusqu’a la dernière, dans cette séquence. Avez-vous un vidéo qui puisse m’aider?
Bonjour Dora. Merci beaucoup pour ce message. Je n'ai pas de vidéo collant spécifiquement à votre demande. Mais il suffit d'engager une boucle sur la hauteur de la liste 1.
For i=1 To Valeur_Max
Sheets("Feuille2").cells(i,1).Value=Sheets("Feuille1").cells(i,1).Value
Sheets("Feuille2").cells(i,2).Value=Sheets("Feuille1").cells(i,2).Value
...
Next i
merci
Je vous en prie Karim
Bonjour Stéphane. J'ai un petit problème au début de cet exercice. Je teste la der-ligne qui me répond bien 21. Mais la der_colonne me répond 11 et non 10.
J'ai essayé de la "clearer" pour effacer toute valeur que ne je verrais pas, mais rien ne fait. J'ai toujours 11.
Sub boucles()
Dim der_ligne As Integer
Dim der_colonne As Integer
Dim tempo As Integer
Range("K:K").ClearContents
der_colonne = Cells.SpecialCells(xlCellTypeLastCell).Column
der_ligne = Cells.SpecialCells(xlCellTypeLastCell).Row
MsgBox der_ligne & " " & der_colonne
End Sub
Mon tableau est le vôtre téléchargé. Le dernier tableau se termine à la colonne J.
Pourriez-vous m'aider ? Un tout grand merci d'avance :-)
Bonsoir Patricia, je n'ai pas bien le temps de vous aiguiller ce soir. Avez-vous reproduit le code de la formation détaillée fournie à cette adresse ?
www.bonbache.fr/boucles-for-next-en-vba-excel-pour-traitements-automatises-125.html
@ J'ai retéléchargé le fichier à partir du site, réécrit le code et tout fonctionne parfaitement. Mon ordinateur devait être fatigué ;-) Merci vraiment pour votre réponse rapide et votre aide
Je vous en prie Patricia et félicitations pour la mise en oeuvre.
Bonjour, Je viens de découvrir vos séries de vidéos et je les trouve vraiment très bonnes, simples et TRES explicites, autant pour les novices que ceux ayant déjà quelques notions (je découvre bcp de choses).
Une question, j'ai pour habitude d'utiliser "Range("A" & Rows.Count).End(xlUp).Row" pour récupérer l'indice de la dernière ligne saisie d'un fichier, et pas conséquent connaître le nombre de lignes non vides.
Je ne connaissais pas votre méthode "cells.specialcells(xlcelltypelastcell).row. A priori ces 2 méthodes retournent la même valeur, est ce-qu'il y en a une préférable à une autre ?
Bonjour Paul et merci beaucoup pour votre message. C'est le principe même de la programmation, plusieurs méthodes et techniques permettent d'atteindre le même résultat. Dans la mesure où l'une n'est pas plus complexe que l'autre, c'est à l'utilisateur de choisir selon ses affinités.
Bonjour, Merci pour toutes ces vidéos très claires
J'ai une petite question. Pourquoi la variable 'Ligne' est compris comme une Ligne (Row) sans être déclaré en tant que telle? Le mot ligne est connu par VBA?
Bonjour Loïc. La variable Ligne n'est pas interprétée comme un objet Row soit une ligne en tant que telle. Elle est déclarée comme un entier. Ce sont tous les numéros de ligne qu'elle sert à passer en revue.
@ merci de cette réponse rapide. Mais je ne comprends pas comment est compris que Ligne passe les lignes en revue et pas autre chose...?
Ligne est une variable. Cette valeur incrémentée est passée à l'objet Cells : Cells(ligne,colonne). L'objet Cells désigne une cellule. Avec ces indices progressifs, ce sont toutes les cellules ciblées qui sont parcourues.
Bonjour Stéphane! j'espère que tu vas bien, j'aimérai connaitre le lien sur le tuto relatif au boucle While. merci!
Bonjour Monsieur. Voici le lien : www.bonbache.fr/boucles-for-next-en-vba-excel-pour-traitements-automatises-125.html. Désolé de vous poser cette question. Comme il n'est pas courant, pouvez-vous me confirmer que votre prénom est bien Ward ?
Pas exactement, Ward est juste un surnom, mon prénoms c'est Rock.
en réalité, je cherche à savoir comment fonctionne la boucle WHILE, afin de me permettre de mieux comprendre l'exercise sur le facturier automasé avec gestion de stocks
Rock n'est pas non plus un prénom courant. Enchanté donc. Je propose de nombreuses formations exploitant la boucle While en VBA Excel. Je vous suggère de taper les mots clés suivants : While Excel, dans la zone du petit moteur de recherche en haut à droite, sur le site Bonbache.fr. Ensuite, vous pourrez faire votre choix.
Merci professeur! je lance la recherche
Bonjour Monsieur pouvez me dire si parmi tous vos tutoriels si un d'entre eux expliquerait comment exemple en rapport avec cette vidéo. Mettre la première ligne du tableau à la place de la deuxième et la deuxième à la place de la première. Désolé pour le dérangement et bravo pour toutes vos explications !
Bonjour Jacques, je n'ai pas d’exemple précis à ce sujet. Mais avec les formations VBA, vous avez toutes les billes. Il s'agit de mémoriser les informations de la première et seconde ligne dans des variables et de les inscrire inversement dans les cellules. Je vous propose néanmoins plus simple,. Vous faites une macro automatique vous enregistrant en train de simuler ces actions, Couper, clic droit, insérer au dessus (par exemple). Après l'enregistrement, vous consultez le code (Alt + F11) et vous le prélevez.
Rossetti Stéphane comme d'habitude qu'elle réactivité. Bravo et merci. Dans le premier cas dois je utiliser une boucle ou pas du tout ?
Je vous en prie Jacques. Oui c'est préférable pour passer en revue plus facilement toutes les colonnes d'une ligne si vous connaissez leurs bornes, donc boucle For Next.
Bonjour Stéphane,Je vous remercie pour toutes ces vidéos qui me sont d'une énorme utilité. Alors j'ai refais l'exercie en essayant d'aller plus loin et de mettre une somme en dessous de la colonne prix TTC. En revanche je n'y arrive pas du tout. Pouvez-vous m'éclaire ?Voici le code: Sub calcul()Dim ligne As Integer: Dim colonne As Integer
Dim Der_ligne As Integer: Dim Der_colonne As IntegerDer_ligne = Cells.SpecialCells(xlCellTypeLastCell).Row
Der_colonne = Cells.SpecialCells(xlCellTypeLastCell).Columnligne = 1: colonne = 1
For ligne = 1 To Der_ligne For colonne = 1 To Der_colonne
If (Cells(ligne + 1, colonne).Value = "" And Cells(ligne, colonne + 1).Value = "" And Cells(ligne, colonne).Value "") Then
Cells(ligne, colonne).xlUp.Select
Selection.Worksheet.Function.Sum
End If
Next colonneNext ligne
End Sub
Bonjour Guillaume et merci pour votre retour, l'emploi de l'objet Selection en tant que Range est intéressant pour désigner la plage de la somme, il n'y a donc plus qu'à l'exécuter mais en sélectionnant la cellule du résultat :
cells(ligne,colonne).Value = Application.WorksheetFunction.Sum(Selection)
Bravo! Très pratique. Mais beaucoup de chose a retenir sauf réutilisation (insertion ) du code tout fait ?
Merci
Merci à vous Nour-eddine pour ce message très agréable en retour.
Bonjour ! j'aimerais savoir si le langage VBA fonctionne avec "OpenOffice" car je n'ai plus excel ! j'avais une version (gratuite) sur un vieux PC (qui à rendu l'âme) et pour l'instant pas les moyens financier de l'acheter, j'ai découvert il y à quelques jours vos "tutos" que je trouve vraiment bien ! c'est bien expliqué ! je ne suis pas dans le domaine ! et j'arrive à comprendre facilement ! je me servais beaucoup d'Excel pour mes statistiques !
j'avais un programme VBA qu'un ancien collègue de travail m'avait créé en 2008 ! j'ai une sauvegarde mais je ne sais pas comment faire pour qu'elle fonctionne sur Openoffice ! encore un grand merci pour ce que vous faites !
Bonjour Laurent. Votre message est un réel plaisir et je vous remercie beaucoup pour ces compliments. Malheureusement, Microsoft est propriétaire du VBA, donc il va de soi que les versions libres et openOffice ne le proposent pas. Encore merci pour votre attention.
Je suis encore là Monsieur Stéphane,
Dans l'application de la seconde boucle For, j'ai suivi le tuto malheureusement j'obtiens une erreur de type "438 propriété ou méthode non gérée par cet objet" dont je ne comprends pas l'origine.
Voici ci-dessous le code à cet effet
Sub boucles()
Dim ligne As Integer: Dim colonne As Integer
Dim der_ligne As Integer: Dim der_colonne As Integer
der_ligne = Cells.SpecialCells(xlCellTypeLastCell).Row
der_colonne = Cells.SpecialCells(xlCellTypeLastCell).Column
For ligne = 1 To der_ligne
For colonne = 1 To der_colonne
If (ligne > 1) Then
If (Cells(ligne - 1, colonne).Value = "" And Cells(ligne, colonne).Value "") Then
With Cells(ligne, colonne)
.Borders(xlEdgeTop).LineStyle = xlContinuous
.Borders(xlEdgeTop).weigth = xlThick
.Font.Bold = True
.Interior.Color = RGB(70, 170, 30)
End With
End If
End If
Next colonne
Next ligne
End Sub
Bonjour Monsieur, vous avez une erreur sur le nom de la propriété pour l'épaisseur du trait, il s'agit de Weight et non de weigth. Lorsque VBA ne transforme pas la casse, c'est que la propriété ou méthode n'est pas reconnue.
@ Bonjour monsieur Stéphane, effectivement j'ai corrigé l'erreur. Tout marche bien maintenant.
Infiniment merci pour votre aide.
@@bienvenuesoubabenawan Je vous en prie Monsieur.
Bonjour Stéphane et les autres internautes. Merci pour votre vidéo. Il y a une chose que je ne comprends pas dans cette vidéo. Pourquoi n'avez vous pas défini les variables ligne et column :
Ligne = cells.row
colonne = cells.column
Comment excel fait-il pour comprendre l'instruction:
for colonne = 1 to der_colonne
s'il ne sait pas que colonne = column
Si quelqu'un a la réponse, ça m'intéresse,
Merci d'avance !
Bonjour Baptiste. Les variables ligne et colonne sont bien déclarées. Les variables der_ligne et der_colonne sont initialisées sur les bornes de la feuille, jusqu'à la dernière cellule non vide. Donc l'instruction for colonne = 1 to der_colonne permet de faire varier l'indice de colonne du premier au dernier recensé. On fait de même pour l'indice de ligne : for ligne = 1 to der_ligne. De cette manière, toutes les cellules utiles sont passées en revue. Vous avez toutes les explications en pas à pas détaillé à cette adresse :
www.bonbache.fr/boucles-for-next-en-vba-excel-pour-traitements-automatises-125.html
Bonjour, j'ai bien compris toutes vos vidéos mais n'arrive pas à les mettre en pratique. J'ai un tableau de commandes. Chaque commande à plusieurs lignes mais aucune n'a le meme nombre de ligne. Chaque commande porte un numéro. Colonne A = nom du client, colonne B = numéro de facture, colonne C = montant HT, colonne D = TVA. Je souhaite faire une macro pour insérer deux lignes au dessous à chaque fois que le numéro de facture change. Ensuite, sur ces deux lignes, je souhaite automatiser la saisie comptable avec les contreparties. Pouvez-vous m'aider ????? MERCI
Bonjour Anne, une boucle While pourrait vous aider.
While (cells(ligne, indice_colonne) "")
ligne=ligne+1
Wend
Au sortir de la boucle, l'indice mémorisé dans la variable ligne est celui de la fin de votre tableau, soit la position à partir de laquelle vous pouvez débuter l'insertion automatisée. J'aimerais vous aider plus, mais difficile de trouver du temps. Et même si je vous demandais plus de détail sur votre projet, je ne pourrais me pencher dessus avant quelques semaines.
Bonjour
j'ai suivi votre vidéo et recopié votre exercice mais au 2eme test il me renvoie à la case A1 au lieu de B4 pourquoi
malgré cela c'est un plaisir de suivre vous explications
Pouvez vous copier le code que vous avez saisi ? En tous cas merci pour votre message.
Dim ligne As Integer: Dim colonne As Integer
Dim der_ligne As Integer: Dim der_colonne As Integer
der_ligne = Cells.SpecialCells(xlCellTypeLastCell).Row
der_colonne = Cells.SpecialCells(xlCellTypeLastCell).Column
For ligne = 1 To der_ligne
For colonne = 1 To der_colonne
If (Cells(ligne, colonne).Value " ") Then
MsgBox ligne & " " & colonne
Exit Sub
End If
Next colonne
Next ligne
je travaille sous excel 2016
merci
Oui en effet, la boucle consiste à détecter les bornes des tableaux sur la feuille de calcul en parcourant tous les indices de lignes et colonnes jusqu'aux derniers. Et le test consiste à vérifier la première cellule non vide "" pour se positionner sur la première cellule d'entête détectée. Le souci vient du critère, vous avez écrit le test If (Cells(ligne, colonne).Value " ") Then et il y a un espace entre les deux guillemets. Comme aucun cellule n'est égale à un espace, ce test est toujours vrai. Il faut écrire strictement If (Cells(ligne, colonne).Value "") Then, en supprimant l'espace entre les guillemets donc pour bien détecter la première cellule non vide.
merci cela fonctionne. j'aurai pu cherché longtemps
en tout cas vos vidéos sont excellentes et bien expliquées
Merci beaucoup
Bonjour cher professeur ! J'ai refait à l'intégrale l'exercice, et pourtant une erreur 400 apparaît à chaque fois que je veux envoyer la boucle !! J'ai bien vérifier, car le VBA n'est point facile, il suffit d'un rien.....! Mais là j'avoue ne plus rien découvrir ! D'autant plus que le débogage pas à pas, ne fonctionne pas, alors je ne sais ou j'ai fait l'erreur !!....Pour le reste, ce fut un plaisir de reprendre le VBA, même si celui-ci n'est point facile à digérer....Merci !!
Bonsoir George, les causes d'une erreur 400 peuvent être multiples. Comme ce code détecte automatiquement les bornes des tableaux présents dans la feuille pour les parcourir et les mettre en forme, explicitement différemment pour les titres d'ailleurs, il suffirait qu'une ligne ou une colonne soit affectée à l'indice 0 (Ce qui n'existe pas dans une feuille Excel), dans les boucles par le jeu des incrémentations, pour que l'affection d'une propriété de cellule renvoie ce type d'erreur. Dans la double boucle While, il faudrait temporairement enlever le code pour déjà tester son bon fonctionnement, juste après l'initialisation des variables :
While (ligne < der_ligne)
colonne = 1
While (colonne < der_colonne)
MsgBox (ligne & "-" & colonne)
colonne = colonne + 1
Wend
ligne = ligne + 1
Wend
Pour vérifier dans un premier temps que les valeurs renvoyées pour les lignes et colonnes sont cohérentes.
Je vérifie et vous tient au courant !! Merci !!
Bonjour Stéphane,
J'essaye depuis maintenant 1 semaine de créer une macro pour me faire gagner un temps précieux au travail.
Je dois automatiser une tache longue et répétitif : la valeur cible.
Ainsi j'ai trouvé le code suivant, me permettant donc de faire une valeur cible sur la ligne 13.
Sub ValeurCible()
' V13 cellule contenant la formule
' X13 cellule contenant la valeur que la formule doit atteindre
' I13 cellule contenant la variable à modifier
Range("V13").GoalSeek Goal:=Range("X13").Value, ChangingCell:=Range("I13")
End Sub
Sauf que cela me fait seulement la ligne 13.
Après de longues minutes à essayer de mettre une boucle, et en ayant suivi de nombreux tutos, je n'y suis pas arrivé...
Ainsi, j'aimerai une boucle allant de la cellule V13 à V213.
Avez-vous une idée de quel boucle dois-je utiliser ? Et comment faire ?
Milles mercis par avance !
Martin
Bonjour Martin, la valeur cible consiste à résoudre une équation à une ou plusieurs inconnues. C'est un problème que j'ai résolu sur une demande spécifique, le distributeur de billets. En fonction de la somme demandée inscrite dans une cellule, et en fonction des billets encore disponibles en banque, le code doit fournir en retour la combinaison de billets permettant d'atteindre le solde demandé :
www.bonbache.fr/distributeur-de-billets-en-visual-basic-excel-143.html
La clé est l'imbrication de boucles pour tester toutes les valeurs jusqu'à trouver celles qui matchent.
Re-bonjour Stéphane,
Je vous remercie de votre réponse.
Il me semble que j'ai mal expliqué mon problème.
Je dois régulièrement remplir des fichiers Excel avec des remises plus ou moins différentes pour mes clients tous les mois.
J'ai environ 120 produits à faire à chaque fois, et je dois donc faire :
Analyse Scénarios - Valeur Cible, et changer les 3 cases; et faire cette manip 120 fois.
J'aurai aimé gagner du temps, et automatiser ou faire en sorte que toutes les colonnes des 120 produits se fassent d'un coup.
J'ai donc une macro qui fonctionne mais uniquement sur la ligne 13.
Sub ValeurCible()
' V13 cellule contenant la formule
' X13 cellule contenant la valeur que la formule doit atteindre
' I13 cellule contenant la variable à modifier
Range("V13").GoalSeek Goal:=Range("X13").Value, ChangingCell:=Range("I13")
End Sub
Je cherche donc à incorporer une boucle afin de pouvoir faire les 120 fiches produits d'un coup.
Je vous remercie par avance !
Martin
En mettant en pratique ce qu'enseigne cette formation sur les boucles For Next vous devriez arriver à vos fins. Plutôt que d'utiliser l'objet Range pour désigner V13 par exemple, vous pouvez exploiter l'objet Cells(indice_ligne,22), 22 pour V et faire varier l'indice de ligne 120 fois : for indice_ligne=13 To 132 ... Le traitement doit être intégré dans la boucle et chaque cellule adapté avec l'indice de ligne en variable et l'indice de colonne fixe.
Bonjour Stéphane,
Je vous remercie de votre réponse.
Je débute juste avec les macros, et le VBA reste assez compliqué à comprendre. J'ai dû mal à comprendre toutes vos explications.
Si je comprends bien, je dois utiliser For Next pour la boucle.
Est-ce que je peux garder l'objet range ? Ou je dois indéniablement passer par Cells?
Merci par avance.
Cells est plus approprié car avec une boucle For Next, on peut ainsi faire varier son indice de ligne 120 fois comme vous le souhaitez afin d'intégrer toutes les cellules dans un seul traitement. C'est exactement ce que propose cette formation sur laquelle nous commentons.