OVH Cloud OVH Cloud

erreur macro loop

6 réponses
Avatar
Daniel Pelletier
Bonjour à tous

J'ai une erreur dans la macro suivant :
Car je voudrait copié chaque ligne de B8:K13 dans la ("Feuille_insp")
avec la condition que la cellule en F ne soit pas vide
(si F est vide vérifier la ligne suivant jusqua la ligne 13 et fin macro)

Je ne comprend pas très bien pourquoi lorsque je l'exécute pas à pas je
tourne en rond sur la ( Loop Until C <> "")

Merci



Sub copie_insp()

Dim r As Range, C As Range, A As Integer

With Worksheets("Feuille_insp")
.Unprotect
Set r = .Range("F8:F13")

For Each C In r
If C.Offset(, -3) <> "" Then
Do
If C <> "" Then
CopierinspUnRange C.Offset(, -4).Resize(, 10)
End If
Loop Until C <> ""
End If
Next
.Protect
End With
Set r = Nothing: Set C = Nothing
End Sub
Sub CopierinspUnRange(r As Range)

Dim r1 As Range
With Worksheets("Base_Insp")
Set r1 = .Range("B" & .Range("B65536").End(xlUp)(2).Row)
r.Copy r1
r1.Resize(r.Rows.Count, r.Columns.Count) = r.Value
End With
Set r1 = Nothing
End Sub

6 réponses

Avatar
michdenis
Bonjour Daniel,

Je n'ai pas compris tes conditions... je crois que je vais m'inscrire à un cours de français (analyse de texte)

Dans ta question, tu dis que tu veux copier tes données dans la "Feuille_insp" ?

Est-ce que ta source de tes données à copier est dans la même feuille que l'endroit où tu veux copier tes données.

With Worksheets("Feuille_insp")
.Unprotect
Set r = .Range("F8:F13")

à cause des 3 lignes précédentes, ta boucle se fait sur la plage définie mais sur la feuille "Feuille_insp" . Est-ce
bien ce que tu désires ?


Salutations!



"Daniel Pelletier" a écrit dans le message de news:
Bonjour à tous

J'ai une erreur dans la macro suivant :
Car je voudrait copié chaque ligne de B8:K13 dans la ("Feuille_insp")
avec la condition que la cellule en F ne soit pas vide
(si F est vide vérifier la ligne suivant jusqua la ligne 13 et fin macro)

Je ne comprend pas très bien pourquoi lorsque je l'exécute pas à pas je
tourne en rond sur la ( Loop Until C <> "")

Merci



Sub copie_insp()

Dim r As Range, C As Range, A As Integer

With Worksheets("Feuille_insp")
.Unprotect
Set r = .Range("F8:F13")

For Each C In r
If C.Offset(, -3) <> "" Then
Do
If C <> "" Then
CopierinspUnRange C.Offset(, -4).Resize(, 10)
End If
Loop Until C <> ""
End If
Next
.Protect
End With
Set r = Nothing: Set C = Nothing
End Sub
Sub CopierinspUnRange(r As Range)

Dim r1 As Range
With Worksheets("Base_Insp")
Set r1 = .Range("B" & .Range("B65536").End(xlUp)(2).Row)
r.Copy r1
r1.Resize(r.Rows.Count, r.Columns.Count) = r.Value
End With
Set r1 = Nothing
End Sub
Avatar
Daniel Pelletier
Bonjour Michdenis

Non ,ces moi qui à mal formuler voici ce que j'aurai du écrire:

Car je voudrait copié chaque ligne de B8:K13 ("Feuille_insp") dans la
("Base_Insp")
avec la condition que la cellule en F ne soit pas vide
(si F est vide vérifier la ligne suivant jusqua la ligne 13 et fin macro)

Merci de l'observation!

"michdenis" a écrit dans le message de
news:%
Bonjour Daniel,

Je n'ai pas compris tes conditions... je crois que je vais m'inscrire à un
cours de français (analyse de texte)


Dans ta question, tu dis que tu veux copier tes données dans la
"Feuille_insp" ?


Est-ce que ta source de tes données à copier est dans la même feuille que
l'endroit où tu veux copier tes données.


With Worksheets("Feuille_insp")
.Unprotect
Set r = .Range("F8:F13")

