VBA créer une boucle ???
Résolu/Fermé
A voir également:
- VBA créer une boucle ???
- Créer un compte google - Guide
- Comment créer un groupe whatsapp - Guide
- Créer une adresse hotmail - Guide
- Créer un compte gmail - Guide
- Créer une story facebook - Guide
8 réponses
Utilisateur anonyme
6 mars 2012 à 20:55
6 mars 2012 à 20:55
Bonjour,
Exemple de boucle :
Cdt
Lupin
Exemple de boucle :
Sub Boucle() Dim Limite As Long, Boucle As Long ' Trouve la fin de la boucle Limite = ActiveSheet.Range("B65535").End(xlUp).Row Range("B1").Select For Boucle = 0 To Limite ' Si la cellule Bi est non vide (où i est représenté ici par Boucle) If (ActiveCell.Offset(Boucle, 0).Value <> "") Then ' Alors dans la cellule de gauche (Ai) affecte la valeur courante de Bi ActiveCell.Offset(Boucle, -1).Value = _ ActiveCell.Offset(Boucle, 0).Value End If Next Boucle End Sub
Cdt
Lupin
Bonjour,
une autre solution qui copie les valeur de la colonne B dans la colonne A sans laisser de cellules vides:
Bonne suite
une autre solution qui copie les valeur de la colonne B dans la colonne A sans laisser de cellules vides:
Dim Derlig As Long, i As Long, j as Long Derlig = Range("B" & Rows.Count).End(xlUp).Row j=1 With Sheets("feuil2") For i= 1 To Derlig If .Cells(i,2).Value <> " Then .Cells(j,1).Value= .Cells(i,2).Value j=j+1 End If Next i
Bonne suite
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 754
Modifié par pijaku le 7/03/2012 à 10:17
Modifié par pijaku le 7/03/2012 à 10:17
Bonjour tout le monde,
Une version qui, en cas de moultes lignes, permettra d'accélerer le timing en utilisant des variables tableaux :
Cordialement,
Franck P
Une version qui, en cas de moultes lignes, permettra d'accélerer le timing en utilisant des variables tableaux :
Sub RegroupeEnA() Dim TablColB, TablColA(), i As Long, Lig As Long TablColB = Range("B1", Range("B" & Rows.Count).End(xlUp)) 'ici commence le travail en mémoire... For i = LBound(TablColB) To UBound(TablColB) If TablColB(i, 1) <> "" Then ReDim Preserve TablColA(Lig) TablColA(Lig) = TablColB(i, 1) Lig = Lig + 1 End If Next 'restitution Range("A1").Resize(UBound(TablColA), 1) = Application.Transpose(TablColA) End Sub
Cordialement,
Franck P
Merci Pijaku ça marche mais serai t'il possible plutot d'avoir
Function RegroupeEnA(..................
End Function
Function RegroupeEnA(..................
End Function
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 754
7 mars 2012 à 11:44
7 mars 2012 à 11:44
ça marche mais serai t'il possible plutot d'avoir
Function RegroupeEnA(..................
End Function
J'ai envie de dire "Why Not?"...
Après tout dépends de ce que tu veux mettre en paramètre de cette fonction...
par exemple avec en paramètres :
- TablB : variable tableau contenant les données de ta colonne "à trous" (ici Colonne B)
- ColRestit : variable String contenant la lettre de la colonne de restitution des donénes (ici colonne A)
What else?
Function RegroupeEnA(..................
End Function
J'ai envie de dire "Why Not?"...
Après tout dépends de ce que tu veux mettre en paramètre de cette fonction...
par exemple avec en paramètres :
- TablB : variable tableau contenant les données de ta colonne "à trous" (ici Colonne B)
- ColRestit : variable String contenant la lettre de la colonne de restitution des donénes (ici colonne A)
Sub Appel_Fonction_RegroupeEnA() Dim TablB, ColRestit As String 'ici tu remplis la variable tableau avec les données de la colonne B TablB = Range("B1", Range("B" & Rows.Count).End(xlUp)) 'tu choisis ta colonne de restitution ColRestit = "A" 'et tu appelles ta fonction RegroupeEnA TablB, ColRestit End Sub Function RegroupeEnA(TablColB, Col As String) Dim TablColA(), i As Long, Lig As Long 'ici commence le travail en mémoire... For i = LBound(TablColB) To UBound(TablColB) If TablColB(i, 1) <> "" Then ReDim Preserve TablColA(Lig) TablColA(Lig) = TablColB(i, 1) Lig = Lig + 1 End If Next 'restitution Range(Col & "1").Resize(UBound(TablColA), 1) = Application.Transpose(TablColA) End Function
What else?
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 754
7 mars 2012 à 15:13
7 mars 2012 à 15:13
Peut être souhaites tu réaliser une fonction personnalisée qui fonctionne dans ta feuille, sans appel par VBA.
Alors :
Et donc dans ta feuille, il suffit de saisir en A1 :
=RegroupeEnA(B$1:B$100;LIGNE(A1)-1)
et étirer cette formule vers le bas.
Dès que tu vois un 0 tu as fini...
Alors :
Function RegroupeEnA(Plage As Range, Ligne As Long) Dim Tabl(), i As Long, Lig As Long Dim PremLig As Long, DrLig As Long, Col As String Col = Split(Plage.Address, "$")(1) PremLig = Left(Split(Plage.Address, "$")(2), 1) DrLig = Split(Plage.Address, "$")(4) ReDim Tabl(DrLig - 1) Lig = 0 For i = PremLig To DrLig If Range(Col & i).Value <> "" Then Tabl(Lig) = Range(Col & i).Value Lig = Lig + 1 End If Next For i = LBound(Tabl) To UBound(Tabl) Debug.Print Tabl(i) Next RegroupeEnA = Tabl(Ligne) End Function
Et donc dans ta feuille, il suffit de saisir en A1 :
=RegroupeEnA(B$1:B$100;LIGNE(A1)-1)
et étirer cette formule vers le bas.
Dès que tu vois un 0 tu as fini...
Chris 94
Messages postés
50978
Date d'inscription
mardi 8 janvier 2008
Statut
Modérateur
Dernière intervention
17 février 2023
7 334
7 mars 2012 à 15:23
7 mars 2012 à 15:23
Salut,
Faut le rendre quand ?
Faut le rendre quand ?
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 754
7 mars 2012 à 15:27
7 mars 2012 à 15:27
Salut Chris,
Merci de ta visite.
J'ai initialement pensé à effacer mes réponses, mais bon, ça peux toujours servir à quelqu'un, ne serait ce qu'à son prof...
A+
Merci de ta visite.
J'ai initialement pensé à effacer mes réponses, mais bon, ça peux toujours servir à quelqu'un, ne serait ce qu'à son prof...
A+
Chris 94
Messages postés
50978
Date d'inscription
mardi 8 janvier 2008
Statut
Modérateur
Dernière intervention
17 février 2023
7 334
7 mars 2012 à 15:27
7 mars 2012 à 15:27
;-)
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 754
7 mars 2012 à 15:39
7 mars 2012 à 15:39
c'est pour améliorer mon travail au sein de mon entreprise
C'est pour cela que tu créées des sujets multiples lorsque tu as une réponse???
C'est pour cela que tu ne dis mas merci lorsque le boulot t'arrives tout cuit dans le bec???
Ma question : tu n'as que ça a faire de ta journée???
C'est pour cela que tu créées des sujets multiples lorsque tu as une réponse???
C'est pour cela que tu ne dis mas merci lorsque le boulot t'arrives tout cuit dans le bec???
Ma question : tu n'as que ça a faire de ta journée???
Chris 94
Messages postés
50978
Date d'inscription
mardi 8 janvier 2008
Statut
Modérateur
Dernière intervention
17 février 2023
7 334
Modifié par Chris 94 le 7/03/2012 à 15:40
Modifié par Chris 94 le 7/03/2012 à 15:40
Il n'y pas de quoi... Et vous êtes nombreux à améliorer votre travail au sein de l'entreprise ?
6 mars 2012 à 21:12
, je ne comprends pas le tiret a la fin de " ActiveCell.Offset(Boucle, -1).Value = _"
6 mars 2012 à 21:18
Le tiret veut dire [ continue avec la ligne suivante ]
l'équivalent serait :
ActiveCell.Offset(Boucle, -1).Value = ActiveCell.Offset(Boucle, 0).Value
Cdt
Lupin