Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Rajouter une condition dans une boucle

br44

XLDnaute Impliqué
Bonsoir le forum ,

je voudrais pouvoir inserer une condition dans une boucle existante.J'ai une option qui doit se faire que si la rèfèrence est sèlectionner .

je met à la suite la boucle consernèe puis la partie à inserer .

Boucle existante :


'Déclare le Chemin2 vers "SC.xls"
Dim Chemin2 As String
'Dèclare la variable Wb4
Dim Wb4 As Workbook
'Declare la Variable C
Dim C As String
'Declare la Variable MPl
Dim MP As Range
'Declare la Variable R
Dim R As Range



'Dèfinit la varible Client
C = Workbooks("F.Xls").Sheets("Détail").Range("G3").Value
'Dèfinit la varible Chemin2
Chemin2 = "C:\RAPID\GESTION\Sc.XLS"
'Dèfinit la varaible Wb4
Set Wb4 = Workbooks.Open(Chemin2)
'Dèfinit la variable MaPlage
Set MP = Workbooks("SC.xls").Sheets(Mois).Range("A4:A" & Range("A65536").End(xlUp).Row)

'Boucle sur la plage R et MP
For Each R In MP
'Défintit la condition de la plage p
If R.Value = C Then
'Définit et envoie les valeures vers le classeur "SC.XLS"
With Wb2.Sheets("Facture")
.Range("C16").Copy
End With
R.Offset(0, 3).PasteSpecial xlPasteValues

With Wb2.Sheets("Facture")
.Range("F12").Copy
End With
R.Offset(0, 4).PasteSpecial xlPasteValues

'Sort de la boucle
Exit For
'Fin de Condition
End If
'Sort de la plage p
Next R

Application.CutCopyMode = False
'Enregistre les données du classeur "SC.XLS"
Wb4.Save
'Ferme le Classeur "SC.XLS"
Wb4.Close
'J'èfface la plage "B5:G27"

Partie à Inserer avec la condition pour la ref "C16"

With Wb2.Sheets("Annexfacture1")
.Range("C16").Copy
End With
R.Offset(1, 3).PasteSpecial xlPasteValues

With Wb2.Sheets("Annexfacture1")
.Range("F12").Copy
End With
R.Offset(1, 4).PasteSpecial xlPasteValues

With Wb2.Sheets("Annexfacture1")
.Range("G38").Copy
End With
R.Offset(1, 5).PasteSpecial xlPasteValues

With Wb2.Sheets("Annexfacture2")
.Range("C16").Copy
End With
R.Offset(2, 3).PasteSpecial xlPasteValues

With Wb2.Sheets("Annexfacture2")
.Range("F12").Copy
End With
R.Offset(2, 4).PasteSpecial xlPasteValues

With Wb2.Sheets("Annexfacture2")
.Range("G38").Copy
End With
R.Offset(2, 5).PasteSpecial xlPasteValues

Range("A16:A18,B16:B18,C16:C18").MergeCells = False
Range("A16:A18,B16:B18,C16:C18").MergeCells = True
Rows("16:18").RowHeight = 14.25

En espèrant avoir ètè claire dans ma demande et vous remerciant pour les rèponses à suivre je vous dit donc à bientôt sur ce fil
BR44
 

br44

XLDnaute Impliqué
Re : Rajouter une condition dans une boucle

Re: bonsoir le forum ,

je me permet de relancer un petit message en simplifiant ma demande .

je voudrais que la deuxième partie de ma macro s'enclanche que si la ref:"C16" est selectionner .

J' ai pensé à une condition du style :

If Wb2.Sheets("Dètail").Range("G3").value="C16" Then

Mais la variable "C" ètant dèclarèe dans la macro pricipale je ne vois pas comment faire cette manip .

vous remerciant par avance des conseils que vous pourriez me donner je vous dis à plus sur ce fil .
BR44
 

Staple1600

XLDnaute Barbatruc
Re : Rajouter une condition dans une boucle