à cause des 3 lignes précédentes, ta boucle se fait sur la plage définie
mais sur la feuille "Feuille_insp" . Est-ce

bien ce que tu désires ?


Salutations!



"Daniel Pelletier" a écrit dans le message de
news:

Bonjour à tous

J'ai une erreur dans la macro suivant :
Car je voudrait copié chaque ligne de B8:K13 dans la ("Feuille_insp")
avec la condition que la cellule en F ne soit pas vide
(si F est vide vérifier la ligne suivant jusqua la ligne 13 et fin macro)

Je ne comprend pas très bien pourquoi lorsque je l'exécute pas à pas je
tourne en rond sur la ( Loop Until C <> "")

Merci



Sub copie_insp()

Dim r As Range, C As Range, A As Integer

With Worksheets("Feuille_insp")
.Unprotect
Set r = .Range("F8:F13")

For Each C In r
If C.Offset(, -3) <> "" Then
Do
If C <> "" Then
CopierinspUnRange C.Offset(, -4).Resize(, 10)
End If
Loop Until C <> ""
End If
Next
.Protect
End With
Set r = Nothing: Set C = Nothing
End Sub
Sub CopierinspUnRange(r As Range)

Dim r1 As Range
With Worksheets("Base_Insp")
Set r1 = .Range("B" & .Range("B65536").End(xlUp)(2).Row)
r.Copy r1
r1.Resize(r.Rows.Count, r.Columns.Count) = r.Value
End With
Set r1 = Nothing
End Sub





Avatar
michdenis
Bonjour Daniel,


Essaie ceci :

'---------------------------------
Sub copie_insp()

Dim r As Range, C As Range, A As Integer

With Worksheets("Feuille_insp")
.Unprotect
Set r = .Range("F8:F13")
For Each C In r
If C <> "" Then
CopierinspUnRange C.Offset(, -4).Resize(, 10)
End If
Next
.Protect
End With
Set r = Nothing: Set C = Nothing
End Sub
'---------------------------------
Sub CopierinspUnRange(r As Range)

Dim r1 As Range
With Worksheets("Base_Insp")
Set r1 = .Range("B" & .Range("B65536").End(xlUp)(2).Row)
r.Copy r1
r1.Resize(r.Rows.Count, r.Columns.Count) = r.Value
End With
Set r1 = Nothing
End Sub
'---------------------------------


Salutations!





"Daniel Pelletier" a écrit dans le message de news:
Bonjour Michdenis

Non ,ces moi qui à mal formuler voici ce que j'aurai du écrire:

Car je voudrait copié chaque ligne de B8:K13 ("Feuille_insp") dans la
("Base_Insp")
avec la condition que la cellule en F ne soit pas vide
(si F est vide vérifier la ligne suivant jusqua la ligne 13 et fin macro)

Merci de l'observation!

"michdenis" a écrit dans le message de
news:%
Bonjour Daniel,

Je n'ai pas compris tes conditions... je crois que je vais m'inscrire à un
cours de français (analyse de texte)


Dans ta question, tu dis que tu veux copier tes données dans la
"Feuille_insp" ?


Est-ce que ta source de tes données à copier est dans la même feuille que
l'endroit où tu veux copier tes données.


With Worksheets("Feuille_insp")
.Unprotect
Set r = .Range("F8:F13")

à cause des 3 lignes précédentes, ta boucle se fait sur la plage définie
mais sur la feuille "Feuille_insp" . Est-ce

bien ce que tu désires ?


Salutations!



"Daniel Pelletier" a écrit dans le message de
news:

Bonjour à tous

J'ai une erreur dans la macro suivant :
Car je voudrait copié chaque ligne de B8:K13 dans la ("Feuille_insp")
avec la condition que la cellule en F ne soit pas vide
(si F est vide vérifier la ligne suivant jusqua la ligne 13 et fin macro)

Je ne comprend pas très bien pourquoi lorsque je l'exécute pas à pas je
tourne en rond sur la ( Loop Until C <> "")

Merci



Sub copie_insp()

Dim r As Range, C As Range, A As Integer

With Worksheets("Feuille_insp")
.Unprotect
Set r = .Range("F8:F13")

