Simplifier le code vba Le sujet est résolu

Y compris Power BI, Power Query et toute autre question en lien avec Excel
Avatar du membre
lillysg
Membre habitué
Membre habitué
Messages : 120
Inscrit le : 14 juillet 2014
Version d'Excel : 2013

Message par lillysg » 29 décembre 2015, 10:30

Bonjour à tous :D

J'ai une plage sur une ligne où la dernière colonne de cette ligne est variable.
Je cherche à copier la valeur de chaque cellule non vide de cette ligne (en rouge dans le code) dans d'autres colonnes qui sont disjointes (en bleu dans le code)
Pour le moment, voici un code simplifié du code que j'ai et qui fonctionne bien... mais long car ma ligne de départ comporte au maximum 57 colonnes...

Donc j'aimerai simplifier... et que le code s'arrête quand toutes les cellules non vides de départ ont été copier dans les colonnes d'arrivée qui ont un pas de 3....

Merci d'avance :D

'Copier sur colonne disjointe si cellule de la plage de départ non vide

For j = 23 To 41
If Cells(5, 2) <> Empty Then
Cells(3, 23).Value = Cells(5, 2).Value
Else
Exit For
End If
If Cells(5, 3) <> Empty Then
Cells(3, 26).Value = Cells(5, 3).Value
Else
Exit For
End If
If Cells(5, 4) <> Empty Then
Cells(3, 29).Value = Cells(5, 4).Value
Else
Exit For
End If
If Cells(5, 5) <> Empty Then
Cells(3, 32).Value = Cells(5, 5).Value
Else
Exit For
End If
If Cells(5, 6) <> Empty Then
Cells(3, 35).Value = Cells(5, 6).Value
Else
Exit For
End If
If Cells(5, 7) <> Empty Then
Cells(3, 38).Value = Cells(5, 7).Value
Else
Exit For
End If
If Cells(5, 8) <> Empty Then
Cells(3, 41).Value = Cells(5, 8).Value
Else
Exit For
End If
Next j
Lilly...
« Errare humanum est, sed persevare diabolicum est » (l’erreur est humaine, persévérer dans celle-ci est diabolique)
p
patrick1957
Passionné d'Excel
Passionné d'Excel
Messages : 3'159
Appréciations reçues : 31
Inscrit le : 24 août 2015
Version d'Excel : 2007-2010-2016 PC

Message par patrick1957 » 29 décembre 2015, 10:43

Bonjour,


tu devrais envoyer un fichier d'exemple court mais avec la même structure que ton original ...




Ca peut aider à t'aider :)
Je fais du géocaching et vous ?
Indentez vos codes VBA, ---> http://www.oaltd.co.uk/Indenter/Default.htm
A lire pour les débutants: http://www.xlerateur.com/divers/2010/05 ... nnees-612/
Avatar du membre
lillysg
Membre habitué
Membre habitué
Messages : 120
Inscrit le : 14 juillet 2014
Version d'Excel : 2013

Message par lillysg » 29 décembre 2015, 11:04

Bonjour Patrick :D

voilà un fichier test "bateau"... avec lequel le code tel que je l'ai écrit fonctionne...
Classeur1.xlsm
(18.66 Kio) Téléchargé 10 fois
Merci d'avance :D
Lilly...
« Errare humanum est, sed persevare diabolicum est » (l’erreur est humaine, persévérer dans celle-ci est diabolique)
Avatar du membre
Raja
Passionné d'Excel
Passionné d'Excel
Messages : 5'059
Appréciation reçue : 1
Inscrit le : 3 février 2008
Version d'Excel : 2010 à 2016 FR et 2010 EN

Message par Raja » 29 décembre 2015, 11:06

Bonjour, Salut patrick1957,
A tester :
Sub test()
    i = 2
    For j = 23 To 41 Step 3
        If Cells(5, i) <> "" Then
            Cells(3, j).Value = Cells(5, i).Value
        End If
        i = i + 1
    Next
End Sub
Cdlt,
Raja
Avatar du membre
lillysg
Membre habitué
Membre habitué
Messages : 120
Inscrit le : 14 juillet 2014
Version d'Excel : 2013

Message par lillysg » 29 décembre 2015, 11:45

Bonjour Raja :D

Merci beaucoup cela fonctionne très bien :D
j'ai cherché une solution qui était beaucoup plus compliquée... :D

Question complémentaire :
parfois je n'ai pas besoin de copier les 3 dernières données de ma ligne de départ....
est-ce possible d'inclure cela dans le code ?...
pour le moment je supprime manuellement les colonnes en question... mais si je peux éviter de le faire :D ... :wink:

Quoiqu'il en soit merci pour cette solution :D
Lilly...
« Errare humanum est, sed persevare diabolicum est » (l’erreur est humaine, persévérer dans celle-ci est diabolique)
Avatar du membre
Raja
Passionné d'Excel
Passionné d'Excel
Messages : 5'059
Appréciation reçue : 1
Inscrit le : 3 février 2008
Version d'Excel : 2010 à 2016 FR et 2010 EN

Message par Raja » 29 décembre 2015, 11:51

Re,
Je n'ai pas tout compris, mais il faut jouer sur ça, non ?
For j = 23 To [surligner]41[/surligner] Step 3
en le modifiant à 32
Mais comme je ne sais pas quand et comment tu décides de faire jusqu'au 41 ou 32 :(
Cdlt,
Raja
Avatar du membre
lillysg
Membre habitué
Membre habitué
Messages : 120
Inscrit le : 14 juillet 2014
Version d'Excel : 2013

Message par lillysg » 29 décembre 2015, 11:57

:D Re Raja :D

C'était tellement simple... que je n'y ai pas pensé... :lol: :lol: :lol:

Encore merci pour l'aide...

Très belles fêtes de nouvel an :D
Lilly...
« Errare humanum est, sed persevare diabolicum est » (l’erreur est humaine, persévérer dans celle-ci est diabolique)
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message