Problème Macro

bonjour je rencontre un problème avec mon code.

j'ai ce message qui apprarait : la méthode range de l'objet _global a échoué

la macro est censé de marqué en C7 une valeur puis aller en C8 et répéter la manoeuvre juquà la dernière colonne puis descendre d'une ligne et recommencer.

ça fait plusieur jour/semaine que je bloque dessus, j'ai fait beaucoup de recherche mais je bloque.

Sub LitClasseurFermé()

    Dim i As Integer
    Dim j As Integer

    'Dim ChampOuCopier As Range
    i = 7 'commence à la ligne 7
    j = 3 'commence à la colonne 3
    'k = 0

   ' ChampOuCopier = "C7" ' 'Range(Cells(i, j), Cells(i, j)) ''  "C7"

    While Not Range("a" & i & "").Value = "" 'Do While Cells(i, "a") <> "" 'tant que valeur dans col A <>""
         Do While Cells(3, j) <> "" 'tant que valeur dans ligne 3 <>""

            ChampOuCopier = Range(Cells(i, j), Cells(i, j)) '"C7:F8" '  "C7"
            Chemin = Range("A" & i)        '   Range("A7")
            Fichier = Range("B" + CStr(i)) & ".XLSM" '   Range("B7") & ".XLSm"
            onglet = Range(Cells(4, j), Cells(4, j))        'Range("C4")/ Cells(4, j)
            ChampAlire = Range(Cells(3, j), Cells(3, j))   'Range("C3")/Cells(3, j)
          Range(ChampOuCopier).FormulaArray = "='" & Chemin & "\[" & Fichier & "]" & onglet & "'!" & ChampAlire 'PROBLEM ICI
         Range(ChampOuCopier) = Range(ChampOuCopier).Value
            'LitChamp ChampOuCopier, Chemin, Fichier, onglet, ChampAlire

            'Range("C7").Select
            'k = k + 1
            'Selection.Offset(0, k).Select      ' Curseur sur la droite
            'ChampOuCopier = ChampOuCopier + Selection.Offset(0, k)
            j = j + 1 'incrémenter les colonnes

        Loop

    i = i + 1 'incrémenter les lignes
    j = 3 'remettre la valeur des colonnes à 3
    k = 0 '

    Wend 'Loop

End Sub

Merci pour votre aide

Bonsoir,

Une erreur (mais peut-être plus... ) dans votre code :

            ChampOuCopier = Range(Cells(i, j), Cells(i, j)) 

Ici vous pensez donnez une adresse à votre variable "ChampOuCopier" , mais en fait c'est une erreur car

Range(Cells(i, j), Cells(i, j)) est égale à Range(Cells(i, j), Cells(i, j)) .Value, donc en fait d'adresse vous donnez la valeur contenue dans la cellule "Range(Cells(i, j), Cells(i, j)) " donc dans la suite du code où vous écrivez :

Range(ChampOuCopier).FormulaArray = "='" & Chemin & "\[" & Fichier & "]" & onglet & "'!" & ChampAlire

peut-être êtes vous en train de demander à VBA d'aller à l'adresse

Range("chaussette").etc

si dans la cellule "Range(Cells(i, j), Cells(i, j)) " contien la valeur "chaussette", alors forcément :

la méthode range de l'objet _global a échoué

Connaissez vous le mode pas à pas sous VBA ? si oui, savez vous qu'en plaçant le pointeur de la souris vous pouvez connaître la valeur des variables pendant l'exécution du code ?

@ bientôt

LouReeD

Bonjour

oui mon problème viens bien de là:

ChampOuCopier = Range(Cells(i, j), Cells(i, j))

j'ai trouvé un bout de macro pour une cellule et ça marche,

ChampOuCopier = "C7"

mais j'ai besoin de faire varier mes col et lig donc je doit passer par des variables mais je bloque.

pourtant quand il y e une erreur la valeur du champs a copier est identique.

lorsque je modifie le range: ChampOuCopier = "C7G8" par exemple.

il me copie la même valeur partout..

salut

nous disons

si vous comprenez la question vous aurez la moitie de réponse

alors nous somme pas pariel

alors essai de donnez des exemples bien clair avec des dessin . presentation.....

je crois que cela suffit

