Vous utilisez un navigateur obsolète. Il se peut que ce site ou d'autres sites Web ne s'affichent pas correctement. Vous devez le mettre à jour ou utiliser un navigateur alternatif.
Voici mon problème
Dans une colonne de chiffres, je voudrais pouvoir selectionner les chiffres inférieur à 100 pour pouvoir les exporter dans une autre feuille
1 à exporter
2 à exporter
3 à exporter
55 à exporter
120 Ce ne numéro ne doit pas etre pris en compte
101 Ce ne numéro ne doit pas etre pris en compte
53 à exporter
4 à exporter
152 Ce ne numéro ne doit pas etre pris en compte
9 à exporter
189 Ce ne numéro ne doit pas etre pris en compte
Si cela pouvait fonctionner en VBA par un simple clic sur un bouton ce serait super.
Private Sub CommandButton1_Click()
Dim Cell As Range
Dim intLigne As Integer
With Worksheets('Copie_100')
For Each Cell In Range(Cells(1, 1), Cells(Cells(65536, 1).End(xlUp).Row, 1))
If Cell.Value < 100 Then
intLigne = intLigne + 1
.Cells(intLigne, 1) = Cell
End If
Next Cell
End With
End Sub
car j'aime lire les postes et voir comment j'aurai fait afin de m'améliorer.
mais comme beaucoup de debutant (je pense) je me suis arrété à l'utilisation des boucle for i qui pour moi sont plus simple à penser
exemple :
Sub toot()
Dim u As Integer
For i = 1 To Sheets(1).Range('A6500').End(xlUp).Row
If Sheets(1).Range('a' & i).Value < 100 Then
u = Sheets(2).Range('A65000').End(xlUp).Row + 1
Sheets(2).Range('a' & u) = Sheets(1).Range('a' & i).Value
End If
Next i
End Sub
qui marche mais pas terible car si je clique plusieur x j'ai des doublon et si je veux corriger ce bug je dois encore ajouter une boucle For to pour regarder dans la sheet(2) .
face à ce petit bout de code qu'il ta falu pour un truck qui ne fait pas de doublon. je suis admiratif et curieux . (si tu veux me commenter tout le code je serais ravi .
Il existe plusieurs façon de pointer sur une cellule.
Range('B4') ou
Cells(4,2): c-a-d No de (ligne, colonne)
Je préfère utiliser la deuxième plus souvent parce qu' elle utilise que des nombres. Plus de 'flexibilité' ou plus facile a utiliser avec des variables compteur par exemple.
Maintenant, lorsque l'on veut avoir un plage de données avec Range on écrit par exemple: Range('B422'). Si il faut que tu veuille mettre des variable ds cet énoncé, tu dois faire des pieds et des main pour y arriver. Je ne te t'en dis pas plus la dessus. Maintenant, pour obtenir la même plage mais avec Cells tu dois l'écrire ainsi:
Range(Cells(4,2), Cells(22,4)) 'n'oublie pas (Ligne, Colonne)'
Bon, la partie Cells(65536, 1).End(xlUp).Row, c'est l'équivalent de faire dans le chiffier Ctrl + Fleche vers le Bas. Et si tu pars de la derniere cellule de la colonne A soit la 65536, tu ferais Crtl + Fleche vers le Haut. Donc ça sert a trouver la premiere ou derniere instance ( cellule) de ta plage. Très pratique. Donc pour reproduire cela en VBA tu écris: Cells(65536, 1).End(xlUp) et une fois faite, ce que cette action cherche c'est le no de la ligne. '.Row'
Pour ce qui est du reste du code, j'espere que les pro vont me corriger si je ne donne pas les bonnes informations. Merci a l'avance.
Cette ligne With Worksheets('Copie_100')
C'est comme dire de mettre en mémoire cette feuille.
Dans mon exemple j'utilise une boucle 'For Each ' qui vient a dire Pour chaque. Normalement on pourrais exprimer cette boucle comme ceci: Pour chaque élément (éléments que tu dois les définir comme Cell ds mon ex) dans ceci (ds mon ex une plage de données) tu fera les choses suivantes. Et bien sur Next élément. En passant, une des avantages de cette boucles consiste a ne pas utiliser de compteur supplémentaires. Les compteurs ralentissent une boucle. J'ai faillit oublier. Yu vois que je ne pointe jamais sur la 'feuil1'. Ce n'est pas nécessairement une bonne chose. VBA suppose que je pointe sur la feuille active en l,occurence la 'Feuil1' Si, a un moment tu fais du code ou tu dois pointer dans un fichier qui contient 30 feuilles alors.... Pour bien faire j'aurais du ecrire:
Ceci dit, pour la partie du if je crois que ça va pour toi. La partie qui dois te tracasser est probablement celle-ci:
Code:
.Cells(intLigne, 1) = Cell
(C'est long écrire ! pffff)
Au début je t'ai dis que j'ai dis ds le code de mettre en mémoire la feuille Copie_100 et bien s'est ici que ça sert. En gros j'aurais pu écrire:
Code:
Worksheets('Copie_100').Cells(intLigne, 1) = Cell
Et finalement, la variable Cell que j'ai déclarer comme Range, si tu la met comme variable espion et que tu vas voir dedans, tu verra quel ne contient pas que la valeur d'une cellule, mais d'ou elle vient .... etc.
Je pourrais en écrire d'avantage, mais je suis essouflé. Plus simple sur le chat technique.
surtout pour la feuille active non énoncé car c'est là ou je bloquais le plus.
grace à tes explication j'ai capté pourquoi ma macro fesait des doublon
Sub toot()
Dim u As Integer
For i = 1 To Sheets(1).Range('A6500').End(xlUp).Row
If Sheets(1).Range('a' & i).Value < 100 Then u = u + 1
Sheets(2).Range('a' & u) = Sheets(1).Range('a' & i).Value
End If
Next i
End Sub
sinon le cells() permet de boulé en ligne et en collone contrairement a range qui ne boucle quand ligne.
je vais essayer de me mettre à ce genre de boucle for each (je ne vous parle pas des do loop, while wend, que je n'ai jamais utilisé!!)
chaque chose en son temps.
Pour ce qui est des boucle Do, While, se sont des boucles qui n'utilise pas de compteur comme condition de sortie. Tu peux en insérer dedans des conditions (IF) qui te permettre de sortir de la. En passant, il existe une commande qui permet de sortir d'une boucle avant la fin. Exit. Tu peux faire un Exit Do, ou encore Exit For et même Exit Sub. Ceci dis, La valeur de ces boucles te permettent de passer en paramettre une condition logique qui dicte la boucle quand elle doit se terminer. La réponse de cette condition peut être soit TRUE ou FALSE. Donc deux exemple très simple:
Code:
Do
x = x + 1
Loop Until x = 3
While x < 3
x = x + 1
Wend
Bon, je t'en donne volontier un autre bout une autre fois.
encore merci Hellboy, effectivement je pense qu'a l'occation j'aimerais reprendre ce genre d'info
car là j'ai compris que grace à des do loop ou While Wend, je vais pouvoir sortir d'une boucle en limitant un compteur ou autre.
mais je n'ai pas compris la difference entre ses boucles car j'imagine que cela doit etre plus pratique d'utiliser l'une plutot que l'autre selon le contexte.
Et bien je ne suis pas pro, mais ce que je peux te dire est que l'une vérifie la condition avant de rentrer dans la boucle et l'autre le fait à la sortie. Je crois que l'avantage dépend plus du contexte.
Si je reprend les exemples tu va comprendre:
Code:
Dim x As Integer
x = 3
While x < 3
x = x + 1
Wend
Do
x = x + 1
Loop Until x > 2
Donc dans le premier cas vu que x vaut déjà trois, on ne va pas dans la boucle.Par contre dans le deuxième cas on rentre dans la boucle.
Si on dit que la logique est d'exécuter x = x + 1 seulement si il est inférieur a trois, alors le choix de la deuxième boucle serait mauvais.
Ce site utilise des cookies pour personnaliser le contenu, adapter votre expérience et vous garder connecté si vous vous enregistrez.
En continuant à utiliser ce site, vous consentez à notre utilisation de cookies.