Bonsoir


Bien que j'ai du mal à voir ce que ton code doit réaliser

edit:

ActiveCell.Address(0,0)="C16"

If Wb2.Sheets("Dètail").Range("G3").Address(0,0)= "C16" ' ce qui est impossible (lol)


A tester
1)
If Wb2.Sheets("Dètail").Range("G3").Text="C16" Then

ou
2)
If Wb2.Sheets("Dètail").Range("G3").value Like "C16" Then
 
Dernière édition:

br44

XLDnaute Impliqué
Re : Rajouter une condition dans une boucle

Re: bonsoir Staple1600,le forum,

un grand merci à toi d'avoir rèpondu si vite . Pour rèpondre à t'as question la macros rèalise le copie de donnèes dans un autre classeur . la partie que je veux rajouter fais la même choses pour les annex seulement seul un client est consernè part cette option.

D'où ma question :il faut que ma boucle tourne normalemnt jusqu'àla ref: "C16" pour que le program prenne en compte cette option afin de complèter le classeur de destination .

pour rèsume: boucle principal pour tous sauf pour la ref:"C16" qui elle est boucle principal+option .

Tu dis:

A tester
1)
If Wb2.Sheets("Dètail").Range("G3").Text="C16" Then

ou
2)
If Wb2.Sheets("Dètail").Range("G3").value Like "C16" Then


O.k mais tu place la condition à quelle endroit dans la macro principal ?

voilà j'èspere avoir rèpondu à t'as question je te dis merci de nouveau pour le temps passè et te dis à bientôt sur se fil .
br44
 

Staple1600

XLDnaute Barbatruc
Re : Rajouter une condition dans une boucle

Re

Comme je le disais :

Bien que j'ai du mal à voir ce que ton code doit réaliser


mes différentes réponses ne sont qu'intuitives et reflètent juste ce que j'ai compris de ta question.

>Par exemple:
normalement jusqu'àla ref: "C16"

Tu voulais dire la cellule C16

Moi en première lecture j'avais compris
référence C16 (Une cellule contenant la valeur C16)

Merci pour tes explications supplémetaires.

Je te conseille en outre d'envoyer un fichier exemple.
 

Staple1600

XLDnaute Barbatruc
Re : Rajouter une condition dans une boucle

Re




J'aurais bien vu cette syntaxe à la place de ton code initial

Tu pourrais tester (pour voir si je me trompe, stp)


'
Code:
Set MP = Workbooks("SC.xls").Sheets(Mois).Range("A4:A" & Range("A65536").End(xlUp).Row)
''Boucle sur la plage R et MP
'For Each R In MP
''Défintit la condition de la plage p
'If R.Value = C Then
''Définit et envoie les valeures vers le classeur "SC.XLS"
'With Wb2.Sheets("Facture")
'    .Range("C16").Copy R.Offset(0, 3)
'    .Range("F12").Copy R.Offset(0, 4)
'End With
'Exit For
''Fin de Condition
'End If
''Sort de la plage p
'Next R

Avec des modifs identiques pour AnnexFacture1
 

Staple1600

XLDnaute Barbatruc
Re : Rajouter une condition dans une boucle

Re


Ce qui pourrait donner cela

Code:
Dim Chemin2 As String: Dim Wb4 As Workbook
'Dim C As String
Dim MP As Range, R As Range

'Dèfinit la varible Client
C = Workbooks("F.Xls").Sheets("Détail").Range("G3").Value
'Dèfinit la varible Chemin2
Chemin2 = "C:\RAPID\GESTION\Sc.XLS"
'Dèfinit la varaible Wb4
Set Wb4 = Workbooks.Open(Chemin2)
'Dèfinit la variable MaPlage
Set MP = _
Workbooks("SC.xls").Sheets(Mois).Range("A4:A" & Range("A65536").End(xlUp).Row)
'Boucle sur la plage R et MP
For Each R In MP
'Définit la condition de la plage p
If R.Value = C Then
'Définit et envoie les valeures vers le classeur "SC.XLS"
With Wb2.Sheets("Facture")
    Range("C16").Copy R.Offset(0, 3)
    .Range("F12").Copy R.Offset(0, 4)
