Comment boucler une boucle

Résolu/Fermé
Pros - Modifié le 15 mars 2021 à 11:21
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 - 15 mars 2021 à 11:53
Bonjour à tous. Je bloque depuis plusieurs heurs heures sur une boucle. J'aurai besoin en fait la boucle s'arrête au 2ème résultat pourtant devrait dépasser. La boucle est la suivante

Do While Not (IsEmpty(ActiveCell))

ActiveCell.Copy
Sheets("feuil6").Select
Range("C13").Select
If ActiveCell.Value = "" Then
ActiveSheet.Paste
Sheets("feuil4").Select
ActiveCell.Offset(1, 0).Select
ActiveCell.Copy
Sheets("feuil6").Select
Else:
Selection.End(xlDown).Select
ActiveCell.Offset(58, 0).Select
ActiveSheet.Paste
Sheets("feuil4").Select
ActiveCell.Offset(1, 0).Select
ActiveCell.Copy
End If

Loop 



Je souhaite copier les donées de la feuille 4 pour la feuille6
Merci d'avance
            
                

4 réponses

Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 775
13 mars 2021 à 18:31
Bonjour,

Sous VBA, il ne faut éviter d'utiliser ActiveSheet, ActiveCell, .Select, ... plus généralement les objets actifs.

Quelle plage de données de la Feuil4 veux tu copier vers la Feuil6 ?
Sous quelles conditions ?
0
Bonjour et merci pour votre réaction. Je veux copier les données contenues dans la colonne T de la feuille4 puis coller dans feuille6, cellule C13, C78 (offset de 55 lignes pour chaque cellule copiée dans la feuille4).
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 775
13 mars 2021 à 22:26
Re,

Je ne suis pas sûr que tu exprimes correctement ton besoin ...

De C13 à C78 il y a une plage de cellules sur 55 lignes

Un offset est un décalage relatif à une position de départ.
De T1 à C13 c'est un offset de 12 lignes et -17 colonnes.

Pour copier T1:T55 de Feuil 4 vers C13:C78 de Feuil6 :
Option Explicit
Sub Test()
  Worksheets("Feuil4").Range("T1:T55").Copy Destination:=Worksheets("Feuil6").Range("C13")
End Sub

0
Bonjour patrick merci une fois de plus pour ta réaction.
J'ai un fichier excel qui contient plusieurs feuilles. Les feuilles 4 et 6 sont celles nous intéressent ici. Mon souci est le suivant
Je souhaite copier les données dans la cellule T2 de la feuille 4 puis coller dans la cellule C13 de la feuille 6. Puis aller de nouveau dans la cellule qui suit la cellule T2(T3). Copier cette valeur pour la C13 de la feuille 6. Et si cette cellule n'est pas vide, je fais un décalage de 55 ligne jusqu'à trouver une cellule vide. Puis je colle cette valeur copiée dans la feuille 4 à l'interieur. Ceci doit etre fait jusquà ce que toutes les données contenues dans le colonne T de la feuille4 soient parcourues jusqu'à la fin.
J'èspère avoir été explicite cette fois ci.
Pasez un excellent dimanche.
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 775
Modifié le 14 mars 2021 à 12:14
Bonjour,

C'est pas encore suffisamment précis ....

T2 vers C13 -> Ok
T3 vers C14 -> OK
Jusqu'au Tx Vide par exemple T7 vers C18 -> Ok

Décalage de 55 lignes, on reprend en :
- T2 + 55 = T57 ?
- T7 + 55 = T62 ?

à copier vers :
- C19 ?
- C13 + 55 = C68 ?
- C18 + 55 = C73 ?

