Amélioration code boucle

  • Initiateur de la discussion Initiateur de la discussion patsyl60
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Re : Amélioration code boucle

Hello,

Peut-être comme ceci..
Code:
    Dim i As Integer
    
    For i = 2 To Range("D65536").End(xlUp).Row
        If Cells(i, 4).Value <> "" Then
            Cells(i, 1).Value = "A" & i
            Cells(i, 2).Value = "B" & i
            Cells(i, 3).Value = "C" & i
            Cells(i, 8).Value = "H" & i
            Cells(i, 9).Value = "I" & i
            Cells(i, 11).Value = "K" & i
        End If
    Next i
 
Re : Amélioration code boucle

bonjour Patsyl,Hulk

une autre

For d = 3 To Range("D1100").End(xlUp).Row
Cells(d, 1) = Cells(d - 1, 1)
Cells(d, 2) = Cells(d - 1, 2)
Cells(d, 3) = Cells(d - 1, 3)
Cells(d, 8) = Cells(d - 1, 8)
Cells(d, 9) = Cells(d - 1, 9)
Cells(d, 11) = Cells(d - 1, 11)
Next d

à bientôt
 
Re : Amélioration code boucle

For t = 3 To Range("D65536").End(xlUp).Row
If IsEmpty(Range("A" & t)) Then Range("A" & t) = Range("A" & t - 1)
If IsEmpty(Range("B" & t)) Then Range("B" & t) = Range("B" & t - 1)
If IsEmpty(Range("C" & t)) Then Range("C" & t) = Range("C" & t - 1)
If IsEmpty(Range("H" & t)) Then Range("H" & t) = Range("H" & t - 1)
If IsEmpty(Range("I" & t)) Then Range("I" & t) = Range("I" & t - 1)
If IsEmpty(Range("K" & t)) Then Range("K" & t) = Range("K" & t - 1)
Next t
 
Re : Amélioration code boucle

Bonjour / Bonsoir à tous, Salut Hulk
Holala, bien en retard le Efgé 😛
Mais je l'ai fait, je le poste :
Code:
 Sub ESSAI()
Dim Derligne As Long
[COLOR=seagreen][B]'Trouver la denière cellule (ligne) non vide de la colonne D[/B][/COLOR]
Derligne = Range("D" & Application.Rows.Count).End(xlUp).Row
[B][COLOR=seagreen]'remplir les lignes jusqu'a la derniere ligne de la colonne D en paetant de la ligne 3[/COLOR][/B]
For i = 3 To Derligne
   [COLOR=seagreen][B]'Pöur les colonnes de 1 à 3 (A à C)[/B][/COLOR]
    For k = 1 To 3
       [COLOR=seagreen][B]'Si la celule en dessous est vide[/B][/COLOR]
        If Cells(i + 1, k) = "" Then Cells(i, k) = Cells(i - 1, k)
    [B][COLOR=seagreen]'Prochaine colonne[/COLOR][/B]
    Next k
  [COLOR=seagreen][B]  'Pöur les colonnes de 1 à 3 (H à I)[/B][/COLOR]
    For k = 8 To 9
       [B][COLOR=seagreen]'Si la celule en dessous est vide[/COLOR][/B]
        If Cells(i + 1, k) = "" Then Cells(i, k) = Cells(i - 1, k)
    [COLOR=seagreen][B]'Prochaine colonne[/B][/COLOR]
    Next k
   [COLOR=seagreen][B]'Si la colonne K est vide ....[/B][/COLOR]
    If Cells(i + 1, 11) = "" Then Cells(i, 11) = Cells(i - 1, 11)
