aie le bug

floon

XLDnaute Nouveau
[macro] boucle bugée

Salut tout le monde,
Ca faisait un petit moment que j'etais pas venu vous embetez, j'avance doucement dans ma macro et la j'ai un bug :
je recupere des lignes sur plusieurs feuilles differentes, comme je veux connaitre de quelle feuille cela vient je rempli la colonne P avec le nom de la feuille pour chaque ligne non vide
Voici mon code :
Code:
'recup data pour affichage semaine
If Range("O1").Value = "" Then GoTo 777
Range("O1").Select
Range(Selection, Selection.End(xlDown)).Select
For Each cellule In Selection
cellule.Offset(0, 1).FormulaR1C1 = nomsemcd
Next
Range("A1").Select
Range(Selection, Selection.End(xlDown)).Select
Range(Selection, Selection.End(xlToRight)).Select
Selection.Copy
Sheets("Week").Select
Range("A1").Select
While IsEmpty(ActiveCell) = False
ActiveCell.Offset(1, 0).Activate
Wend
ActiveSheet.Paste
Le probleme c'est quand je n'ai pas de ligne ou une seule ca rempli une infinite de ligne et que du coup le copier coller ne marche plus :eek:
Si une ame charitable pouvait jeter un oeil a mon bazar, merci d avance
 
Dernière édition:

Dan

XLDnaute Barbatruc
Re : aie le bug

Bonjour,

Il ya pas mal de corrections à faire dans ton code notamment pour l'accélérer un peu.

1. Pourrais-tu me dire à quoi correspond :
- 777
- Cellule : si c'est une variable, il te faut la déclarer (DIM ...)
- Next : après cette instruction on devrait y trouver "cellule" si je ne me trompe.

2. Remplace :
Range("A1").Select
Range(Selection, Selection.End(xlDown)).Select
Range(Selection, Selection.End(xlToRight)).Select
par :
Code:
Range("A1", Range("A65536").End(xlUp)).Copy
3. Remplace plus loin, les "select" par "activate"

Le mieux serait que tu places un fichier avec données non confidentielles et le code. Ce sera plus facile de progresser je pense.

Autre chose, le sujet de ton post ... on va pas s'y retrouver. Merci de lire la charte à ce sujet.

A bientôt
 
Dernière édition:

Kobaya

XLDnaute Occasionnel
Re : aie le bug

salut floon et dan,

1. le 777 est une étiquette (un endroit dans le code) auquel on demande au programme de se rendre pour continuer son exécution.
mais il vaut mieux éviter de tels sauts en faisant, par example :
Code:
[LEFT]'recup data pour affichage semaine
If Range("O1").Value = "" Then 
    Range("O1").Select
    Range(Selection, Selection.End(xlDown)).Select
    For Each cellule In Selection
         cellule.Offset(0, 1).FormulaR1C1 = nomsemcd
    Next
    Range("A1").Select
    Range(Selection, Selection.End(xlDown)).Select
    Range(Selection, Selection.End(xlToRight)).Select
    Selection.Copy
    Sheets("Week").Select
    Range("A1").Select
    While IsEmpty(ActiveCell) = False
    ActiveCell.Offset(1, 0).Activate
    Wend
    ActiveSheet.Paste
End If[/LEFT]

2. entièrement d'accord avec dan, toujours utiliser Option Explicit en tête de module, ça évite pas mal de désagréments, du genre "faute d'orthographe" dans l'utilisation d'une variable (MaVariable = 5, puis plus loin dans le code, on essaie d'utiliser MaVriable, et on se demande pourquoi elle n'a plus la même valeur que plus haut...)


3. pour le Next, mettre après la variable associée n'est pas obligatoire, mais ça peut aider à rendre le code plus lisible, surtout s'il y a beaucoup de boucles For/Next imbriquées.
 

Dan

XLDnaute Barbatruc
Re : aie le bug - Problème de code

Re,

1. 777 : oui Kobaya cela je savais mais ici il peut aussi s'agir d'une macro ( peu probable mais cela se pourrait)
Tu as probablement raison mais nous n'avons qu'une partie du code et pour moi la question reste ouverte.

D'autre part dans l'exemple que tu proposes, la macro continue et ce n'est surement pas ce que Floon cherche à faire, puisque si A1 est vide, il veut faire autre chose que de continuer la macro que l'on voit ici.

A bientôt
 

Discussions similaires

Réponses
2
Affichages
743
Réponses
1
Affichages
731