Dans la première plage T2:T56 (ou T2:T61 selon l'hypothèse) et les suivantes :
- les cellules sont-t'elles remplies sans discontinuité suivies d'une plage vide jusqu'à la fin (T56 ou T61) ?
- peut-t'il y avoir des cellules vides entre les cellules renseignées ?

Sur les 3 premières hypothèses (T57, C19, sans discontinuité) :
Option Explicit
Sub Copier_F4_T_vers_F6_C13()
Dim celOrg As Range  'cellule origine
Dim celDst As Range  'cellule destination
Dim dern_L As Long   'dernière ligne de T
Dim nL_deb As Long   'numèro ligne début de plage de 55 cellules

  Set celOrg = Worksheets("Feuil4").Range("T2")
  dern_L = Worksheets("Feuil4").Cells(Rows.Count, "T").End(xlUp).Row
  nL_deb = celOrg.Row
  Set celDst = Worksheets("Feuil6").Range("C13")
  Do While celOrg.Row <= dern_L
    Do While celOrg.Value <> ""       'option sans discontinuité
      celDst.Value = celOrg.Value
      Set celOrg = celOrg.Offset(1)
      Set celDst = celDst.Offset(1)   'option C13, C14, ..., C18, C19, ...
    Loop
    Do While (nL_deb < celOrg.Row Or celOrg.Value = "") And celOrg.Row <= dern_L
      nL_deb = nL_deb + 55
      Set celOrg = celOrg.EntireColumn.Cells(nL_deb, 1)  'option T57, T112, ...
    Loop
  Loop

End Sub

--
Cordialement
Patrice

Personne ne peut détenir tout le savoir, c'est pour ça qu'on le partage.
0
Bonsoir patrice. J'ai Adapté la macra à mon besoin à savoir l'option T2>C13, T3>C68, T4>123 mais je constate un bugg
En effet , dans la feuille 4, entre les données il n'y'a pas de cellule vides. Mais par contre dans la feuille 6, entre 13 et 68,123,181... , il y'a des celles vides. L'ojectif est copier toutes les données contenues dans la colonne T:T de la feuille4 pour la feuille 6.
Voici ce que j'ai coller dans mon code.


Option Explicit
Sub Copier_F4_T_vers_F6_C13()
Dim celOrg As Range  'cellule origine
Dim celDst As Range  'cellule destination
Dim dern_L As Long   'dernière ligne de T
Dim nL_deb As Long   'numèro ligne début de plage de 55 cellules

  Set celOrg = Worksheets("Feuil4").Range("T2")
  dern_L = Worksheets("Feuil4").Cells(Rows.Count, "T").End(xlUp).Row
  nL_deb = celOrg.Row
  Set celDst = Worksheets("Feuil6").Range("C13")
  Do While celOrg.Row <= dern_L
  
    Do While (nL_deb < celOrg.Row Or celOrg.Value = "") And celOrg.Row <= dern_L
      nL_deb = nL_deb + 55
      Set celOrg = celOrg.EntireColumn.Cells(nL_deb, 1)  'option T57, T112, ...
    Loop
  Loop 
End sub
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 775
Modifié le 15 mars 2021 à 09:23
Bonjour,

C'est pas ce que tu avais demandé au départ,

Ton problème est difficile à comprendre :
- « mon besoin à savoir l'option T2>C13, T3>C68, T4>123 »
- « mais je constate un bugg ... entre 13 et 68,123,181... , il y'a des celles vides »
Je ne vois pas comment il pourrait en être autrement : tu laisses 54 cellules vides à la copie !!!
0
Pros > Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023
Modifié le 15 mars 2021 à 10:48
Bonjour patrice et merci pour ta réaction
Désolé si j'ai mal expliqué problème au depart. Je pensais que le code se comprend facilement.
Les autres cellules seront completées par une autre macro.
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 775 > Pros
Modifié le 15 mars 2021 à 11:53
Ce que je ne comprends pas :
- tu parles de bug,, c'est à dire d'un plantage de la macro. mais tu n'indiques pas de message d'erreur ni de ligne de code qui bugue !
- Si la macro s'exécute sans plantage, il ne s'agit pas d'un bug. C'est simplement un résultat qui ne correspond pas au résultat attendu.
- tu parles bug à propos de cellules vides « entre 13 et 68,123,181... , il y'a des celles vides », en quoi cela est-t'il anormal, que voudrais tu exactement.
Tes explications sont très confuses ...
0