VBA peut-on raccourcir mon code If

  • Initiateur de la discussion Initiateur de la discussion Arpette
  • 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 !

Arpette

XLDnaute Impliqué
Bonsoir à toutes et à tous,
je reprends un fichier avec des formules que je veux réécrire en code VBA. Pas de problème, sauf que je voudrais savoir si on ne peut pas écourter le code quand les formules se répète(pour juste un changement de colonne 🙁, çà va de la colonne L à V😛). Je vous joints une partie du code, enfin, là où je me suis arrêté.
Merci de votre aide.
@+
Code:
Option Explicit
Sub Test()
Dim f As Range, g As Range, h As Range, i As Range, j As Range, k As Range

With Sheets("Calcul")
    Set h = .Range("L4:L" & Range("L65536").End(xlUp).Row)
    Set i = .Range("L4:L" & Range("L65536").End(xlUp).Row)
    Set j = .Range("M4:M" & Range("M65536").End(xlUp).Row)
    'Je dois répèter l'opération jusqu'à la colonne V
        h.Formula = "=IF(FICHE!R[-2]C[-3]="" "","" "",FICHE!R[-2]C[-3])"
        i.Formula = "=IF(FICHE!R[-2]C[-3]="" "","" "",FICHE!R[-2]C[-3])"
        j.Formula = "=IF(FICHE!R[-2]C[-3]="" "","" "",FICHE!R[-2]C[-3])"
        f.Value = f.Value
        g.Value = g.Value
        h.Value = h.Value
        i.Value = i.Value
        j.Value = j.Value
End With
End Sub
 
Re : VBA peut-on raccourcir mon code If

Bonsoir,
Quelque chose comme
VB:
Option Explicit
Sub Test()
	Dim i As Long, c as range
	With Sheets("Calcul")
		for i = 12 to 22 'colonnes L(12) à V(22)
			Set c = .Range(.Cells(4,i), .Cells(.Cells(.Rows.Count, i).End(xlUp).Row,i))
			'
			'ton code
			'
		next i
	End With
End Sub
A+
 
Re : VBA peut-on raccourcir mon code If

Bonjour à toutes et à tous,
avant de raccourcir mon code, j'aimerais résoudre ce problème.
Avec le code ci-dessous, si je lance la macro, le code ne va pas jusqu'à la dernière ligne pleine de la colonne G (il en manque 2). En mode pas à pas, je n'ai pas le problème.
Merci de votre aide.
@+

Code:
With Sheets("Calcul")

    Set d = .Range("H4:H" & Range("G65536").End(xlUp).Row)
    Set e = .Range("I4:I" & Range("G65536").End(xlUp).Row)
        d.Formula = "=VLOOKUP($G4,WPT!$C$2:$F$65536,3,0)"
        e.Formula = "=VLOOKUP($G4,WPT!$C$2:$F$65536,4,0)"
        d.Value = d.Value
        e.Value = e.Value

End With
 
Re : VBA peut-on raccourcir mon code If

Bizarre,

peut-être en remplaçant Range("G65536").End(xlUp).Row par
Code:
Split(Columns(7).SpecialCells(xlCellTypeConstants, 23).Address, "$")(4)

edit: sinon, y a p-ê un lien avec les cellules G4 et C2 qui figurent dans la formule qui plaisent pas sur une colonne entière.
 
Dernière édition:
Re : VBA peut-on raccourcir mon code If

Bonjour Sotmama, je n'arrive pas à mettre ton code. Ci-joint le code qui donne la valeur cherchée. Il àa peut être une erreur dedans.
Merci de ton aide
@+
Code:
'On split en C la colonne B de la feuille "WTP" au -
With Sheets("WPT")
.Columns("C").Insert
Set c = .Range("C2")
    Do While c.Offset(0, -1) <> ""
        c = Split(c(1, 0), "-")(0)
        Set c = c.Offset(1, 0)
    Loop
    'On copie les valeur de C dans feuille "Calcul" colonne G
    .Range("C2:C65000").Copy Worksheets("Calcul").Range("G4")
End With

With Sheets("Calcul")

    Set d = .Range("H4:H" & Range("G65536").End(xlUp).Row)
    Set e = .Range("I4:I" & Range("G65536").End(xlUp).Row)
        d.Formula = "=VLOOKUP($G4,WPT!$C$2:$F$65536,3,0)"
        e.Formula = "=VLOOKUP($G4,WPT!$C$2:$F$65536,4,0)"
        d.Value = d.Value
        e.Value = e.Value
End With
 
Re : VBA peut-on raccourcir mon code If

Bonjour Hippolite, j'ai bien essayé avec ton code, mais çà ne fonctionne pas, il écrit sur la première ligne de la colonne L au lieu de la quatrième, il boucle bien mais garde que la dernière donc 65536. Voici le code comme je l'ai écrit.
Merci de aide
@+

Code:
For z = 12 To 22 'colonnes L(12) à V(22)
    Set h = .Range(.Cells(4, z), .Cells(.Cells(.Rows.Count, z).End(xlUp).Row, z))
          h.Formula = "=IF(FICHE!R[-2]C[-1]="" "","" "",FICHE!R[-2]C[-1])"
Next z
     h.Value = h.Value
Ou
Code:
For z = 12 To 22 'colonnes L(12) à V(22)
    Set h = .Range(.Cells(4, z), .Cells(.Cells(.Rows.Count, z).End(xlUp).Row, z))
          h.Formula = "=IF(FICHE!R[-2]C[-1]="" "","" "",FICHE!R[-2]C[-1])"
    h.Value = h.Value
Next z
 
Re : VBA peut-on raccourcir mon code If

Bonsoir,
Je ne comprends pas ce que tu veux faire avec ton bout de code qu'il faudrait écrire
VB:
With Sheets("Calcul")
	For z = 12 To 22 'colonnes L(12) à V(22)
		Set h = .Range(.Cells(4, z), .Cells(.Cells(.Rows.Count, z).End(xlUp).Row, z))
		h.Formula = "=IF(FICHE!R[-2]C[-1]="" "","" "",FICHE!R[-2]C[-1])"
		h.Value = h.Value
	Next z
End With
Ne voudrais-tu pas tout simplement
VB:
With Sheets("Calcul")
    for z = 12 to 22 'colonnes L(12) à V(22)
        Set h = .Range(.Cells(4,z), .Cells(.Cells(.Rows.Count, z).End(xlUp).Row,z))
        h.value = Sheets("FICHE").Range(h.Offset(-2,-3).Address)
    next z
End With
Avec seulement un extrait de code, sans fichier et peu d'explication, ma boule de cristal est défaillante.
A+
 
- 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
7
Affichages
178
Réponses
15
Affichages
788
Retour