J'ai cherché de trouver s'il n'y avait pas une solution dans les différents postes précédents concernant le même probleme, mais je n'ai pas vraiment trouvé, j'ai tatoné mais j'ai reviens au même probleme.
Le code est sensé, regardé sur la feuille "cdt" si dans la colonne 13 (M) il trouve la valeur #N/A et si c'est le cas, copié la valeur des cases A, B, C et E.
Puis changé de feuille, passé sur "inject"
Créer une ligne en dessous de la derniere ou il y a quelques choses d'écrit
et inscrire les valeurs de A, B, C et E, dans les cases de la ligne insérer la valeur de A en j,A; B en j,B; E en j,D; et C en j,F
Puis recommencé pour un nouveau i et un nouveau j
Mais la il me dit: Next sans for pour le i
C'est surement du code grossier que j'utilise mais c'est le seul que je sais faire pour le moment, mais si vous voulez proposer autre chose, je prend, tant que le résultat du programme est le même.
Je suppose que c'est lié soit au for, soit au if, mais je ne saurai lequel..
Précision: je ne sais pas si c'est utile de le dire, mais j'ai écris mon code dans le module sur la feuille "inject"
Code:
Sub entrée_ligne()
Dim i As Integer
Dim j As Integer
Dim A, B, C, E As String
' recherche des valeurs "#N/A" dans la feuille cdt
With Worksheets("cdt").Select
For i = 10 To 600
If Cells(i, 13) = "#N/A" Then
A = Cells(i, 1)
B = Cells(i, 2)
C = Cells(i, 3)
E = Cells(i, 5)
'ajout d'une ligne et insertion des valeurs dans différentes cases
With Worksheets("inject").Select
For j = 75 To 200
If Cells(j, 2) = "" Then Cells(j, 2).EntireRow.Insert
Cells(j, 1) = A
Cells(j, 2) = B
Cells(j, 4) = E
Cells(j, 6) = C
Next j
Next i
End With
End Sub
A priori dans ton code il manque un "end if" et un "end with".... Préférable de placer ce code dans un module standard plutôt que dans un module de feuille...
perso je coderais plut^t comme ceci :
Code:
With Worksheets("cdt")
For i = 10 To 600
If .Cells(i, 13) = "#N/A" Then
A = .Cells(i, 1)
B = .Cells(i, 2)
C = .Cells(i, 3)
E = .Cells(i, 5)
End If
End With
Merci pour cette réponse, j'ai remplacé le bout de code par ce que vous m'avez donné, mais maintenant il me dit: "end with sans with" des le premier "with" apres la boucle i
J'ai bien mis un end if aussi pour la 2eme partie...
Code:
Sub entrée_ligne()
Dim i As Integer
Dim j As Integer
Dim A, B, C, E As String
' recherche des valeurs "#N/A" dans la feuille cdt
With Worksheets("cdt")
For i = 10 To 600
If .Cells(i, 13) = "#N/A" Then
A = .Cells(i, 1)
B = .Cells(i, 2)
C = .Cells(i, 3)
E = .Cells(i, 5)
End If
End With
'ajout d'une ligne et insertion des valeurs dans différentes cases
With Worksheets("inject")
For j = 75 To 200
If Cells(j, 2) = "" Then Cells(j, 2).EntireRow.Insert
Cells(j, 1) = A
Cells(j, 2) = B
Cells(j, 4) = E
Cells(j, 6) = C
End If
End With
Next j
Next i
End Sub
Il manque une toute petite ligne dans le code de Pierrot, alors même qu'il t'a mis en garde sur ce point précis.
Petite correction:
Code:
With Worksheets("cdt")
For i = 10 To 600
If .Cells(i, 13) = "#N/A" Then
A = .Cells(i, 1)
B = .Cells(i, 2)
C = .Cells(i, 3)
E = .Cells(i, 5)
End If
next i
End With
essaye ainsi, mais pas sûr que tu obtiennes le résultat que tu cherches...
Code:
Sub entrée_ligne()
Dim i As Integer
Dim j As Integer
Dim A, B, C, E As String
' recherche des valeurs "#N/A" dans la feuille cdt
For i = 10 To 600
With Worksheets("cdt")
If .Cells(i, 13) = "#N/A" Then
A = .Cells(i, 1)
B = .Cells(i, 2)
C = .Cells(i, 3)
E = .Cells(i, 5)
End If
End With
'ajout d'une ligne et insertion des valeurs dans différentes cases
For j = 75 To 200
With Worksheets("inject")
If .Cells(j, 2) = "" Then
.Cells(j, 2).EntireRow.Insert
.Cells(j, 1) = A
.Cells(j, 2) = B
.Cells(j, 4) = E
.Cells(j, 6) = C
End If
End With
Next j
Next i
End Sub
edition : bonjour Orodreth, oui tu as raison, peut être le next i à déplacer....
Par rapport au problème énoncé, je ferais plutôt comme ceci:
Code:
Sub entree_ligne() 'correction 1 => pas d'accent dans les noms de variables ou procédures
Dim i As Integer
Dim j As Integer
Dim A, B, C, E As String
' recherche des valeurs "#N/A" dans la feuille cdt
For i = 10 To 600
With Worksheets("cdt")
If .Cells(i, 13) = "#N/A" Then
Dim j as long
'On détermine la première ligne vide du tableau en partant de la fin
j = Worksheets("inject").Range("B" & cstr(Application.rows.count)).end(xlup).row + 1
If j < 75 then
j = 75
end if
Worksheet("inject").Cells(j, 1).value = .Cells(i, 1)
Worksheet("inject").Cells(j, 2).value = .Cells(i, 2)
Worksheet("inject").Cells(j, 4).value = .Cells(i, 3)
Worksheet("inject").Cells(j, 6).value = .Cells(i, 5)
End If
End With
Next i
End Sub
Merci pour votre aide, mais je pense que mon code pose probleme car mon fichier pose probleme en fait.
Tout d'abord, j'ai essayé vos 2 programmes, celui de Pierrot boucle sur les j, et celui d'orodreth m'indique "sub ou function non définie" (je pense qu'il fallait des "s" au worksheets(inject), je les ai rajoutés et apres il me disait: "l'indice n'appartient pas à la selection"
Mais je pense que cela vient du problème plus globale de mon fichier que je vous indique ci dessous
le #N/A provient d'une recherche
Code:
M50=RECHERCHEV($D50;inject!$C$3:$G$195;1;FAUX)
en gros vu qu'il ne me trouve pas ma valeur il "affiche" N/A. Cette recherche est étirée à toute les lignes ou il y a des valeurs..
Mais en fait vu que la valeur de la cellule n'est pas "#N/A" mon code ne marche pas, il faudrait que je fasse la recherche de la valeur dans mon programme vba.
Donc je pense que ma demande de base ne vaut rien et merci pour votre aide...
Si vous avez le temps, je suis à l'écoute d'une solution.
En gros, je ne sais pas si ca se fait, mais rajouté une ligne au progamme, qui dit de faire la recherche et que s'il ne trouve pas fasse l'écriture que j'avais fait, précédement.
Merci encore pour votre aide, et je vais tenter des recherches..
dans la page de code de la feuille "cdt" avec tes bornes
Code:
Sub Ajout()
Dim i As Long, j As Long
With Worksheets("inject")
For i = 10 To 600 'adapter la plage
If IsError(Cells(i, 13)) Then
For j = 75 To 200 'adapter la plage
If .Cells(j, 2) = "" Then 'adapter la colonne
.Rows(j).Insert 'à voir
.Cells(j, 1) = Cells(i, 1)
.Cells(j, 2) = Cells(i, 2)
.Cells(j, 4) = Cells(i, 5)
.Cells(j, 6) = Cells(i, 3)
Exit For
End If
Next
End If
Next
End With
End Sub
Remarque : avec la déclaration Dim A, B, C as String A et B sont des Variants !