Boucle sur la dernière ligne non vide
Résolu
Ecam39
Messages postés
286
Date d'inscription
Statut
Membre
Dernière intervention
-
Ecam39 Messages postés 286 Date d'inscription Statut Membre Dernière intervention -
Ecam39 Messages postés 286 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
J'ai réalisé une macro qui m'effectue des calculs en fonction d'une cellule non vide. La procédure réalise une boucle.
Par défaut, la boucle commence toujours en Ligne 2 jusqu'à la fin de la colonne.
Or, lorsque je n'ai que 10 lignes de complétées, la procédure est très courte à se lancer, par contre quand j'ai 1000 lignes ça demande presque 1 min. Quand ej rajoute des données, les lignes ayant déjà été calculées par le passé sont recalculées (vu que la procédure démarre toujours en début de colonne).
Mais je n'ai besoin de calculer que les nouvelles lignes que j'ai incrémenté.
Je souhaiterai donc lancer la procédure depuis la dernière ligne saisie et non au début de la colonne.
En espérant avoir été clair.
J'ai réalisé une macro qui m'effectue des calculs en fonction d'une cellule non vide. La procédure réalise une boucle.
Par défaut, la boucle commence toujours en Ligne 2 jusqu'à la fin de la colonne.
Or, lorsque je n'ai que 10 lignes de complétées, la procédure est très courte à se lancer, par contre quand j'ai 1000 lignes ça demande presque 1 min. Quand ej rajoute des données, les lignes ayant déjà été calculées par le passé sont recalculées (vu que la procédure démarre toujours en début de colonne).
Mais je n'ai besoin de calculer que les nouvelles lignes que j'ai incrémenté.
Je souhaiterai donc lancer la procédure depuis la dernière ligne saisie et non au début de la colonne.
En espérant avoir été clair.
A voir également:
- Dernière ligne non vide vba
- Supprimer dernière page word - Guide
- Partager photos en ligne - Guide
- Dernière version chrome - Accueil - Applications & Logiciels
- Mètre en ligne - Guide
- Caractere vide - Guide
8 réponses
Bonjour,
Vous pouvez ouvrir une inputbox au debut de votre macro pour entrer le numero de ligne de debut de votre boucle.
Vous pouvez ouvrir une inputbox au debut de votre macro pour entrer le numero de ligne de debut de votre boucle.
Le soucis c'est que ça rajoute une saisie (ce n'est pas moi qui alimente le fichier). Et déjà faire une macro c'est limite pour eux alors si ils doivent saisir un N° de ligne je me fais plumer :)
Il n'existe pas un autre moyen à renseigner directement dans la boucle ?
Voici ma boucle :
L'idéal serait de transformer le Range("E2") en variable non ?
Il n'existe pas un autre moyen à renseigner directement dans la boucle ?
Voici ma boucle :
'Commencer la boucle en colonne E
For ecart_de_stock = 2 To Range("E2").End(xlDown).Row
L'idéal serait de transformer le Range("E2") en variable non ?
Re beau volatil (si ils doivent saisir un N° de ligne je me fais plumer :)
Si vous avez un critere qui permet de pouvoir parametrer le debut de la boucle c'est ok, mais lequel est-ce ????
Si vous avez un critere qui permet de pouvoir parametrer le debut de la boucle c'est ok, mais lequel est-ce ????
Bonjour,
Dans les boucles For Next, il y a une colonne qui reçoit le résultat d'un calcul. Peut être qu'en testant la dernière cellule renseignée pour commencer la boucle du For Next ...
Admettons que le calcul soit en colonne H:
Dans les boucles For Next, il y a une colonne qui reçoit le résultat d'un calcul. Peut être qu'en testant la dernière cellule renseignée pour commencer la boucle du For Next ...
Admettons que le calcul soit en colonne H:
Dim DerLig As Long
DerLig = Range("H" & Rows.Count).End(xlUp).Row
For ecart_de_stock = DerLig to Range("E2").End(xlDown).Row
....
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bonjour Polux31,
il semble que Ecam39 n'a pas vue votre message et dans la reponse qu'il me fait, il n'y pas de critere pour donner une solution.
Ecam39,
y a t-il une colonne avec une cellule qui puisse donner le debut du prochain calcul ???
il semble que Ecam39 n'a pas vue votre message et dans la reponse qu'il me fait, il n'y pas de critere pour donner une solution.
Ecam39,
y a t-il une colonne avec une cellule qui puisse donner le debut du prochain calcul ???
Dans la colonne E, la boucle démarre avec une fonction SI :
Si la colonne E est non vide, alors j'effectue un calcul en colonne F.
Est ce la réponse attendu ?
Si la colonne E est non vide, alors j'effectue un calcul en colonne F.
Est ce la réponse attendu ?
Re,
Presque, relisez la proposition de Polux31 et voyez si cela correspond a votre contexte.
Presque, relisez la proposition de Polux31 et voyez si cela correspond a votre contexte.
Re,
Coordonnees souris, pas top, mais un double click sur la cellule de depart pour la boucle, si y a pas d'autre moyen, c'est bon.
code a mettre dans le VBA de la feuille, adaptez la colonne
Coordonnees souris, pas top, mais un double click sur la cellule de depart pour la boucle, si y a pas d'autre moyen, c'est bon.
code a mettre dans le VBA de la feuille, adaptez la colonne
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Not Application.Intersect(Target, Range("E:E")) Is Nothing Then
Cancel = True
Depart = Target.Row
DerLig = Range("E" & Rows.Count).End(xlUp).Row
For ecart_de_stock = Depart To DerLig
'code de calcul
Next ecart_de_stock
End If
End Sub
Bonjour,
Excusez l'incruste.
1000 lignes -> 1 minute...
Comme il s'agit de la copie d'une formule, as tu essayé la méthode AutoFill (recopie de formule) plutôt qu'une boucle?
Un peu comme ceci :
Excusez l'incruste.
1000 lignes -> 1 minute...
Comme il s'agit de la copie d'une formule, as tu essayé la méthode AutoFill (recopie de formule) plutôt qu'une boucle?
Un peu comme ceci :
Sub Test()
Dim DrLigColE As Long, DrLigColF As Long
DrLigColE = Range("E" & Rows.Count).End(xlUp).Row
DrLigColF = Range("F" & Rows.Count).End(xlUp).Row
Range("F" & DrLigColF).AutoFill Destination:=Range("F" & DrLigColF & ":F" & DrLigColE), Type:=xlFillDefault
End Sub
Bonjour,
voici ma boucle (avec les conditions de calcul) :
'Dans la boucle, effectuer le calcul selon la condition
If Not IsEmpty(Cells(ecart_de_stock, 5)) Then
'Définir la date du jour pour le nouvel inventaire
If Not IsEmpty(Cells(ecart_de_stock, 3)) And Cells(ecart_de_stock, 1) = "" Then
Cells(ecart_de_stock, 1) = Date
Else
End If
'Définir le mois en fonction de la date de saisie
Cells(ecart_de_stock, 2) = Month(Cells(ecart_de_stock, 1))
'Afficher 0 ou 1 en fonction de l'écart d'emplacement
If Cells(ecart_de_stock, 4) - Cells(ecart_de_stock, 5) = 0 Then
Cells(ecart_de_stock, 6) = 1
Else
Cells(ecart_de_stock, 6) = 0
End If
'Afficher l'ecart des bobines entre le stock physique et informatique, sans signe
Cells(ecart_de_stock, 7) = Abs(Cells(ecart_de_stock, 4) - Cells(ecart_de_stock, 5))
'Calculer un écart avec une division par 0
If Cells(ecart_de_stock, 4) > 0 Then
'Effectuer le calcul en % de l'écart des bobines
Cells(ecart_de_stock, 8) = Abs(1 - (Cells(ecart_de_stock, 7) / Cells(ecart_de_stock, 4)))
Else
'Valeur de 100% par défaut si le stock physique et info sont vides
If Cells(ecart_de_stock, 4) = 0 And Cells(ecart_de_stock, 5) = 0 Then
Cells(ecart_de_stock, 8) = 1
Else
'Valeur de 0% par défaut si il y a un écart entre le st info et physique
If Cells(ecart_de_stock, 4) <> Cells(ecart_de_stock, 5) Then
Cells(ecart_de_stock, 8) = 0
Else
End If
End If
End If
End If
voici ma boucle (avec les conditions de calcul) :
'Dans la boucle, effectuer le calcul selon la condition
If Not IsEmpty(Cells(ecart_de_stock, 5)) Then
'Définir la date du jour pour le nouvel inventaire
If Not IsEmpty(Cells(ecart_de_stock, 3)) And Cells(ecart_de_stock, 1) = "" Then
Cells(ecart_de_stock, 1) = Date
Else
End If
'Définir le mois en fonction de la date de saisie
Cells(ecart_de_stock, 2) = Month(Cells(ecart_de_stock, 1))
'Afficher 0 ou 1 en fonction de l'écart d'emplacement
If Cells(ecart_de_stock, 4) - Cells(ecart_de_stock, 5) = 0 Then
Cells(ecart_de_stock, 6) = 1
Else
Cells(ecart_de_stock, 6) = 0
End If
'Afficher l'ecart des bobines entre le stock physique et informatique, sans signe
Cells(ecart_de_stock, 7) = Abs(Cells(ecart_de_stock, 4) - Cells(ecart_de_stock, 5))
'Calculer un écart avec une division par 0
If Cells(ecart_de_stock, 4) > 0 Then
'Effectuer le calcul en % de l'écart des bobines
Cells(ecart_de_stock, 8) = Abs(1 - (Cells(ecart_de_stock, 7) / Cells(ecart_de_stock, 4)))
Else
'Valeur de 100% par défaut si le stock physique et info sont vides
If Cells(ecart_de_stock, 4) = 0 And Cells(ecart_de_stock, 5) = 0 Then
Cells(ecart_de_stock, 8) = 1
Else
'Valeur de 0% par défaut si il y a un écart entre le st info et physique
If Cells(ecart_de_stock, 4) <> Cells(ecart_de_stock, 5) Then
Cells(ecart_de_stock, 8) = 0
Else
End If
End If
End If
End If