For Each C In r
If C.Offset(, -3) <> "" Then
Do
If C <> "" Then
CopierinspUnRange C.Offset(, -4).Resize(, 10)
End If
Loop Until C <> ""
End If
Next
.Protect
End With
Set r = Nothing: Set C = Nothing
End Sub
Sub CopierinspUnRange(r As Range)

Dim r1 As Range
With Worksheets("Base_Insp")
Set r1 = .Range("B" & .Range("B65536").End(xlUp)(2).Row)
r.Copy r1
r1.Resize(r.Rows.Count, r.Columns.Count) = r.Value
End With
Set r1 = Nothing
End Sub





Avatar
Daniel Pelletier
Extra cela va bien Michdenis

Je l'ai fusionner avec l'autre macro (Vérification) et ca va bien.

Merci encore :-)))))))))))))))))))))))))))))))))))))))))))
Sub copie_défect()
Dim r As Range, D As Range, E As Integer
With Worksheets("Feuille_insp")
.Unprotect
Set r = .Range("F8:F13")
For Each D In r
If D <> "" Then
CopierinspUnRange D.Offset(, -4).Resize(, 10)
End If
Next
.Protect
End With
Set r = Nothing: Set D = Nothing
'_____copie défaut____________________________
Dim rg As Range, C As Range, A As Integer

With Worksheets("Feuille_insp")
.Unprotect
Set rg = .Range("E18:E37")

For Each C In rg
If C.Offset(, -3) <> "" Or C.Offset(, -2) <> "" Then
Do
If C = "" Then
C = InputBox( _
"Il manque une PRIORITE en sur la ligne " _
& C.Row & vbNewLine _
& " saisissez la maintenant" _
& " ci-dessous", "PRIORITÉ est " & _
"obligatoire", "3")
End If
If C <> "" Then
CopierUnRange C.Offset(, -3).Resize(, 12)
End If
Loop Until C <> ""
End If
Next
.Protect
End With
Set rg = Nothing: Set C = Nothing
End Sub
Sub CopierinspUnRange(r As Range)

Dim r1 As Range
With Worksheets("Base_Insp")
Set r1 = .Range("B" & .Range("B65536").End(xlUp)(2).Row)
r.Copy r1
r1.Resize(r.Rows.Count, r.Columns.Count) = r.Value
End With
Set r1 = Nothing
End Sub

Sub CopierUnRange(rg As Range)

Dim Rg1 As Range
With Worksheets("Base")
Set Rg1 = .Range("A" & .Range("A65536").End(xlUp)(2).Row)
rg.Copy Rg1
Rg1.Resize(rg.Rows.Count, rg.Columns.Count) = rg.Value
End With
Set Rg1 = Nothing
End Sub




"michdenis" a écrit dans le message de
news:
Bonjour Daniel,


Essaie ceci :

'---------------------------------
Sub copie_insp()

Dim r As Range, C As Range, A As Integer

With Worksheets("Feuille_insp")
.Unprotect
Set r = .Range("F8:F13")
For Each C In r
If C <> "" Then
CopierinspUnRange C.Offset(, -4).Resize(, 10)
End If
Next
.Protect
End With
Set r = Nothing: Set C = Nothing
End Sub
'---------------------------------
Sub CopierinspUnRange(r As Range)

Dim r1 As Range
With Worksheets("Base_Insp")
Set r1 = .Range("B" & .Range("B65536").End(xlUp)(2).Row)
r.Copy r1
r1.Resize(r.Rows.Count, r.Columns.Count) = r.Value
End With
Set r1 = Nothing
End Sub
'---------------------------------


Salutations!





"Daniel Pelletier" a écrit dans le message de
news:

Bonjour Michdenis

Non ,ces moi qui à mal formuler voici ce que j'aurai du écrire:

Car je voudrait copié chaque ligne de B8:K13 ("Feuille_insp") dans la
("Base_Insp")
avec la condition que la cellule en F ne soit pas vide
(si F est vide vérifier la ligne suivant jusqua la ligne 13 et fin macro)

Merci de l'observation!

"michdenis" a écrit dans le message de
news:%
Bonjour Daniel,

Je n'ai pas compris tes conditions... je crois que je vais m'inscrire à
un


cours de français (analyse de texte)

Dans ta question, tu dis que tu veux copier tes données dans la
"Feuille_insp" ?


Est-ce que ta source de tes données à copier est dans la même feuille
que


