Comment faire une boucle à longueur variable for... to
Résolu
Tensoplast
-
Tensoplast Messages postés 3 Statut Membre -
Tensoplast Messages postés 3 Statut Membre -
Bonjour,
Je me permets de m'adresser à vous car je ne trouve pas de solution à mon problème.
En fait, j'ai un tableau dans lequel j'exécute une fonction split.
J'ai un texte très long dans une cellule que je souhaite spliter en plusieurs cellules.
Tout va bien jusque là.
Seulement, j'aimerais à l'aide d'une macro que tout le tableau soit vérifier si il ne doit pas spliter une cellule.
J'ai donc une boucle mais qui devrait être variable.
Voilà mon code :
Dans le fonctionnement du code, il commence au départ par rechercher l'existence d'une valeur dans une autre feuille afin d'exécuter la suite ou non.
Dans le cas où ma valeur est trouvée, il insère une ligne dans mon tableau et rajoute du texte dans la colonne 1 et 4.
J'ai une formule dans mon tableau qui rempli la colonne 2 automatiquement en fonction de ces variables (colonne 1 et 4).
La macro splitest fonctionne très bien mais comme elle insère des lignes dans mon tableau lors de son exécution, la taille de mon tableau initial varie.
Du coup, ma première macro s'arrête trop tot. Il faudrait pouvoir réactualiser la boucle en cours de fonctionnement... Mais je ne sais pas comment faire.
J'espère avoir pu m'exprimer correctement, ce n'est pas simple ^^
Merci
EDIT : Ajout du LANGAGE dans les balises de code (la coloration syntaxique).
Explications disponibles ici :
https://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code
Merci d'y penser dans tes prochains messages.
Je me permets de m'adresser à vous car je ne trouve pas de solution à mon problème.
En fait, j'ai un tableau dans lequel j'exécute une fonction split.
J'ai un texte très long dans une cellule que je souhaite spliter en plusieurs cellules.
Tout va bien jusque là.
Seulement, j'aimerais à l'aide d'une macro que tout le tableau soit vérifier si il ne doit pas spliter une cellule.
J'ai donc une boucle mais qui devrait être variable.
Voilà mon code :
Sub textedescauto() Dim n As Integer Dim derlig As Variant Dim recherche As Variant Dim valeura As String derlig = Sheets("Prix NET").Range("tableau1").Find("*", , , , , xlPrevious).Row 'Call Module3.EnregistrerTableau1 For n = 15 To derlig recherche = Application.VLookup(Sheets("Prix NET").Range("A" & n).Value, Sheets("Textes descriptifs").Range("Tableau3"), 1, False) On Error Resume Next If recherche = Error Then Else valeura = Sheets("Prix NET").Range("a" & n).Value If UCase(Sheets("Prix NET").Range("A" & n).Value) = UCase(recherche) Then Rows(n + 1).Insert Range("A" & n + 1).Value = Range("A" & n).Value Range("D" & n + 1).Value = "TD" n = n + 1 y = n Call Module3.splittestprovi End If End If derlig = Sheets("Prix NET").Range("tableau1").Find("*", , , , , xlPrevious).Row Next n End Sub Sub splittestprovi() 'Scinde les cellules tous les ALT-Enter 'insère une ligne dans le tableau pour les nouvelles cellules 'insère une ligne dans la page proposition pour ne pas que le tableau soit trop petit Dim txt As String Dim i As Integer Dim n As Integer Dim Fullname As Variant Dim vide As Variant 'déverouille la feuille 'bloque le screenupdating pour ne pas ralentir et voir l'écran bouger tout seul Application.ScreenUpdating = False txt = Range("B" & y).Value Fullname = Split(txt, Chr(10)) vide = " " For n = y To UBound(Fullname) + y Rows(n + 1).Insert Sheets("Proposition").Rows(n + 1).Insert Cells(i + y, 2).Value = Fullname(i) i = i + 1 Next n 'réactive le screenupdating Application.ScreenUpdating = True 'reverouille la feuille End Sub
Dans le fonctionnement du code, il commence au départ par rechercher l'existence d'une valeur dans une autre feuille afin d'exécuter la suite ou non.
Dans le cas où ma valeur est trouvée, il insère une ligne dans mon tableau et rajoute du texte dans la colonne 1 et 4.
J'ai une formule dans mon tableau qui rempli la colonne 2 automatiquement en fonction de ces variables (colonne 1 et 4).
La macro splitest fonctionne très bien mais comme elle insère des lignes dans mon tableau lors de son exécution, la taille de mon tableau initial varie.
Du coup, ma première macro s'arrête trop tot. Il faudrait pouvoir réactualiser la boucle en cours de fonctionnement... Mais je ne sais pas comment faire.
J'espère avoir pu m'exprimer correctement, ce n'est pas simple ^^
Merci
EDIT : Ajout du LANGAGE dans les balises de code (la coloration syntaxique).
Explications disponibles ici :
https://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code
Merci d'y penser dans tes prochains messages.
A voir également:
- Comment faire une boucle à longueur variable for... to
- Downloader for pc - Télécharger - Téléchargement & Transfert
- Qwerty to azerty - Guide
- Idm for mac - Télécharger - Téléchargement & Transfert
- Instagram for pc - Télécharger - Divers Communication
- Pc qui s'allume et s'éteint en boucle - Forum Matériel & Système
2 réponses
Bonjour,
Avec une variable déclarée au niveau module, tu peux la "réduire" dans toutes les procédures du module.
Regarde cet exemple, dans un nouveau classeur :
Avec une variable déclarée au niveau module, tu peux la "réduire" dans toutes les procédures du module.
Regarde cet exemple, dans un nouveau classeur :
Option Explicit Dim i As Integer Sub test() Dim cpt As Integer, monBool As Boolean monBool = False For i = 1 To 5 Test_2 monBool MsgBox "i vaut : " & i cpt = cpt + 1 If cpt = 3 Then monBool = True Next End Sub Sub Test_2(Flag As Boolean) If Not Flag Then i = 1 End Sub
J'ai du mal à comprendre ton code, j'ai testé, mais je comprends pas bien l'application du Flag.
Je comprends la logique de ton code qui maintient la valeur du i basse de manière à ne pas avancer dans le tableau.
Par contre, en quelque sorte ce que je souhaiterais faire varier moi c'est le "5" quand tu dis
for i = 1 to 5
C'est ce 5 qui change au fur et a mesure que j'ai inséré des lignes dans mon tableau. C'est à dire qu'après avoir inséré 10 lignes par exemple, il faudrait que je puisse transformer mon for i = 1 to 5 en
for i = 1 to 15
et qu'il continue à exécuter ma macro jusque 15 et pas jusque 5.
Au besoin, je peux éventuellement fournir mon fichier en mp
merci
Je comprends la logique de ton code qui maintient la valeur du i basse de manière à ne pas avancer dans le tableau.
Par contre, en quelque sorte ce que je souhaiterais faire varier moi c'est le "5" quand tu dis
for i = 1 to 5
C'est ce 5 qui change au fur et a mesure que j'ai inséré des lignes dans mon tableau. C'est à dire qu'après avoir inséré 10 lignes par exemple, il faudrait que je puisse transformer mon for i = 1 to 5 en
for i = 1 to 15
et qu'il continue à exécuter ma macro jusque 15 et pas jusque 5.
Au besoin, je peux éventuellement fournir mon fichier en mp
merci