Completer les colonnes d'une ref a partir d'un autre fichier

Bonjour à tous,

Je suis sur un classeur nommé "example 2eme master" et je souhaite que la macro me remplisse les colonnes quand je lui donne une valeur dans la colonne.

Vu que je ne sais pas trop ou ira excel, je lui donne l'endroit de chaque cellule mais il ne sont pas dans le meme dossier mais sont tous les ouverts pour le moment

J'ai écrit cette macro, qui ne fonctionne décidement pas ... j'ai une erreur d'éxécution '9' : l'indice n'appartient pas à la sélection.

Je serais content si vous m'aidiez

Je vous remercie tous d'avance

Sub info_master()
If Not IsEmpty(Range("D2")) Then
Dim i As Integer
i = 2
    While Workbooks("DATA-FROM-DDM exemple.xlsx").Worksheets("ALL PARTS").Cells(i, 1) <> "" And Workbooks("example 2eme master - Copie.xls").Worksheets("MENU").Cells("D2").Value <> Workbooks("DATA-FROM-DDM exemple.xlsx").Worksheets("ALL PARTS").Cells(i, 1)
    Workbooks("DATA-FROM-DDM exemple.xlsx").Sheets("ALL PARTS").Activate
    i = i + 1
    Wend
Workbooks("example 2eme master - Copie.xls").Sheets("MENU").Cells("D2").Value = Cells(i, 1)
Workbooks("example 2eme master - Copie.xls").Sheets("MENU").Cells("E2").Value = Cells(i, 2)
Workbooks("example 2eme master - Copie.xls").Sheets("MENU").Cells("G2").Value = Cells(i, 3)

End If
End Sub

Re,

Sans avoir essayé de comprendre ton code, l'erreur est typique d'un nom mal orthographié au niveau du classeur ou au niveau de l'onglet. Vérifie tout ça...

Bonjour,

j'ai déjà vérifié plusieurs fois et non...

Mon code n'est pas super compliqué en soit

Re,

C'est normal les extensions xls et xlsx ?

Non ton code n'a rien de compliqué en soit mais sans les fichiers qui vont avec il est invériafiable...

Il semblerait que oui j'ai tout simplement copier l'extension de mon fichier.

Tu trouveras mes fichiers ici.

Je travaille actuellement sur l'excel 2eme master.

Toutes mes données sont dans DATA-FROM-DDM

Re,

Heureusement que tu avais vérifié !...

Les fichier se nomment FICHIER UTILISE example 2eme master - Copie.xls et FICHIER UTILISE example 1ere master.xls au lieu de example 2eme master - Copie.xls et example 1ere master.xls...

La syntaxe Cells("D2") n'est pas correcte soit c'est Range("D2") soit c'est Cells(2, 4) !

Ton code corrigé :

Sub info_master()
If Not IsEmpty(Range("D2")) Then
Dim i As Integer
i = 2
    While Workbooks("DATA-FROM-DDM exemple.xlsx").Worksheets("ALL PARTS").Cells(i, 1) <> "" And Workbooks("FICHIER UTILISE example 2eme master - Copie.xls").Worksheets("MENU").Range("D2").Value <> Workbooks("DATA-FROM-DDM exemple.xlsx").Worksheets("ALL PARTS").Cells(i, 1)
    Workbooks("DATA-FROM-DDM exemple.xlsx").Sheets("ALL PARTS").Activate
    i = i + 1
    Wend
Workbooks("FICHIER UTILISE example 2eme master - Copie.xls").Sheets("MENU").Range("D2").Value = Cells(i, 1)
Workbooks("FICHIER UTILISE example 2eme master - Copie.xls").Sheets("MENU").Range("E2").Value = Cells(i, 2)
Workbooks("FICHIER UTILISE example 2eme master - Copie.xls").Sheets("MENU").Range("G2").Value = Cells(i, 3)

End If
End Sub

J'ai vraiment honte ... J'ai vérifié au moins 3 fois avant de poster ce sujet... une fois quand tu m'a redemandé... Vraiment excuse moi..

Je vais essayé maintenant de le faire sans ouvrir mon fichier de donnée, tu voudras bien m'aider quand même si je n'y parvient pas?

Re,

Pff !... Bien sûr...

J'ai essayé plusieurs choses celle ci m'a l'air plutot simple mais ne fonctionne pas... je l'ai piqué sur le site http://pise.info/vb/partie8.htm. Il m'affiche que j'ai une erreur d'exécution 9 : lindice n'appartient pas à la sélection. Comme si ma ligne n'ouvrait pas le fichier :/

