Erreur #valeur! par endroit en appliquant une formule
19 réponses
Phenix21
Bonjour,
Dans mon code VBA, j'appelle une fonction numeropage() de Laurent
Longre.
Jusque ce matin tout marchait bien, il affichait les num=E9ros de pages.
Et puis depuis ce matin et une de mes manips (je ne l'ai fait
num=E9roter que les cellules qui m'int=E9resse, je gagnais du temps), la
formule s'applique bien sur les premi=E8res valeurs, puis m'affiche
#valeur!, puis refonctionne sur les derni=E8res valeurs.
Lorsque le d=E9roulement de ma macro est termin=E9, j'ai laiss=E9 les
formules dans les cases. En faisant un double clic sur les #valeur!,
certaines cellules se recalculent, d'autres continuent d'afficher
#valeur!.
Toutes les cellules ont le m=EAme format, je comprends pas... Est-ce un
probl=E8me de recalcul automatique ? Quelqu'un a-t-il une solution ?
Oui, mais pas sytématiquement. Avant, on ne "voyait" pas le plantage parce que c'était Excel qui appelait la fonction NumeroPage. Maintenant, c'est VBA qui l'appelle directement. L'erreur est la même (l'indice n'appartient pas à la sélection) et reste inexplicable.
Cordialement, -- AP
"Phenix21" a écrit dans le message de news:
J'ai appliqué ta correction, et là VBA a carrément planté ! lol
Oui, mais pas sytématiquement.
Avant, on ne "voyait" pas le plantage parce que c'était Excel qui appelait
la fonction NumeroPage.
Maintenant, c'est VBA qui l'appelle directement.
L'erreur est la même
(l'indice n'appartient pas à la sélection) et reste inexplicable.
Cordialement,
--
AP
"Phenix21" <phoenix21@voila.fr> a écrit dans le message de news:
1148050571.906909.94100@i39g2000cwa.googlegroups.com...
J'ai appliqué ta correction, et là VBA a carrément planté ! lol
Oui, mais pas sytématiquement. Avant, on ne "voyait" pas le plantage parce que c'était Excel qui appelait la fonction NumeroPage. Maintenant, c'est VBA qui l'appelle directement. L'erreur est la même (l'indice n'appartient pas à la sélection) et reste inexplicable.
Cordialement, -- AP
"Phenix21" a écrit dans le message de news:
J'ai appliqué ta correction, et là VBA a carrément planté ! lol
docm
Bonjour à vous.
La technique suivante, qui consiste à insérer les sauts de pages, semble fonctionner.
'--------------------------------------------------- 'CREATION DU SOMMAIRE '---------------------------------------------------
'Numérotation des pages Sheets("BPU").Select
'Insertion des sauts de page memview = ActiveWindow.View Worksheets("BPU").PageSetup.PrintArea = "" Worksheets("BPU").PageSetup.Zoom = 100 ActiveWindow.View = xlPageBreakPreview
plageBPU_fin.Select For i = 1 To nb_val_fin Cells(i, 1).Select If Selection.Style = "Titre1" Then Cells(i, 4).FormulaR1C1 = "=NumeroPage(RC[-3])" ElseIf Selection.Style = "Titre2" Then Cells(i, 4).FormulaR1C1 = "=NumeroPage(RC[-3])" End If Next ActiveWindow.View = memview
Amicalement
docm
"Phenix21" wrote in message news: Bonjour,
Dans mon code VBA, j'appelle une fonction numeropage() de Laurent Longre.
Jusque ce matin tout marchait bien, il affichait les numéros de pages. Et puis depuis ce matin et une de mes manips (je ne l'ai fait numéroter que les cellules qui m'intéresse, je gagnais du temps), la formule s'applique bien sur les premières valeurs, puis m'affiche #valeur!, puis refonctionne sur les dernières valeurs. Lorsque le déroulement de ma macro est terminé, j'ai laissé les formules dans les cases. En faisant un double clic sur les #valeur!, certaines cellules se recalculent, d'autres continuent d'afficher #valeur!.
Toutes les cellules ont le même format, je comprends pas... Est-ce un problème de recalcul automatique ? Quelqu'un a-t-il une solution ?
Merci d'avance pour vos réponses
Bonjour à vous.
La technique suivante, qui consiste à insérer les sauts de pages, semble
fonctionner.
'---------------------------------------------------
'CREATION DU SOMMAIRE
'---------------------------------------------------
'Numérotation des pages
Sheets("BPU").Select
'Insertion des sauts de page
memview = ActiveWindow.View
Worksheets("BPU").PageSetup.PrintArea = ""
Worksheets("BPU").PageSetup.Zoom = 100
ActiveWindow.View = xlPageBreakPreview
plageBPU_fin.Select
For i = 1 To nb_val_fin
Cells(i, 1).Select
If Selection.Style = "Titre1" Then
Cells(i, 4).FormulaR1C1 = "=NumeroPage(RC[-3])"
ElseIf Selection.Style = "Titre2" Then
Cells(i, 4).FormulaR1C1 = "=NumeroPage(RC[-3])"
End If
Next
ActiveWindow.View = memview
Amicalement
docm
"Phenix21" <jeanluc.lacouture@gmail.com> wrote in message
news:1148032261.678316.244900@j73g2000cwa.googlegroups.com...
Bonjour,
Dans mon code VBA, j'appelle une fonction numeropage() de Laurent
Longre.
Jusque ce matin tout marchait bien, il affichait les numéros de pages.
Et puis depuis ce matin et une de mes manips (je ne l'ai fait
numéroter que les cellules qui m'intéresse, je gagnais du temps), la
formule s'applique bien sur les premières valeurs, puis m'affiche
#valeur!, puis refonctionne sur les dernières valeurs.
Lorsque le déroulement de ma macro est terminé, j'ai laissé les
formules dans les cases. En faisant un double clic sur les #valeur!,
certaines cellules se recalculent, d'autres continuent d'afficher
#valeur!.
Toutes les cellules ont le même format, je comprends pas... Est-ce un
problème de recalcul automatique ? Quelqu'un a-t-il une solution ?
La technique suivante, qui consiste à insérer les sauts de pages, semble fonctionner.
'--------------------------------------------------- 'CREATION DU SOMMAIRE '---------------------------------------------------
'Numérotation des pages Sheets("BPU").Select
'Insertion des sauts de page memview = ActiveWindow.View Worksheets("BPU").PageSetup.PrintArea = "" Worksheets("BPU").PageSetup.Zoom = 100 ActiveWindow.View = xlPageBreakPreview
plageBPU_fin.Select For i = 1 To nb_val_fin Cells(i, 1).Select If Selection.Style = "Titre1" Then Cells(i, 4).FormulaR1C1 = "=NumeroPage(RC[-3])" ElseIf Selection.Style = "Titre2" Then Cells(i, 4).FormulaR1C1 = "=NumeroPage(RC[-3])" End If Next ActiveWindow.View = memview
Amicalement
docm
"Phenix21" wrote in message news: Bonjour,
Dans mon code VBA, j'appelle une fonction numeropage() de Laurent Longre.
Jusque ce matin tout marchait bien, il affichait les numéros de pages. Et puis depuis ce matin et une de mes manips (je ne l'ai fait numéroter que les cellules qui m'intéresse, je gagnais du temps), la formule s'applique bien sur les premières valeurs, puis m'affiche #valeur!, puis refonctionne sur les dernières valeurs. Lorsque le déroulement de ma macro est terminé, j'ai laissé les formules dans les cases. En faisant un double clic sur les #valeur!, certaines cellules se recalculent, d'autres continuent d'afficher #valeur!.
Toutes les cellules ont le même format, je comprends pas... Est-ce un problème de recalcul automatique ? Quelqu'un a-t-il une solution ?
Merci d'avance pour vos réponses
Ardus Petus
Bravo docm!
J'ai intégré ta modif et la mienne dans la version suivante, qui MARCHE! http://cjoint.com/?fulCsWDl6I
Cordialement, -- AP
"docm" a écrit dans le message de news: %
Bonjour à vous.
La technique suivante, qui consiste à insérer les sauts de pages, semble fonctionner.
'--------------------------------------------------- 'CREATION DU SOMMAIRE '---------------------------------------------------
'Numérotation des pages Sheets("BPU").Select
'Insertion des sauts de page memview = ActiveWindow.View Worksheets("BPU").PageSetup.PrintArea = "" Worksheets("BPU").PageSetup.Zoom = 100 ActiveWindow.View = xlPageBreakPreview
plageBPU_fin.Select For i = 1 To nb_val_fin Cells(i, 1).Select If Selection.Style = "Titre1" Then Cells(i, 4).FormulaR1C1 = "=NumeroPage(RC[-3])" ElseIf Selection.Style = "Titre2" Then Cells(i, 4).FormulaR1C1 = "=NumeroPage(RC[-3])" End If Next ActiveWindow.View = memview
Amicalement
docm
"Phenix21" wrote in message news: Bonjour,
Dans mon code VBA, j'appelle une fonction numeropage() de Laurent Longre.
Jusque ce matin tout marchait bien, il affichait les numéros de pages. Et puis depuis ce matin et une de mes manips (je ne l'ai fait numéroter que les cellules qui m'intéresse, je gagnais du temps), la formule s'applique bien sur les premières valeurs, puis m'affiche #valeur!, puis refonctionne sur les dernières valeurs. Lorsque le déroulement de ma macro est terminé, j'ai laissé les formules dans les cases. En faisant un double clic sur les #valeur!, certaines cellules se recalculent, d'autres continuent d'afficher #valeur!.
Toutes les cellules ont le même format, je comprends pas... Est-ce un problème de recalcul automatique ? Quelqu'un a-t-il une solution ?
Merci d'avance pour vos réponses
Bravo docm!
J'ai intégré ta modif et la mienne dans la version suivante, qui MARCHE!
http://cjoint.com/?fulCsWDl6I
Cordialement,
--
AP
"docm" <no_spam@trust.net> a écrit dans le message de news:
%23MyG5b4eGHA.1260@TK2MSFTNGP05.phx.gbl...
Bonjour à vous.
La technique suivante, qui consiste à insérer les sauts de pages, semble
fonctionner.
'---------------------------------------------------
'CREATION DU SOMMAIRE
'---------------------------------------------------
'Numérotation des pages
Sheets("BPU").Select
'Insertion des sauts de page
memview = ActiveWindow.View
Worksheets("BPU").PageSetup.PrintArea = ""
Worksheets("BPU").PageSetup.Zoom = 100
ActiveWindow.View = xlPageBreakPreview
plageBPU_fin.Select
For i = 1 To nb_val_fin
Cells(i, 1).Select
If Selection.Style = "Titre1" Then
Cells(i, 4).FormulaR1C1 = "=NumeroPage(RC[-3])"
ElseIf Selection.Style = "Titre2" Then
Cells(i, 4).FormulaR1C1 = "=NumeroPage(RC[-3])"
End If
Next
ActiveWindow.View = memview
Amicalement
docm
"Phenix21" <jeanluc.lacouture@gmail.com> wrote in message
news:1148032261.678316.244900@j73g2000cwa.googlegroups.com...
Bonjour,
Dans mon code VBA, j'appelle une fonction numeropage() de Laurent
Longre.
Jusque ce matin tout marchait bien, il affichait les numéros de pages.
Et puis depuis ce matin et une de mes manips (je ne l'ai fait
numéroter que les cellules qui m'intéresse, je gagnais du temps), la
formule s'applique bien sur les premières valeurs, puis m'affiche
#valeur!, puis refonctionne sur les dernières valeurs.
Lorsque le déroulement de ma macro est terminé, j'ai laissé les
formules dans les cases. En faisant un double clic sur les #valeur!,
certaines cellules se recalculent, d'autres continuent d'afficher
#valeur!.
Toutes les cellules ont le même format, je comprends pas... Est-ce un
problème de recalcul automatique ? Quelqu'un a-t-il une solution ?
J'ai intégré ta modif et la mienne dans la version suivante, qui MARCHE! http://cjoint.com/?fulCsWDl6I
Cordialement, -- AP
"docm" a écrit dans le message de news: %
Bonjour à vous.
La technique suivante, qui consiste à insérer les sauts de pages, semble fonctionner.
'--------------------------------------------------- 'CREATION DU SOMMAIRE '---------------------------------------------------
'Numérotation des pages Sheets("BPU").Select
'Insertion des sauts de page memview = ActiveWindow.View Worksheets("BPU").PageSetup.PrintArea = "" Worksheets("BPU").PageSetup.Zoom = 100 ActiveWindow.View = xlPageBreakPreview
plageBPU_fin.Select For i = 1 To nb_val_fin Cells(i, 1).Select If Selection.Style = "Titre1" Then Cells(i, 4).FormulaR1C1 = "=NumeroPage(RC[-3])" ElseIf Selection.Style = "Titre2" Then Cells(i, 4).FormulaR1C1 = "=NumeroPage(RC[-3])" End If Next ActiveWindow.View = memview
Amicalement
docm
"Phenix21" wrote in message news: Bonjour,
Dans mon code VBA, j'appelle une fonction numeropage() de Laurent Longre.
Jusque ce matin tout marchait bien, il affichait les numéros de pages. Et puis depuis ce matin et une de mes manips (je ne l'ai fait numéroter que les cellules qui m'intéresse, je gagnais du temps), la formule s'applique bien sur les premières valeurs, puis m'affiche #valeur!, puis refonctionne sur les dernières valeurs. Lorsque le déroulement de ma macro est terminé, j'ai laissé les formules dans les cases. En faisant un double clic sur les #valeur!, certaines cellules se recalculent, d'autres continuent d'afficher #valeur!.
Toutes les cellules ont le même format, je comprends pas... Est-ce un problème de recalcul automatique ? Quelqu'un a-t-il une solution ?
Merci d'avance pour vos réponses
docm
Bonjour Ardus Petus. Effectivement, la commande ActiveWindow.View = xlPageBreakPreview semble être impérative avant de faire appel à HPageBreaks ou VPageBreaks. Cela semble solutionner le prétendu bug décrit ici par Microsoft: http://support.microsoft.com/default.aspx?scid=kb;fr;210663
docm
"Ardus Petus" wrote in message news:OGGPM$#
Bravo docm!
J'ai intégré ta modif et la mienne dans la version suivante, qui MARCHE! http://cjoint.com/?fulCsWDl6I
Cordialement, -- AP
"docm" a écrit dans le message de news: %
Bonjour à vous.
La technique suivante, qui consiste à insérer les sauts de pages, semble fonctionner.
'--------------------------------------------------- 'CREATION DU SOMMAIRE '---------------------------------------------------
'Numérotation des pages Sheets("BPU").Select
'Insertion des sauts de page memview = ActiveWindow.View Worksheets("BPU").PageSetup.PrintArea = "" Worksheets("BPU").PageSetup.Zoom = 100 ActiveWindow.View = xlPageBreakPreview
plageBPU_fin.Select For i = 1 To nb_val_fin Cells(i, 1).Select If Selection.Style = "Titre1" Then Cells(i, 4).FormulaR1C1 = "=NumeroPage(RC[-3])" ElseIf Selection.Style = "Titre2" Then Cells(i, 4).FormulaR1C1 = "=NumeroPage(RC[-3])" End If Next ActiveWindow.View = memview
Amicalement
docm
"Phenix21" wrote in message news: Bonjour,
Dans mon code VBA, j'appelle une fonction numeropage() de Laurent Longre.
Jusque ce matin tout marchait bien, il affichait les numéros de pages. Et puis depuis ce matin et une de mes manips (je ne l'ai fait numéroter que les cellules qui m'intéresse, je gagnais du temps), la formule s'applique bien sur les premières valeurs, puis m'affiche #valeur!, puis refonctionne sur les dernières valeurs. Lorsque le déroulement de ma macro est terminé, j'ai laissé les formules dans les cases. En faisant un double clic sur les #valeur!, certaines cellules se recalculent, d'autres continuent d'afficher #valeur!.
Toutes les cellules ont le même format, je comprends pas... Est-ce un problème de recalcul automatique ? Quelqu'un a-t-il une solution ?
Merci d'avance pour vos réponses
Bonjour Ardus Petus.
Effectivement, la commande
ActiveWindow.View = xlPageBreakPreview
semble être impérative avant de faire appel à HPageBreaks ou VPageBreaks.
Cela semble solutionner le prétendu bug décrit ici par Microsoft:
http://support.microsoft.com/default.aspx?scid=kb;fr;210663
docm
"Ardus Petus" <ardus.petus@laposte.net> wrote in message
news:OGGPM$#eGHA.1264@TK2MSFTNGP05.phx.gbl...
Bravo docm!
J'ai intégré ta modif et la mienne dans la version suivante, qui MARCHE!
http://cjoint.com/?fulCsWDl6I
Cordialement,
--
AP
"docm" <no_spam@trust.net> a écrit dans le message de news:
%23MyG5b4eGHA.1260@TK2MSFTNGP05.phx.gbl...
Bonjour à vous.
La technique suivante, qui consiste à insérer les sauts de pages, semble
fonctionner.
'---------------------------------------------------
'CREATION DU SOMMAIRE
'---------------------------------------------------
'Numérotation des pages
Sheets("BPU").Select
'Insertion des sauts de page
memview = ActiveWindow.View
Worksheets("BPU").PageSetup.PrintArea = ""
Worksheets("BPU").PageSetup.Zoom = 100
ActiveWindow.View = xlPageBreakPreview
plageBPU_fin.Select
For i = 1 To nb_val_fin
Cells(i, 1).Select
If Selection.Style = "Titre1" Then
Cells(i, 4).FormulaR1C1 = "=NumeroPage(RC[-3])"
ElseIf Selection.Style = "Titre2" Then
Cells(i, 4).FormulaR1C1 = "=NumeroPage(RC[-3])"
End If
Next
ActiveWindow.View = memview
Amicalement
docm
"Phenix21" <jeanluc.lacouture@gmail.com> wrote in message
news:1148032261.678316.244900@j73g2000cwa.googlegroups.com...
Bonjour,
Dans mon code VBA, j'appelle une fonction numeropage() de Laurent
Longre.
Jusque ce matin tout marchait bien, il affichait les numéros de pages.
Et puis depuis ce matin et une de mes manips (je ne l'ai fait
numéroter que les cellules qui m'intéresse, je gagnais du temps), la
formule s'applique bien sur les premières valeurs, puis m'affiche
#valeur!, puis refonctionne sur les dernières valeurs.
Lorsque le déroulement de ma macro est terminé, j'ai laissé les
formules dans les cases. En faisant un double clic sur les #valeur!,
certaines cellules se recalculent, d'autres continuent d'afficher
#valeur!.
Toutes les cellules ont le même format, je comprends pas... Est-ce un
problème de recalcul automatique ? Quelqu'un a-t-il une solution ?
Bonjour Ardus Petus. Effectivement, la commande ActiveWindow.View = xlPageBreakPreview semble être impérative avant de faire appel à HPageBreaks ou VPageBreaks. Cela semble solutionner le prétendu bug décrit ici par Microsoft: http://support.microsoft.com/default.aspx?scid=kb;fr;210663
docm
"Ardus Petus" wrote in message news:OGGPM$#
Bravo docm!
J'ai intégré ta modif et la mienne dans la version suivante, qui MARCHE! http://cjoint.com/?fulCsWDl6I
Cordialement, -- AP
"docm" a écrit dans le message de news: %
Bonjour à vous.
La technique suivante, qui consiste à insérer les sauts de pages, semble fonctionner.
'--------------------------------------------------- 'CREATION DU SOMMAIRE '---------------------------------------------------
'Numérotation des pages Sheets("BPU").Select
'Insertion des sauts de page memview = ActiveWindow.View Worksheets("BPU").PageSetup.PrintArea = "" Worksheets("BPU").PageSetup.Zoom = 100 ActiveWindow.View = xlPageBreakPreview
plageBPU_fin.Select For i = 1 To nb_val_fin Cells(i, 1).Select If Selection.Style = "Titre1" Then Cells(i, 4).FormulaR1C1 = "=NumeroPage(RC[-3])" ElseIf Selection.Style = "Titre2" Then Cells(i, 4).FormulaR1C1 = "=NumeroPage(RC[-3])" End If Next ActiveWindow.View = memview
Amicalement
docm
"Phenix21" wrote in message news: Bonjour,
Dans mon code VBA, j'appelle une fonction numeropage() de Laurent Longre.
Jusque ce matin tout marchait bien, il affichait les numéros de pages. Et puis depuis ce matin et une de mes manips (je ne l'ai fait numéroter que les cellules qui m'intéresse, je gagnais du temps), la formule s'applique bien sur les premières valeurs, puis m'affiche #valeur!, puis refonctionne sur les dernières valeurs. Lorsque le déroulement de ma macro est terminé, j'ai laissé les formules dans les cases. En faisant un double clic sur les #valeur!, certaines cellules se recalculent, d'autres continuent d'afficher #valeur!.
Toutes les cellules ont le même format, je comprends pas... Est-ce un problème de recalcul automatique ? Quelqu'un a-t-il une solution ?
Merci d'avance pour vos réponses
Phenix21
Je reviens de weekend, et vous avez trouvé la solution à mon problème !
Un grand merci à vous deux pour votre efficacité ;)
Phenix21
Je reviens de weekend, et vous avez trouvé la solution à mon
problème !
Un grand merci à vous deux pour votre efficacité ;)
Je reviens de weekend, et vous avez trouvé la solution à mon problème !
Un grand merci à vous deux pour votre efficacité ;)
Phenix21
docm
C'est un plaisir.
"Phenix21" wrote in message news: Je reviens de weekend, et vous avez trouvé la solution à mon problème !
Un grand merci à vous deux pour votre efficacité ;)
Phenix21
C'est un plaisir.
"Phenix21" <phoenix21@voila.fr> wrote in message
news:1148280771.943681.34890@i40g2000cwc.googlegroups.com...
Je reviens de weekend, et vous avez trouvé la solution à mon
problème !
Un grand merci à vous deux pour votre efficacité ;)
"Phenix21" wrote in message news: Je reviens de weekend, et vous avez trouvé la solution à mon problème !
Un grand merci à vous deux pour votre efficacité ;)
Phenix21
Phenix21
Re-bonjour !
Tant que je vous tiens, une autre petite question ;)
Dans mon code (voir fichier joint ci dessus), j'ai une boucle for qui parcourt toute la plage. Elle recherche des termes (U, F, m3,...) pour les remplacer par "unité", "forfait", "mètre cube",... Elle fait également de la mise en page avec de l'insertion de ligne et l'application d'un style.
Cette boucle for prend beaucoup de temps, notamment à cause d'une douzaine de ElseIf (correspondant à U, ...) à l'intérieur de la for. J'aurais aimé l'accélerer le code en faisant sauter tous les tests ElseIf pour les cellules vides. J'ai rajouté un goto, soit :
For i = 1 To 3000 If Cells(i, 3) = "" Then GoTo line1 ElseIf Cells(i, 3) = "U" Then j = 1 While Cells(i + j, 1) = "" j = j + 1 Wend Cells(i + j, 1).Select Selection.EntireRow.Insert Selection.EntireRow.Insert Cells(i + j, 2) = "L'unité : " Cells(i, 3) = "" Range(Cells(i + j, 2), Cells(i + j, 3)).Select Selection.Style = "unite"
ElseIf Cells(i, 3) = "ml" Then ...
End If line1: Next
Qu'en pensez-vous ?
Merci
Re-bonjour !
Tant que je vous tiens, une autre petite question ;)
Dans mon code (voir fichier joint ci dessus), j'ai une boucle for qui
parcourt toute la plage. Elle recherche des termes (U, F, m3,...) pour
les remplacer par "unité", "forfait", "mètre cube",... Elle fait
également de la mise en page avec de l'insertion de ligne et
l'application d'un style.
Cette boucle for prend beaucoup de temps, notamment à cause d'une
douzaine de ElseIf (correspondant à U, ...) à l'intérieur de la for.
J'aurais aimé l'accélerer le code en faisant sauter tous les tests
ElseIf pour les cellules vides. J'ai rajouté un goto, soit :
For i = 1 To 3000
If Cells(i, 3) = "" Then
GoTo line1
ElseIf Cells(i, 3) = "U" Then
j = 1
While Cells(i + j, 1) = ""
j = j + 1
Wend
Cells(i + j, 1).Select
Selection.EntireRow.Insert
Selection.EntireRow.Insert
Cells(i + j, 2) = "L'unité : "
Cells(i, 3) = ""
Range(Cells(i + j, 2), Cells(i + j, 3)).Select
Selection.Style = "unite"
Tant que je vous tiens, une autre petite question ;)
Dans mon code (voir fichier joint ci dessus), j'ai une boucle for qui parcourt toute la plage. Elle recherche des termes (U, F, m3,...) pour les remplacer par "unité", "forfait", "mètre cube",... Elle fait également de la mise en page avec de l'insertion de ligne et l'application d'un style.
Cette boucle for prend beaucoup de temps, notamment à cause d'une douzaine de ElseIf (correspondant à U, ...) à l'intérieur de la for. J'aurais aimé l'accélerer le code en faisant sauter tous les tests ElseIf pour les cellules vides. J'ai rajouté un goto, soit :
For i = 1 To 3000 If Cells(i, 3) = "" Then GoTo line1 ElseIf Cells(i, 3) = "U" Then j = 1 While Cells(i + j, 1) = "" j = j + 1 Wend Cells(i + j, 1).Select Selection.EntireRow.Insert Selection.EntireRow.Insert Cells(i + j, 2) = "L'unité : " Cells(i, 3) = "" Range(Cells(i + j, 2), Cells(i + j, 3)).Select Selection.Style = "unite"
ElseIf Cells(i, 3) = "ml" Then ...
End If line1: Next
Qu'en pensez-vous ?
Merci
docm
C'est très bien d'éviter les opérations inutiles mais les ElseIf n'ont pas d'impact visible sur la vitesse car Visual Basic lui-même est extrêmement rapide. Ce qui ralentit de façon très significative, ce sont les appels à excel, tels les .Select et les .Insert qu'il faut éviter le plus possible si la rapidité d'exécution est importante.
Amicalement
docm
"Phenix21" wrote in message news: Re-bonjour !
Tant que je vous tiens, une autre petite question ;)
Dans mon code (voir fichier joint ci dessus), j'ai une boucle for qui parcourt toute la plage. Elle recherche des termes (U, F, m3,...) pour les remplacer par "unité", "forfait", "mètre cube",... Elle fait également de la mise en page avec de l'insertion de ligne et l'application d'un style.
Cette boucle for prend beaucoup de temps, notamment à cause d'une douzaine de ElseIf (correspondant à U, ...) à l'intérieur de la for. J'aurais aimé l'accélerer le code en faisant sauter tous les tests ElseIf pour les cellules vides. J'ai rajouté un goto, soit :
For i = 1 To 3000 If Cells(i, 3) = "" Then GoTo line1 ElseIf Cells(i, 3) = "U" Then j = 1 While Cells(i + j, 1) = "" j = j + 1 Wend Cells(i + j, 1).Select Selection.EntireRow.Insert Selection.EntireRow.Insert Cells(i + j, 2) = "L'unité : " Cells(i, 3) = "" Range(Cells(i + j, 2), Cells(i + j, 3)).Select Selection.Style = "unite"
ElseIf Cells(i, 3) = "ml" Then ...
End If line1: Next
Qu'en pensez-vous ?
Merci
C'est très bien d'éviter les opérations inutiles mais les ElseIf n'ont pas
d'impact visible sur la vitesse car Visual Basic lui-même est extrêmement
rapide.
Ce qui ralentit de façon très significative, ce sont les appels à excel,
tels les .Select et les .Insert qu'il faut éviter le plus possible si la
rapidité d'exécution est importante.
Amicalement
docm
"Phenix21" <phoenix21@voila.fr> wrote in message
news:1148391113.033753.110960@u72g2000cwu.googlegroups.com...
Re-bonjour !
Tant que je vous tiens, une autre petite question ;)
Dans mon code (voir fichier joint ci dessus), j'ai une boucle for qui
parcourt toute la plage. Elle recherche des termes (U, F, m3,...) pour
les remplacer par "unité", "forfait", "mètre cube",... Elle fait
également de la mise en page avec de l'insertion de ligne et
l'application d'un style.
Cette boucle for prend beaucoup de temps, notamment à cause d'une
douzaine de ElseIf (correspondant à U, ...) à l'intérieur de la for.
J'aurais aimé l'accélerer le code en faisant sauter tous les tests
ElseIf pour les cellules vides. J'ai rajouté un goto, soit :
For i = 1 To 3000
If Cells(i, 3) = "" Then
GoTo line1
ElseIf Cells(i, 3) = "U" Then
j = 1
While Cells(i + j, 1) = ""
j = j + 1
Wend
Cells(i + j, 1).Select
Selection.EntireRow.Insert
Selection.EntireRow.Insert
Cells(i + j, 2) = "L'unité : "
Cells(i, 3) = ""
Range(Cells(i + j, 2), Cells(i + j, 3)).Select
Selection.Style = "unite"
C'est très bien d'éviter les opérations inutiles mais les ElseIf n'ont pas d'impact visible sur la vitesse car Visual Basic lui-même est extrêmement rapide. Ce qui ralentit de façon très significative, ce sont les appels à excel, tels les .Select et les .Insert qu'il faut éviter le plus possible si la rapidité d'exécution est importante.
Amicalement
docm
"Phenix21" wrote in message news: Re-bonjour !
Tant que je vous tiens, une autre petite question ;)
Dans mon code (voir fichier joint ci dessus), j'ai une boucle for qui parcourt toute la plage. Elle recherche des termes (U, F, m3,...) pour les remplacer par "unité", "forfait", "mètre cube",... Elle fait également de la mise en page avec de l'insertion de ligne et l'application d'un style.
Cette boucle for prend beaucoup de temps, notamment à cause d'une douzaine de ElseIf (correspondant à U, ...) à l'intérieur de la for. J'aurais aimé l'accélerer le code en faisant sauter tous les tests ElseIf pour les cellules vides. J'ai rajouté un goto, soit :
For i = 1 To 3000 If Cells(i, 3) = "" Then GoTo line1 ElseIf Cells(i, 3) = "U" Then j = 1 While Cells(i + j, 1) = "" j = j + 1 Wend Cells(i + j, 1).Select Selection.EntireRow.Insert Selection.EntireRow.Insert Cells(i + j, 2) = "L'unité : " Cells(i, 3) = "" Range(Cells(i + j, 2), Cells(i + j, 3)).Select Selection.Style = "unite"