Sub tesst()
   Dim DerLig, counter, c

   DerLig = Sheets("Feuil1").Range("B1000").End(xlUp).Row
   For Each c In Range("c6:f" & DerLig)

   c.FormulaLocal = "='" & Cells(c.Row, 1) & "\[" & Cells(c.Row, 2) & ".xlsm" & "]" & Cells(4, c.Column) & "'!" & Cells(3, c.Column)
    c.Value = c.Value
    Next c
   End Sub

je rejoint une presention pour la resepecter

je parle de forlat de reference " $B$3........"

et de chemins

vous avez le choi si vous voulez caché les chemins ou d'autre chose mais faut savoir le référencer

N4OUBLIER PAS DE CHANGER LES CHEMINS ET LES CELLULES !!!!!!!!!!!!!!

dit moi si vous recontrer un probleme

6a3.xlsm (17.17 Ko)

oh SUPER c'est ça ! Merci AMIR

en revanche dans mon fichier synthese, il y a :

-des lignes où chemin (colA) et fichier (colB) ne seront pas complété (volontairement car différent fichier)

-->peut on rajouter une condition: si la cellule en colA est vide, alors ligne suivante

-des colonnes où onglet (lig3) et champs(lig4) ne seront pas completé. (certains champs ne sont pas extrait du fichier)

-->peut on rajouter une condition: si la cellule en lig3 est vide, alors colonne suivante

j'ai rajouté des commentaires dans le code pour expliquer visuellement :

Sub tesst()
   Dim DerLig, counter, c

   DerLig = Sheets("Feuil1").Range("B1000").End(xlUp).Row
   ' peut on rajouter une condition if Cells(c.Row, 1)<>"" then next C ?
   ' faire pareil quand en ligne 3 Cells(3, c.Column) (exemple en F3 rien n'est complété alors que le range doit aller jusqu'en G.)

 For Each c In Range("c6:G" & DerLig)
    c.FormulaLocal = "='" & Cells(c.Row, 1) & "\[" & Cells(c.Row, 2) & ".xlsm" & "]" & Cells(4, c.Column) & "'!" & Cells(3, c.Column)
    c.Value = c.Value
    Next c

End Sub

SALUT

Copier ce code a la place de l'ancien

Sub tesst()
   Dim DerLig, counter, c

   DerLig = Sheets("Feuil1").Range("B1000").End(xlUp).Row
   For Each c In Range("c6:f" & DerLig)

   If Not (IsEmpty(Cells(c.Row, 1))) _
      And Not (IsEmpty(Cells(c.Row, 2))) _
      And Not (IsEmpty(Cells(3, c.Column))) _
      And Not (IsEmpty(Cells(4, c.Column))) Then
    c.FormulaLocal = "='" & Cells(c.Row, 1) & "\[" & Cells(c.Row, 2) & ".xlsm" & "]" _
    & Cells(4, c.Column) & "'!" & Cells(3, c.Column)
    c.Value = c.Value
    Else
     c.Value = "Manque d'informations de fichier"
    End If
    Next c
   End Sub

es cela tu repond

Bonjour AMIR,

Merci pour le code mais j'ai encore un problème ici

    Else
     c.Value = "Manque d'informations de fichier"

ça vient écrire "Manque d'informations de fichier"

j'aimerai que ça ne fasse absolument rien, juste passé à la prochaine étape car des valeurs sont déja renseignés (à la main) et il ne faut pas les effacés.

tu crois que c'est possible ?


désolé question très bête

un grand merci pour ton aide.

SALUT

C'est simple

Sub tesst()
   Dim DerLig, counter, c

   DerLig = Sheets("Feuil1").Range("B1000").End(xlUp).Row
   For Each c In Range("c6:f" & DerLig)

   If Not (IsEmpty(Cells(c.Row, 1))) _
      And Not (IsEmpty(Cells(c.Row, 2))) _
      And Not (IsEmpty(Cells(3, c.Column))) _
      And Not (IsEmpty(Cells(4, c.Column))) Then
    c.FormulaLocal = "='" & Cells(c.Row, 1) & "\[" & Cells(c.Row, 2) & ".xlsm" & "]" _
    & Cells(4, c.Column) & "'!" & Cells(3, c.Column)
    c.Value = c.Value
   ' Else
    ' c.Value = "Manque d'informations de fichier"
    End If
    Next c
   End Sub
Rechercher des sujets similaires à "probleme macro"