Sub info_master()
If Not IsEmpty(Range("D2")) Then
Dim i As Integer
i = 2
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Open "C:\Users\Nicky\Desktop\Project 4_Informatisation\EXAMPLE SUR INTERNET\DATA FROM DDM\DATA-FROM-DDM exemple.xlsx" For Input As #1
    While Workbooks("DATA-FROM-DDM exemple.xlsx").Worksheets("ALL PARTS").Cells(i, 1) <> "" And Workbooks("FICHIER UTILISE example 2eme master - Copie.xls").Worksheets("MENU").Range("D2").Value <> Workbooks("DATA-FROM-DDM exemple.xlsx").Worksheets("ALL PARTS").Cells(i, 1)
    Workbooks("DATA-FROM-DDM exemple.xlsx").Sheets("ALL PARTS").Activate
    i = i + 1
    Wend
Workbooks("FICHIER UTILISE example 2eme master - Copie.xls").Sheets("MENU").Range("D2").Value = Cells(i, 1)
Workbooks("FICHIER UTILISE example 2eme master - Copie.xls").Sheets("MENU").Range("E2").Value = Cells(i, 4)
Workbooks("FICHIER UTILISE example 2eme master - Copie.xls").Sheets("MENU").Range("G2").Value = Cells(i, 3)
Close #1

End If
End Sub

Sinon j'ai essayé le code ci dessous au lieu de ma ligne de ''''''' mais ca ne fonctionne pas non plus je désespère...

Dim T() as string
Open "C:\Users\Nicky\Desktop\Project 4_Informatisation\EXAMPLE SUR INTERNET\DATA FROM DDM\DATA-FROM-DDM exemple.xlsx" As #1 For Input
k = -1
While Not Eof(1)
  k = k + 1
  Redim Preserve T(k)
  Line Input #1, T(k)
Wend

Re,

Sans ouvrir le classeur je ne sais pas faire. J'ouvre, je récupère, puis je ferme... Mais regarde comme le code ci-dessous est bien plus clair avec juste quelques variables :

Sub info_master()
Dim CD As Workbook 'déclare la variable CD (Classeur de Destination)
Dim OD As Worksheet 'déclare la variable OD (Onglet de Destination)
Dim CRF As Workbook 'déclare la variable CRF (Classeur de ReFérence)
Dim ORF As Workbook 'déclare la variable ORF (Onglet de ReFérence)
Dim I As Integer ''déclare la variable I (Incrément)

Set CD = ThisWorkbook 'définit le classeur de destination CD (=ce classeur)
Set OD = CD.Sheets("Menu") 'définit l'onglet de destination OD
On Error Resume Next 'gestion des erreurs (en cas d'erreur passe à la ligne suivante)
Set CRF = Workbooks("DATA-FROM-DDM exemple.xlsx") 'définit le classeur de référence CRF (génère une erreur si ce classeur n'est pas ouvert)
If Err <> 0 Then 'condition : si une erreur a été générée
    Err.Clear 'supprime l'erreur
    'ouvre le classeur
    Workbooks.Open ("C:\Users\Nicky\Desktop\Project 4_Informatisation\EXAMPLE SUR INTERNET\DATA FROM DDM\DATA-FROM-DDM exemple.xls")
    Set CRF = ActiveWorkbook 'définit le classeur de référence CRF
End If 'fin de la condition
On Error GoTo 0 'annule la gestion des erreurs
ORF = CRF.Sheets("ALL PARTS") 'définit l'onglet de référence ORF
If Not IsEmpty(OD.Range("D2")) Then 'condition : si D2 de l'onglet OD n'est pas vide
    I = 2 'initialise I
    'tant que la cellule ligne I, colonne 1 (=A) de l'onglet de référence ORF n'est pas vide
    'et qu'elle est différente de la cellule D2 de l'onglet OD
    While ORF.Cells(I, 1) <> "" And ORF.Cells(I, 1) <> OD.Range("D2")
        I = I + 1 'incrémente I
    Wend 'exécute la boucle
    OD.Range("D2") = ORF.Cells(I, 1) 'récupère en D2 de l'onglet OD la valeur de la cellule ligne I colonne 1 (=A) de l'onglet ORF
    OD.Range("E2") = ORF.Cells(I, 4) 'récupère en E2 de l'onglet OD la valeur de la cellule ligne I colonne 4 (=D) de l'onglet ORF
    OD.Range("G2") = ORF.Cells(I, 3) 'récupère en G2 de l'onglet OD la valeur de la cellule ligne I colonne 3 (=C) de l'onglet ORF
    CRF.Close False 'ferme le classeur de référence CRF sans enregistrer les modification
    CD.Save 'sauve le classeur de destination CD (ce classeur