l'endroit où tu veux copier tes données.

With Worksheets("Feuille_insp")
.Unprotect
Set r = .Range("F8:F13")

à cause des 3 lignes précédentes, ta boucle se fait sur la plage définie
mais sur la feuille "Feuille_insp" . Est-ce

bien ce que tu désires ?


Salutations!



"Daniel Pelletier" a écrit dans le message de
news:

Bonjour à tous

J'ai une erreur dans la macro suivant :
Car je voudrait copié chaque ligne de B8:K13 dans la ("Feuille_insp")
avec la condition que la cellule en F ne soit pas vide
(si F est vide vérifier la ligne suivant jusqua la ligne 13 et fin
macro)



Je ne comprend pas très bien pourquoi lorsque je l'exécute pas à pas je
tourne en rond sur la ( Loop Until C <> "")

Merci



Sub copie_insp()

Dim r As Range, C As Range, A As Integer

With Worksheets("Feuille_insp")
.Unprotect
Set r = .Range("F8:F13")

For Each C In r
If C.Offset(, -3) <> "" Then
Do
If C <> "" Then
CopierinspUnRange C.Offset(, -4).Resize(, 10)
End If
Loop Until C <> ""
End If
Next
.Protect
End With
Set r = Nothing: Set C = Nothing
End Sub
Sub CopierinspUnRange(r As Range)

Dim r1 As Range
With Worksheets("Base_Insp")
Set r1 = .Range("B" & .Range("B65536").End(xlUp)(2).Row)
r.Copy r1
r1.Resize(r.Rows.Count, r.Columns.Count) = r.Value
End With
Set r1 = Nothing
End Sub










Avatar
michdenis
Bonjour Daniel,

Tant mieux si cela fonctionne comme tu le désires !

Une remarque ... ce n'est pas nécessairement une bonne idée de vouloir fusionner 2 procédures indépendantes dans la même
procédure .... je te suggère ceci :

Tu crées une autre procédure qui a pour but d'appeler à tour de rôle les 2 procédures principales

Sub Mes2Procédures()
copie_défect ' Première section de la macro
Vérification ' Deuxième section de la macro
End sub

Et pour lancer tous tes procédures, tu n'as qu'à lancer celle-ci : Sub Mes2Procédures()

Le code gagne en lisibilité , et c'est plus facile à déboguer le cas échéant. D'ailleurs, il est préférable de scinder
les grosses procédures en plus petite lorsque la chose est possible.

Dernier élément, Donne à tes procédures un nom qui soit significatif au travail qu'elle exécute. Cela rend encore la
tâche plus facile pour comprendre le travail que la procédure fait.

Tu peux ajouter aussi quelques commentaires ... (aide-mémoire) si dans quelques mois, tu veux modifier le code, tu
trouvera cela bien pratique de pouvoir compter sur quelques explications supplémentaires.


Salutations!



"Daniel Pelletier" a écrit dans le message de news:
Extra cela va bien Michdenis

Je l'ai fusionner avec l'autre macro (Vérification) et ca va bien.

Merci encore :-)))))))))))))))))))))))))))))))))))))))))))
Sub copie_défect()
Dim r As Range, D As Range, E As Integer
With Worksheets("Feuille_insp")
.Unprotect
Set r = .Range("F8:F13")
For Each D In r
If D <> "" Then
CopierinspUnRange D.Offset(, -4).Resize(, 10)
End If
Next
.Protect
End With
Set r = Nothing: Set D = Nothing
'_____copie défaut____________________________
Dim rg As Range, C As Range, A As Integer

With Worksheets("Feuille_insp")
.Unprotect
Set rg = .Range("E18:E37")

For Each C In rg
If C.Offset(, -3) <> "" Or C.Offset(, -2) <> "" Then
Do
If C = "" Then
C = InputBox( _
"Il manque une PRIORITE en sur la ligne " _
& C.Row & vbNewLine _
& " saisissez la maintenant" _
& " ci-dessous", "PRIORITÉ est " & _
"obligatoire", "3")
End If
If C <> "" Then
CopierUnRange C.Offset(, -3).Resize(, 12)
End If
Loop Until C <> ""
End If
Next
.Protect
End With
Set rg = Nothing: Set C = Nothing
End Sub
Sub CopierinspUnRange(r As Range)

