[Catégorie modifiée .Net -> VBA] boucle - dépassement de capacité

nanie12 Messages postés 114 Date d'inscription vendredi 9 avril 2010 Statut Membre Dernière intervention 16 août 2011 - 30 mars 2011 à 11:21
foliv57 Messages postés 420 Date d'inscription vendredi 17 novembre 2006 Statut Membre Dernière intervention 15 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

3 réponses

foliv57 Messages postés 420 Date d'inscription vendredi 17 novembre 2006 Statut Membre Dernière intervention 15 juillet 2014 9
30 mars 2011 à 11:38
Bonjour,

Remplacez
Dim m As Integer, t As Integer 

Par
Dim m As Long, t As Long 


Et tout devrait rentrer dans l'ordre
0
nanie12 Messages postés 114 Date d'inscription vendredi 9 avril 2010 Statut Membre Dernière intervention 16 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
0
foliv57 Messages postés 420 Date d'inscription vendredi 17 novembre 2006 Statut Membre Dernière intervention 15 juillet 2014 9
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


Mais je suis peut être à coté de la plaque
0
Rejoignez-nous