End If
End Sub

Bonjour Tautheme,

Je viens d'essayé ton code, il y avait une erreur je crois sur la définition de ORF, je l'ai définit comme un worksheet et pas un workbook vu que j'avais une erreur sur la ligne

ORF = CRF.Sheets("ALL PARTS") 'définit l'onglet de référence ORF

mais maintenant j'ai encore une erreur mais toujours sur la même ligne :/ Des fois, il me donne l'erreur 91 variable objet ou variable de bloc with non définie et des fois ile me donne l'erreur 9 l'indice n'appartient pas à la sélection. Je t'avouerais que je scrute toutes les lignes pour voir où il peut avoir un problème.

J'ai également changé la destination du fichier le chemin.

Voici le code

Sub info_master()
Dim CD As Workbook 'déclare la variable CD (Classeur de Destination)
Dim OD As Worksheet 'déclare la variable OD (Onglet de Destination)
Dim CRF As Workbook 'déclare la variable CRF (Classeur de ReFérence)
Dim ORF As Worksheet 'déclare la variable ORF (Onglet de ReFérence)
Dim I As Integer ''déclare la variable I (Incrément)

Set CD = ThisWorkbook 'définit le classeur de destination CD (=ce classeur)
Set OD = CD.Sheets("Menu") 'définit l'onglet de destination OD
On Error Resume Next 'gestion des erreurs (en cas d'erreur passe à la ligne suivante)
Set CRF = Workbooks("DATA-FROM-DDM exemple.xlsx") 'définit le classeur de référence CRF (génère une erreur si ce classeur n'est pas ouvert)
If Err <> 0 Then 'condition : si une erreur a été générée
   Err.Clear 'supprime l'erreur
   'ouvre le classeur
   Workbooks.Open ("C:\Users\Nicky\Desktop\Project 4_Informatisation\EXAMPLE SUR INTERNET\Projet\DATA-FROM-DDM exemple.xls")
    Set CRF = ActiveWorkbook 'définit le classeur de référence CRF
End If 'fin de la condition
On Error GoTo 0 'annule la gestion des erreurs
ORF = CRF.Sheets("ALL PARTS") 'définit l'onglet de référence ORF
If Not IsEmpty(OD.Range("D2")) Then 'condition : si D2 de l'onglet OD n'est pas vide
   I = 2 'initialise I
   'tant que la cellule ligne I, colonne 1 (=A) de l'onglet de référence ORF n'est pas vide
   'et qu'elle est différente de la cellule D2 de l'onglet OD
   While ORF.Cells(I, 1) <> "" And ORF.Cells(I, 1) <> OD.Range("D2")
        I = I + 1 'incrémente I
   Wend 'exécute la boucle
   OD.Range("D2") = ORF.Cells(I, 1) 'récupère en D2 de l'onglet OD la valeur de la cellule ligne I colonne 1 (=A) de l'onglet ORF
   OD.Range("E2") = ORF.Cells(I, 4) 'récupère en E2 de l'onglet OD la valeur de la cellule ligne I colonne 4 (=D) de l'onglet ORF
   OD.Range("G2") = ORF.Cells(I, 3) 'récupère en G2 de l'onglet OD la valeur de la cellule ligne I colonne 3 (=C) de l'onglet ORF
   CRF.Close False 'ferme le classeur de référence CRF sans enregistrer les modification
   CD.Save 'sauve le classeur de destination CD (ce classeur
End If
End Sub

Ton code est vraiment top, tout est expliqué du coup c'est vraiment simple de comprendre ce que fait le code mais j'ai pas assez de connaissance pour résoudre les bogues.. Mais bon pour mes premieres macros je trouve que ca le fait En tout cas vraiment merci encore pour ton code et surtout pour avoir mis les commentaires

Bonjour,

Pour l'erreur 9 je t'ai déjà dit dans mon premier post. Revérifie soit au niveau de classeur soit au niveau de l'onglet !...

Je nomme souvent mes variables de type Workbook avec un C (Classeur) comme premier caractère et mes variables de type Worksheet avec un O (Onglet) comme premier caractère.

