[Catégorie modifiée .Net -> VBA] boucle - dépassement de capacité
nanie12
Messages postés114Date d'inscriptionvendredi 9 avril 2010StatutMembreDernière intervention16 août 2011
-
30 mars 2011 à 11:21
foliv57
Messages postés420Date d'inscriptionvendredi 17 novembre 2006StatutMembreDernière intervention15 juillet 2014
-
30 mars 2011 à 16:07
sur Excel, je voudrais faire une macro qui va chercher en fonction d'un nom client et une date une liste de produit
j'ai fais ceci, mais ca ne fonctionne pas
Dim m As Integer, t As Integer
m = 10
t = 5
While Not IsEmpty(Sheets("base de données").Cells(t, 2))
'regarder si date identique
While Sheets("base de données").Cells(t, 1) <> Sheets("base de données").Cells(1, 9)
t = t + 1
Wend
Sheets("Ordre de service").Cells(m, 2) = Sheets("base de données").Cells(t, 1)
m = m + 1
t = t + 1
Wend
nanie
nanie12
Messages postés114Date d'inscriptionvendredi 9 avril 2010StatutMembreDernière intervention16 août 2011 30 mars 2011 à 13:11
j'ai trouvé ceci mais le problème c'est qu'il ne fait pas toute les lignes. la macro arrête de chercher les infos dès qu'il trouve que la date est différente. or dans un chantier il peut y avoir plusieurs fois la même date dans un chantier, je voudrais qu'il fasse toutes les lignes du chantier et de vérifier si date ok. si date ok, il me l'écris dans une autre feuille
Private Sub CommandButton1_Click()
'faire OS
Dim m As Integer, t As Integer, k As Integer
m = 10
t = 4
'verifie si base de données = chantier sélectioné dans combobox
While Not IsEmpty(Sheets("base de données").Cells(t, 1)) And Sheets("base de données").Cells(t, 2) <> ComboBox1.Text
t = t + 1
'vérifie si date = date mis dans une textbox précédement
While Sheets("base de données").Cells(t, 1) <> Sheets("base de données").Cells(1, 9)
t = t + 1
Wend
'inscrire date dans Ordre de service
While Sheets("base de données").Cells(t, 2) ComboBox1.Text And Sheets("base de données").Cells(t, 1) Sheets("base de données").Cells(1, 9)
Sheets("Ordre de service").Cells(m, 2) = Sheets("base de données").Cells(t, 3)
m = m + 1
t = t + 1
Wend
Wend
End Sub
foliv57
Messages postés420Date d'inscriptionvendredi 17 novembre 2006StatutMembreDernière intervention15 juillet 20149 30 mars 2011 à 16:07
Désolé, mais du code jeté comme ca, sans balises de code, avec des variables nommé m et t, sans compter qu'on ne sais pas ce que contient les colonnes 1 et 2 de votre onglet "base de données", ne donne pas très envie de comprendre pourquoi votre code ne marche pas.
Donc deux possiblilités, soit vous utilisez le mode pas à pas pour essayer de déterminer quelle condition entraine le problème, soit décrivez un peut mieux la structure de votre onglet et ce que vous cherchez exactement à faire. Avec un petit exemple par exemple.
Car avec ce que j'ai pu comprendre, je vous direz qu'il faut faire :
Dim ligneParcourBase As Long
Dim ligneParcourOrdre As Long
ligneParcourOrdre = 10
ligneParcourBase = 4
With Sheets("base de données")
'Pour chaque lignes de la base
While (Not IsEmpty(.Cells(ligneParcourBase, 1)))
'Si le chantier correspond au choix dans le combobox
'et que la date correspond à la date en ligne 1 colonne 9
If (.Cells(ligneParcourBase, 2).Value = ComboBox1.Text) And _
(.Cells(ligneParcourBase, 1).Value = .Cells(1, 9).Value) Then
'Ajout de la valeur en colonne 3 dans l'ongle "Ordre de service"
Sheets("Ordre de service").Cells(ligneParcourOrdre , 2) = .Cells(ligneParcourBase, 3)
ligneParcourOrdre = ligneParcourOrdre + 1
End If
ligneParcourBase = ligneParcourBase + 1
Wend
End With