Erreur d'execution code VBA

Salut tout le monde,

Je suis sur un projet et ai fait ce code VBA

Sub try()
For i = 2 To 1201
    For j = 1 To 8
        For k = 2 To 1478
            If Worksheets("aircraft tree").Cells(i, j).Select = Worksheets("aircraft tree").Cells(k, 10).Select Then
                Worksheets("Sheet4").Cells(i, j).Select = Worksheets("aircraft tree").Cells(k, 11).Select
            End If
        Next k
    Next j
Next i
End Sub

Le soucis c'est que le compilateur ne veut pas l'accepter...

Les données dans les cases sont du types 1.1.1.1.1.6 ou 1.2.3.1 (c'est pour numéroter des pièces) ou alors 00191N02 (le numero de construction)

L'objectif est de constuire un abre de construction avec les numéro de construction à partir de l'arbre de numéro de pièce.

Est ce que qq'un aurait une idée du problème ?

Merci d'avance !

Bonjour

Enlève déjà tous les .select puis reteste

Oublie pas d'enlever le point devant le SELECT

Crdlt

Merci beaucoup pour la réponse rapide !

Je pense que ça va fonctionner mais le temps de calcul à l'air d'être très très long !^^

re

Ah ben logique vu qu'il y a trois boucles imbriquées. Faut peut être voir cela autrement

Sinon si ok et que cette demande est solutionnée, oublie pas de clôturer le fil en cliquant sur le V vert à coté du bouton Editer

Cordialement

Selon moi ces boucles sont les plus faciles mais vu que je débute je cherche un peu...

Il y a t il une solution pour optimiser le temps de calcul ?

Je penserai a le cloturer mais je dois complexifier petit à petit donc je vais surement avoir encore besoin d'aide !

Re

Il y a t il une solution pour optimiser le temps de calcul ?

Oui cela peut être possible mais sans fichier c'est pas évident de proposer quelque chose

Possible de l'avoir (sans données confidentielles)

Crdlt

Je continu mon code...

J'ai maintenant l'erreur "Run-time error '1004': Application-defined or objet-defined error"

Sub try()

For i = 2 To 1201

For j = 1 To 8

For k = 2 To 1478

If Worksheets("aircraft tree").Cells(i, j).Select = Worksheets("aircraft tree").Cells(k, 10).Select Then

Worksheets("Sheet4").Cells(i, j).Select = Worksheets("aircraft tree").Cells(k, 11).Select

End If

Next k

Next j

Next i

End Sub

Le code est à jour et l'erreur semble est sur la ligne 6 mais sans certitude...

Une idée svp ?

tu as remis des "select"

Autant pour moi j'ai mis le mauvais code :

Sub try()

For i = 2 To 1201

For j = 1 To 8

For k = 2 To 1478

If Worksheets("aircraft tree").Cells(i, j) = Worksheets("aircraft tree").Cells(k, 10) Then

If IsEmpty(Worksheets("aircraft tree").Cells(h, 11)) = True Then

Worksheets("Sheet4").Cells(i, j) = Worksheets("aircraft tree").Cells(k, 12)

ElseIf IsEmpty(Worksheets("aircraft tree").Cells(h, 11)) = False Then

Worksheets("Sheet4").Cells(i, j) = Right(Worksheets("aircraft tree").Cells(k, 11), 8 )

End If

End If

Next k

Next j

Next i

End Sub

C'est celui ci qui a une erreur 1004 !

Merci

bonjour,

h ne contient pas un numéro de ligne valable (h n'est pas initialisé) dans l'instruction

If IsEmpty(Worksheets("aircraft tree").Cells(h, 11)) = True Then

Merci !

Savez vous comment attribuer une couleur à une case ?

Bonjour,

avec :

 cells(i,j).Interior.Color = couleur 

Re bonjour,

Je suis toujours sur mon vba, le code fonctionne de manière générale mais ne fait pas ce que j'attend...

Sub try()

For i = 2 To 1200

For j = 1 To 8

For k = 2 To 1478

If Worksheets("aircraft tree").Cells(i, j) = Worksheets("aircraft tree").Cells(k, 10) Then

Cells(i, j).Interior.Color = 255

If IsEmpty(Worksheets("aircraft tree").Cells(k, 11)) = True Then

Worksheets("Sheet4").Cells(i, j) = Worksheets("aircraft tree").Cells(k, 12)

Else

Worksheets("Sheet4").Cells(i, j) = Right(Worksheets("aircraft tree").Cells(k, 11), 8)

End If

End If

Next k

Next j

Next i

End Sub

Ce code trace l'arbre que j'attend (je peux voir que la forme est la bonne avec le chemin de couleur), par compte pour le remplissage, si le numero de pièce est vide, je lui demande d'écrire ce qu'il y a dans la colonne suivante, le problème est que très souvent il ne prend pas en compte le fait que la première cellule soit vide et donc n'affiche rien....

Le fichier excel est disponible et j'exécute le code si dessus.

8public.xlsx (74.30 Ko)

Est ce que qq'un aurait une idée svp ?

Merci d'avance !!

Re

faudrait peut être expliquer mieux car à la vue du fichier ....

Ce qui est rouge est déjà inscrit dans la feuille et on cherche à voir si une donnée qui est en colonne J se trouve dans une cellule entre les colonnes A et H ???

J'ai surement rien compris mais bon

Crdlt

Désolé pour les explications ratées ^^

L'idée est de faire un arbre de construction qui contient les désignations des pièces (du type 00125R02,8 caractères) à partir de l'arbre qui est présent dans le document joint. En gros je veut refaire le même arbre mais en remplaçant le numéro item pièce par sa désignation.

par exemple le numéro d'item 1.1.1.1.3 correspond à la pièce 00193N03. En revanche, l'item 1.1.1.1.3.1 n'a pas de correspondance dans la colonne part je voudrais donc lui attribuer la valeur core 1 dans l'arbre.

Le resultat que j'attend est le même arbre que celui dans le document join, sans les numéros d'item mais avec le numéro de pièce ou la description lorsque le numéro n'est pas disponible.

Est ce que ces explications sont plus claires ?

Merci pour votre aide c'est vraiement génial d'avoir des conseils quand on commence sur des nouvelles chose, en l'occurence le vba ^^ !!

Re

Merci des explications.

Je pense avoir peut être compris ce qui est recherché.

En gros on a les niveaux en colonne N, et en sheet 4 l'on veut recréer l'arbre (tel que montré en colonne A à H) en mettant dans chaque cellule le numéro de pièce se trouvant en colonne K ou L ?

Crdlt

Bonjour,

Oui c'est ca, je mets en fichier join l'exemple de ce que j'obtiens et qui est incomplet ca sera le plus clair je pense !

Vous pourrez comprendre ce qui ne fonctionne pas. Par exemple, en G4, le code est censé écrire canard mais la case reste vide...

Merci !

Et bonne journée

exemple

En tatonant j'ai pu trouver qu'en utilisant cells.Value="" à la place de IsEmpty mon arbre est celui que j'attend !

Je vous remercie donc chacun pour avoir pris du temps pour répondre à mes questions !

Peut être à bientôt et bonne continuation !

re

Ok si tu as trouvé ton bonheur dans le code

Code à essayer toutefois qui sera moins long..

Sub test()
Dim ref
Application.ScreenUpdating = False
With Sheets("aircraft tree")
    For i = 2 To .Range("J" & .Rows.Count).End(xlUp).Row
    On Error Resume Next
    ref = .Range("A2:I1202").Find(.Range("J" & i), LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows).Address
    If .Range("K" & i) <> "" Then Worksheets("sheet4").Range(ref) = .Range("K" & i).Value Else Worksheets("sheet4").Range(ref) = .Range("L" & i).Value
    Next
End With
End Sub

L'arbre sera reproduit en feuille Sheet4 comme j'ai cru comprendre

Crdlt

Effectivement le code est largement plus efficace !!

qq seconde à la place de 5 bonnes minutes !

Merci beaucoup !


J'aimerais complété le code, je lui ai ajouté la couleur et les bordures mais je recois une erreur de compilation qui me dit que j'utilise un next sans For...

Sub test()

Dim ref

Application.ScreenUpdating = False

With Sheets("aircraft tree")

For i = 2 To .Range("J" & .Rows.Count).End(xlUp).Row

On Error Resume Next

ref = .Range("A2:I1202").Find(.Range("J" & i), LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows).Address

If .Range("K" & i) <> "" Then

Worksheets("sheet4").Range(ref) = .Range("K" & i).Value

Cells(ref).Interior.Color = 255

Cells(ref).Borders.Weight = xlThin

Else: Worksheets("sheet4").Range(ref) = .Range("L" & i).Value

Cells(ref).Interior.Color = 255

Cells(ref).Borders.Weight = xlThin

Next

End With

End Sub

Qu'est ce que j'aurais mal fait svp ?

Rechercher des sujets similaires à "erreur execution code vba"