[COLOR=seagreen][B]"Ligne suivante[/B][/COLOR]
Next i
End Sub
Cordialement
EDIT: Après relecture, Hulk me semble bien placé (et ce n"est par peur de la force physique.... 😀 😉 )
 
Dernière édition:
Re : Amélioration code boucle

Bonsoir à tous
Abondance de biens ne nuit pas...
Une autre proposition :
Code:
[COLOR="DarkSlateGray"][B]Sub toto()
Dim lCol, tCol$, i&, j&
   lCol = Array("A", "B", "C", "H", "I", "K")
   tCol = "D"
   For i = 3 To IIf(IsEmpty(Range(tCol & 2)), 1, Columns(tCol).Resize(Range(tCol & 1).End(xlDown).Row, 1).Rows.Count)
      For j = 0 To UBound(lCol)
         If IsEmpty(Range(lCol(j) & i)) Then
            Range(lCol(j) & i).Value = Range(lCol(j) & i).Offset(-1, 0).Value
         End If
      Next j
   Next i
End Sub[/B][/COLOR]
ROGER2327
#3553


Lundi 9 Merdre 137 (Vidange, V)
7 Prairial An CCXVIII
2010-W21-3T21:58:12Z
 
Re : Amélioration code boucle

Suite...
Simplifions :
Code:
[COLOR="DarkSlateGray"][B]Sub tata()
Dim lCol, tCol$, i&, j&
   lCol = Array("A", "B", "C", "H", "I", "K")
   tCol = "D"
   i = 3
   Do Until IsEmpty(Range(tCol & i))
      For j = 0 To UBound(lCol)
         If IsEmpty(Range(lCol(j) & i)) Then
            Range(lCol(j) & i).Value = Range(lCol(j) & i).Offset(-1, 0).Value
         End If
      Next j
      i = i + 1
   Loop
End Sub[/B][/COLOR]
ROGER2327
#3554


Lundi 9 Merdre 137 (Vidange, V)
7 Prairial An CCXVIII
2010-W21-3T22:20:37Z
 
Re : Amélioration code boucle

Bonjour Hulk, Bebere, Habitude, Efgé, ROGER2327

Une fois de plus, un grand merci pour votre aide.

Je vais choisir entre la solution d' HABITUDE et celle de ROGER2327.

Pour une facilité de lecture de la macro, j'aurais tendance à choisir celle d'HABITUDE.

Je n'ai pas vu de différence au résultat final. Y'a t-il quelque chose que je n'ai pas remarqué ?

Encore merci à tous pour votre travail sur ce super forum.

Patsyl60 😉
 
Re : Amélioration code boucle

Re...
(...) Je n'ai pas vu de différence au résultat final. (...)
Il y en a au moins une : la procédure d'Habitude ne fait pas exactement la même chose que votre procédure originale. Si par exemple vous laissez vide la cellule D5, votre procédure (comme la mienne) arrête le traitement à la ligne 4.
Celle d'Habitude continue jusqu'à la dernière ligne non vide de la colonne D. C'est d'ailleurs la raison qui m'a fait proposer une solution conforme à votre modèle.​
ROGER2327
#3567


Mardi 10 Merdre 137 (Saint Barbapoux, amant, SQ)
8 Prairial An CCXVIII
2010-W21-4T11:58:21Z
 
Re : Amélioration code boucle

Merci ROGER2327 pour cette précison.( je n'avais pas testé cette possibilité avec une cellule vide comprise entre 2 celulles remplies dans ma colonne D.)

J'adopte ta macro.

Bonne fin de journée.

Patsyl60 😉
 
Re : Amélioration code boucle

Difficile de rivaliser avec Roger l'artiste.
L'amélioration de code est sa spécialité

Mais ceci devrait faire l'affaire.

Code:
For t = 3 To Range("D65536").End(xlUp).Row
    If IsEmpty(Range("D" & t)) Then Exit For
    If IsEmpty(Range("A" & t)) Then Range("A" & t) = Range("A" & t - 1)
    If IsEmpty(Range("B" & t)) Then Range("B" & t) = Range("B" & t - 1)
    If IsEmpty(Range("C" & t)) Then Range("C" & t) = Range("C" & t - 1)
    If IsEmpty(Range("H" & t)) Then Range("H" & t) = Range("H" & t - 1)
    If IsEmpty(Range("I" & t)) Then Range("I" & t) = Range("I" & t - 1)
    If IsEmpty(Range("K" & t)) Then Range("K" & t) = Range("K" & t - 1)
Next t


Ou
peut être

Code:
c = Array(1, 2, 3, 8, 9, 11)

For t = 3 To Range("D65536").End(xlUp).Row
    If IsEmpty(Range("D" & t)) Then Exit For
    
    For j = 0 To 5   'UBound(c)
        If IsEmpty(Cells(t, c(j))) Then Cells(t, c(j)) = Cells(t - 1, c(j))
    Next j
Next t
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
4
Affichages
563
  • Question Question
Microsoft 365 Suivi charge/capa
Réponses
10
Affichages
339
Réponses
15
Affichages
779
Réponses
19
Affichages
650
Réponses
16
Affichages
553
  • Question Question
Microsoft 365 Remplissage auto
Réponses
14
Affichages
371
Réponses
5
Affichages
278
  • Question Question
Microsoft 365 probleme d heure
Réponses
11
Affichages
253
Retour