CD => Classeur Destination

OD => Onglet destination (CD.Sheets("Menu"))

CRF => Classeur de RéFérence

ORF => Onglet de RéFérence (CRF.Sheets("ALL PARTS")

J'ai fait tourné avec les fichiers que tu as mis en pièce jointe et je n'ai pas eu de bug. Mais le fichier FICHIER UTILISE example 1ere master.xls ne sert à rien dans le code, je ne comprends pas pourquoi tu l'as mis ?!...

Pour l'autre erreur, je ne vois pas... Je pense qu'il doit y avoir une différence dans le noms des onglets des différents classeurs et le code ne correspond pas...

Il manquait le x à xlsx, l'extension trop bizarre je trouve mais bon

Oui j'ai vu ça, je trouve que c'est une superbe idée vu qu'une fois qu'ils sont nommés, ça prend nettement moins de place dans tes macros ! Je connaissais pas et j'avoue que c'est bien pratique.

Oui j'avais compris, avec les explications que tu as mis sur le code genre ORF Onglet de RéFérence.

Réellement, je pensais que des choses allaient changé avec ce dossier mais j'ai convaincu mon manager de poussé un peu les macros pour faire qu'un type de fichier donc il ne sert à rien, désolé.

J'ai renommé mon fichier ainsi que les onglets pour éviter les majuscules, le code actuelle donne ça avec toujours l'erreur 91 : variable objet ou variable de bloc with non définie sur la ligne ORF = CRF.Sheets("PARTS")

Sub info_master()
Dim CD As Workbook 'déclare la variable CD (Classeur de Destination)
Dim OD As Worksheet 'déclare la variable OD (Onglet de Destination)
Dim CRF As Workbook 'déclare la variable CRF (Classeur de ReFérence)
Dim ORF As Worksheet 'déclare la variable ORF (Onglet de ReFérence)
Dim I As Integer ''déclare la variable I (Incrément)

Set CD = ThisWorkbook 'définit le classeur de destination CD (=ce classeur)
Set OD = CD.Sheets("Menu") 'définit l'onglet de destination OD
On Error Resume Next 'gestion des erreurs (en cas d'erreur passe à la ligne suivante)
Set CRF = Workbooks("DATAS.xlsx") 'définit le classeur de référence CRF (génère une erreur si ce classeur n'est pas ouvert)
If Err <> 0 Then 'condition : si une erreur a été générée
   Err.Clear 'supprime l'erreur
   'ouvre le classeur
   Workbooks.Open ("C:\Users\Nicky\Desktop\Project 4_Informatisation\EXAMPLE SUR INTERNET\DATA FROM DDM\DATAS.xlsx")
    Set CRF = ActiveWorkbook 'définit le classeur de référence CRF
End If 'fin de la condition
On Error GoTo 0 'annule la gestion des erreurs
ORF = CRF.Sheets("PARTS") 'définit l'onglet de référence ORF
If Not IsEmpty(OD.Range("D2")) Then 'condition : si D2 de l'onglet OD n'est pas vide
   I = 2 'initialise I
   'tant que la cellule ligne I, colonne 1 (=A) de l'onglet de référence ORF n'est pas vide
   'et qu'elle est différente de la cellule D2 de l'onglet OD
   While ORF.Cells(I, 1) <> "" And ORF.Cells(I, 1) <> OD.Range("D2")
        I = I + 1 'incrémente I
   Wend 'exécute la boucle
   OD.Range("D2") = ORF.Cells(I, 1) 'récupère en D2 de l'onglet OD la valeur de la cellule ligne I colonne 1 (=A) de l'onglet ORF
   OD.Range("E2") = ORF.Cells(I, 4) 'récupère en E2 de l'onglet OD la valeur de la cellule ligne I colonne 4 (=D) de l'onglet ORF
   OD.Range("G2") = ORF.Cells(I, 3) 'récupère en G2 de l'onglet OD la valeur de la cellule ligne I colonne 3 (=C) de l'onglet ORF
   CRF.Close False 'ferme le classeur de référence CRF sans enregistrer les modification
   CD.Save 'sauve le classeur de destination CD (ce classeur
End If
End Sub

Je vais regarder sur internet en profondeur pour trouver ce qui cloche :/

En tout cas, merci beaucoup encore ThauThème!

Rechercher des sujets similaires à "completer colonnes ref partir fichier"