End With
'Sort de la boucle
Exit For
'Fin de Condition
End If
'Sort de la plage p
Next [B]R[/B]
Application.CutCopyMode = False
'Enregistre les données du classeur "SC.XLS" et
''Ferme le Classeur "SC.XLS"
Wb4.Save: Wb4.Close
'J'èfface la plage "B5:G27"
'Partie à Inserer avec la condition pour la ref "C16"
With Wb2.Sheets("Annexfacture1")
'ici on on peut aussi tester
'With Wb2
'.Sheets("Annexfacture1")
'le code
End With
'.Sheets("Annexfacture2")
'le code
'End With
'End With
'le code

    .Range("C16").Copy [B]R.[/B]Offset(1, 3)
    .Range("F12").Copy R.Offset(1, 4)
    .Range("G38").Copy R.Offset(1, 5)
End With
With Wb2.Sheets("Annexfacture2")
    .Range("C16").Copy R.Offset(2, 3)
    .Range("F12").Copy R.Offset(2, 4)
    .Range("G38").Copy R.Offset(2, 5)
End With
'[B]Pourquoi fusionnier puis défusionner ?[/B]
'Range("A16:A18,B16:B18,C16:C18").MergeCells = False
'Range("A16:A18,B16:B18,C16:C18").MergeCells = True
Rows("16:18").RowHeight = 14.25

La le R je comprends pas
 
Dernière édition:

br44

XLDnaute Impliqué
Re : Rajouter une condition dans une boucle

re: Bonsoir Staple1600,le forum

grand merci à toi pour toute ses rèponses je tests t'a dernière proposition et te dis à plus .
br44
 

br44

XLDnaute Impliqué
Re : Rajouter une condition dans une boucle

re: Rebonsoir à tous

Bon mes explications n'ètant pas claire je crois que le petit fichier qui suit vous aideras peut-être à mieux comprendre ceque je veux obtenire .


Comme Specifier sur la première page du dossier la partie insertion de ligne est rèsolue .

Je parle aussi de la variable C de la boucle principal à moidifier (peut-être) ,car je croie que le problème est là .

Explication:

La variable C est definit comme celà :

C= Workbooks("F.Xls").Sheets("Dètail").Range("G3").Value donc la totalitè des clients

se qui donne la condition :

if R.Value= C Then

Or il faut qu'il prennent en compte l'exception pour le client ref "C18" (dans le fichier joint)

Ce qui donnerais pour la condition :
If Workbooks("F.Xls").Sheets("Dètail").Range("G3").Value="C18" Then
mais comment faire une suite logique dez tout ça ?

Bon en espèrant que se soit plus claire je vous dis un grand merçi par avance et a bientôt sur se fil .
Br44
 

Pièces jointes

  • Copie de dossier.xls
    46 KB · Affichages: 46
  • Copie de dossier.xls
    46 KB · Affichages: 44
  • Copie de dossier.xls
    46 KB · Affichages: 47

br44

XLDnaute Impliqué
Re : Rajouter une condition dans une boucle

Re: bonsoir le forum ,Staple1600

j'ai peut-être une idèe que je vais tester . Transformer la partie à inserer en une boucle à part entière et indèpendande .
Je vous tient au courant et vous dis à plus sur se fil .

BR44
 

br44

XLDnaute Impliqué
Re : Rajouter une condition dans une boucle

re: bonsoir à tous le forum,

se petit message pour mêtre fin à se fil .
J 'ouvrirai un nouveau post plus tard .

Grand merçi à tous ceux qui ont pris un peu de temps pour s'interesser à mon problème .

je vous dis donc à bientôt sur le forum et une bonne soirèe

Amicalement Br44
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…