Dim r1 As Range
With Worksheets("Base_Insp")
Set r1 = .Range("B" & .Range("B65536").End(xlUp)(2).Row)
r.Copy r1
r1.Resize(r.Rows.Count, r.Columns.Count) = r.Value
End With
Set r1 = Nothing
End Sub

Sub CopierUnRange(rg As Range)

Dim Rg1 As Range
With Worksheets("Base")
Set Rg1 = .Range("A" & .Range("A65536").End(xlUp)(2).Row)
rg.Copy Rg1
Rg1.Resize(rg.Rows.Count, rg.Columns.Count) = rg.Value
End With
Set Rg1 = Nothing
End Sub




"michdenis" a écrit dans le message de
news:
Bonjour Daniel,


Essaie ceci :

'---------------------------------
Sub copie_insp()

Dim r As Range, C As Range, A As Integer

With Worksheets("Feuille_insp")
.Unprotect
Set r = .Range("F8:F13")
For Each C In r
If C <> "" Then
CopierinspUnRange C.Offset(, -4).Resize(, 10)
End If
Next
.Protect
End With
Set r = Nothing: Set C = Nothing
End Sub
'---------------------------------
Sub CopierinspUnRange(r As Range)

Dim r1 As Range
With Worksheets("Base_Insp")
Set r1 = .Range("B" & .Range("B65536").End(xlUp)(2).Row)
r.Copy r1
r1.Resize(r.Rows.Count, r.Columns.Count) = r.Value
End With
Set r1 = Nothing
End Sub
'---------------------------------


Salutations!





"Daniel Pelletier" a écrit dans le message de
news:

Bonjour Michdenis

Non ,ces moi qui à mal formuler voici ce que j'aurai du écrire:

Car je voudrait copié chaque ligne de B8:K13 ("Feuille_insp") dans la
("Base_Insp")
avec la condition que la cellule en F ne soit pas vide
(si F est vide vérifier la ligne suivant jusqua la ligne 13 et fin macro)

Merci de l'observation!

"michdenis" a écrit dans le message de
news:%
Bonjour Daniel,

Je n'ai pas compris tes conditions... je crois que je vais m'inscrire à
un


cours de français (analyse de texte)

Dans ta question, tu dis que tu veux copier tes données dans la
"Feuille_insp" ?


Est-ce que ta source de tes données à copier est dans la même feuille
que


l'endroit où tu veux copier tes données.

With Worksheets("Feuille_insp")
.Unprotect
Set r = .Range("F8:F13")

à cause des 3 lignes précédentes, ta boucle se fait sur la plage définie
mais sur la feuille "Feuille_insp" . Est-ce

bien ce que tu désires ?


Salutations!



"Daniel Pelletier" a écrit dans le message de
news:

Bonjour à tous

J'ai une erreur dans la macro suivant :
Car je voudrait copié chaque ligne de B8:K13 dans la ("Feuille_insp")
avec la condition que la cellule en F ne soit pas vide
(si F est vide vérifier la ligne suivant jusqua la ligne 13 et fin
macro)



Je ne comprend pas très bien pourquoi lorsque je l'exécute pas à pas je
tourne en rond sur la ( Loop Until C <> "")

Merci



Sub copie_insp()

Dim r As Range, C As Range, A As Integer

With Worksheets("Feuille_insp")
.Unprotect
Set r = .Range("F8:F13")

For Each C In r
If C.Offset(, -3) <> "" Then
Do
If C <> "" Then
CopierinspUnRange C.Offset(, -4).Resize(, 10)
End If
Loop Until C <> ""
End If
Next
.Protect
End With
Set r = Nothing: Set C = Nothing
End Sub
Sub CopierinspUnRange(r As Range)

Dim r1 As Range
With Worksheets("Base_Insp")
Set r1 = .Range("B" & .Range("B65536").End(xlUp)(2).Row)
r.Copy r1
r1.Resize(r.Rows.Count, r.Columns.Count) = r.Value
End With
Set r1 = Nothing
End Sub










Avatar
Daniel Pelletier
Merci pour ces conseille je les met tous de suite en pratique.

Car oui des petite explication val de l'or après quelque mois !!!
(cela mes déje arriver de me demander a quoi sa sert)

À la prochaine

Que de beau travail peut t'on extraire des MPFE