Boucle à 2 variable?
Résolu/Fermé
A voir également:
- Boucle for avec deux variables
- Downloader for pc - Télécharger - Téléchargement & Transfert
- Deux ecran pc - Guide
- Deux comptes whatsapp - Guide
- Faire deux colonnes sur word - Guide
- Download instagram for pc - Télécharger - Divers Communication
7 réponses
Ta boucle for n'a pas de fin :
D'autre part, ce code ne me semble pas judicieux :
J'aurai plus vu un truc du genre :
For K = 2 To Lsce ... Next K
D'autre part, ce code ne me semble pas judicieux :
If Vcherche = "1" Then Début = 2 If Vcherche = "2" Then Début = 100 If Vcherche = "3" Then Début = 1000 If Vcherche = "4" Then Début = 2000 End If End If End If End If
J'aurai plus vu un truc du genre :
If Vcherche = "1" Then Début = 2 End If If Vcherche = "2" Then Début = 100 End If If Vcherche = "3" Then Début = 1000 End If If Vcherche = "4" Then Début = 2000 End If
Polux31
Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
1 204
7 août 2008 à 14:05
7 août 2008 à 14:05
bonjour,
Probléme, la valeur de j reste à 0 ... où est initialisé ligne dans For j = 2 to ligne ?
;o)
Probléme, la valeur de j reste à 0 ... où est initialisé ligne dans For j = 2 to ligne ?
;o)
lermite222
Messages postés
8724
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 190
8 août 2008 à 10:14
8 août 2008 à 10:14
bonjour tous,
Peut-être avec cette tite macro...
Si j'ai bien compris ce que tu veux faire.
A+
Peut-être avec cette tite macro...
Sub VB12() Dim K As Long, J As Long Dim FL1 As Worksheet Dim FL2 As Worksheet Set FL1 = Workbooks("C1.xls").Sheets("Feuil1") Set FL2 = Workbooks("C2.xls").Sheets("Feuil2") For K = 2 To FL1.Range("E65536").End(xlUp).Row For J = 2 To FL2.Range("A65536").End(xlUp).Row If FL1.Cells(K, 5) = FL2.Cells(J, 1) Then FL2.Cells(J, 2).Copy FL1.Cells(K, 7) Exit For End If Next J Next K End Sub
Si j'ai bien compris ce que tu veux faire.
A+
lermite222
Messages postés
8724
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 190
12 août 2008 à 09:12
12 août 2008 à 09:12
Quand tu fait des opérations sur 2 classeurs, ça prend toujours plus de temps ça dépend aussi du nombre de lignes à traiter, dans ton cas il faut tester 16000 x 300 = 4.800.000 lignes !!
Tu peu déjà un peu accélérer en intercalant les lignes ...
et...
Tu peu déjà un peu accélérer en intercalant les lignes ...
Set FL2 = Workbooks("C2.xls").Sheets("Feuil2") Application.EnableEvents = False 'annule provisoirement les macro qui pourraient-êtres dans les événements de feuilles. Application.ScreenUpdating = False ' annule provisoirement la mise à jour de l'affichage. For K = 2 To FL1.Range("E65536").End(xlUp).Row
et...
Application.EnableEvents = True Application.ScreenUpdating = True End Sub
Ok je vais essayer ça, pour le coup 16 000 x 300 j'avais bien compris que sa serai long, mais je pensais pas que j'en aurais pour 30 min :s sa me parait toujours énormes.
autre question, quand il y a :
fl1.range("E65536").end(xlUp).row
tu par cours de la derniere ligne à la premiere ?
ou c'est la meme chose qu'une boucle loop qui compte les lignes ?
derniere chose,
sur un des classeur j'ai des nom et prémon les un en dessous des autres,
j'arrive pas a faire
If activecell.value<> ..... alors next K j'ai essayer ac un petit goto, mais il compte toute les lignes....
autre question, quand il y a :
fl1.range("E65536").end(xlUp).row
tu par cours de la derniere ligne à la premiere ?
ou c'est la meme chose qu'une boucle loop qui compte les lignes ?
derniere chose,
sur un des classeur j'ai des nom et prémon les un en dessous des autres,
j'arrive pas a faire
If activecell.value<> ..... alors next K j'ai essayer ac un petit goto, mais il compte toute les lignes....
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
lermite222
Messages postés
8724
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 190
13 août 2008 à 13:51
13 août 2008 à 13:51
fl1.range("E65536").end(xlUp).row
Exact, sauf que c'est une fonction Excel VBA et le résultat est pratiquement immédiat.
Pour ta 2ém question, j'ai pas compris.
Exact, sauf que c'est une fonction Excel VBA et le résultat est pratiquement immédiat.
Pour ta 2ém question, j'ai pas compris.
Pour ma 2nd questions, c'est pas très grave, j'en ai une un peu plus interressante à posé avant de cloturer la demande.
Suite à ton petit code, j'ai cherché à mettre en variable le nom d'un fichier.
c'est à dire que FL2 est un classeur renouveller chaque mois avec un nom different.
j'ai tester avec Workbooks.Open:=FP
mais ça ne passe pas as-tu une idée ?
ps : Dim FP as String
Merci
Suite à ton petit code, j'ai cherché à mettre en variable le nom d'un fichier.
c'est à dire que FL2 est un classeur renouveller chaque mois avec un nom different.
j'ai tester avec Workbooks.Open:=FP
mais ça ne passe pas as-tu une idée ?
ps : Dim FP as String
Merci
lermite222
Messages postés
8724
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 190
13 août 2008 à 17:36
13 août 2008 à 17:36
Dim FP as string
FP= "C:\Répertoir\SousRépertoir\NomFichier.xls" 'Le chemin complet + nom + extention
Workbooks.Open (FP)
et pour sauver c'est
Workbooks(FP).Save 'mais là, le nom et l'extention suffisent.
A+
FP= "C:\Répertoir\SousRépertoir\NomFichier.xls" 'Le chemin complet + nom + extention
Workbooks.Open (FP)
et pour sauver c'est
Workbooks(FP).Save 'mais là, le nom et l'extention suffisent.
A+
lermite222
Messages postés
8724
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 190
14 août 2008 à 08:04
14 août 2008 à 08:04
Essaie cette macro, elle devrait être sensiblement plus rapide.
Tu dit..
Sub VB12() Dim K As Long, J As Long, Plage() As String Dim Cherch As String, Ligne As Long, Lig As Long Dim FL1 As Worksheet Dim FL2 As Worksheet 'annule provisoirement les macro qui pourraient-êtres dans les événements de feuilles. Application.EnableEvents = False 'annule provisoirement la mise à jour de l'affichage. Application.ScreenUpdating = False Set FL1 = Workbooks("C1.xls").Sheets("Feuil1") 'Destination Set FL2 = Workbooks("C2.xls").Sheets("Feuil2") 'origine Lig = FL2.Range("A65536").End(xlUp).Row Ligne = FL1.Range("E65536").End(xlUp).Row ReDim Plage(2 To Lig) For J = 2 To Lig: Plage(J) = FL2.Cells(J, 1): Next For K = 2 To Ligne Cherch = FL1.Cells(K, 5) For J = 2 To Lig If Cherch = Plage(J) Then FL2.Cells(J, 2).Copy FL1.Cells(K, 7) Exit For End If Next J DoEvents Next K Application.EnableEvents = True Application.ScreenUpdating = True End Sub
Tu dit..
7 août 2008 à 15:41
ça doit être dut aux 2 variables.
si je remplace le "Début" par une valeur fixe, sa fonctionne, mais c'est trop long.
trop de ligne ....
7 août 2008 à 16:40
j'ai extrais une partie.
Si je met une valeur a Debut, sa marche bien, mais dés qu'il y a "Début" le "j" reste à 0 et la sub bloque sur
Cells(j, 5).Select
7 août 2008 à 16:47
Quand on code, on évite au maximum les caractères spéciaux, les accents ...
8 août 2008 à 08:59
j'ai tenté de mettre "Dim n as .... " mais rien ne change. est-ce un mauvais choix de boucle ?
merci pour tes réponses.