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
- Le fichier contient un programme écrit en python. le programme construit un mot secret mais il ne l'affiche pas. modifiez ce programme afin que à chaque itération de la boucle : la variable a augmente de 2 la variable b diminue de 1 ajoutez une instruction pour faire afficher le mot secret construit. quel est ce mot secret ? ✓ - Forum Python
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