For each cell non vide > exécuter une série d'action

Roukkeus

XLDnaute Nouveau
Bonjour à tous,

Petit souci avec "For Each" (que je n'ai jamais manipulé).

Dans Feuil1, plage E7:E30, l'utilisateur de mon fichier a la possibilité d'entrer les valeurs qu'il souhaite (et par conséquent d'entrer entre 1 et 23 valeurs).

Mon objectif est que pour chacune des valeurs (non vides) entrées par l'utilisateur, je puisse exécuter un certain nombre d'actions, en commençant par la valeur d'E7 pour finir avec la dernière de la colonne.

Ci-dessous, à toutes fins utiles, le code que je suis (honteusement) parvenu à pondre...
Petite précision : les macros "trier" et "trier_missing" fonctionnent : elles ne sont pas de moi :eek:

Code:
Sub Engine()
    With Feuil1
        For Each cell In Feuil1.Range("E7:E30")
        If cell <> "" Then
        .Copy
        Sheets("Engine").Select
        Range("C1").Select
        ActiveSheet.Paste
        Sheets("Ref_missing_from_DB").Select
        Range("A2").Select
        ActiveSheet.Paste
        Sheets("Doc_total_ref_list").Select
        Range("A2").Select
        ActiveSheet.Paste
        Sheets("Additionnal_ref_vs_DB").Select
        Range("B2").Select
        ActiveSheet.Paste
        Call Module1.trier_missing
            DoEvents
            Sheets("Ref_missing_from_DB").Select
            Columns("A:A").Select
            Selection.Insert Shift:=xlToRight
            Range("A3").Select
        Call Module4.trier
            DoEvents
        Sheets("Additionnal_ref_vs_DB").Select
            ActiveCell.FormulaR1C1 = _
            "=IF(RC[-1]<>"""",IF(ISERROR(VLOOKUP(RC[-1],Doc_total_ref_list!R1:R65536,2,FALSE)),""Not in Data Base"",""""),"""")"
            Range("B3").Select
            Selection.AutoFill Destination:=Range("B3:B4000")
            Range("B3:B4000").Select
            Selection.Copy
            Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
            Application.CutCopyMode = False
            Columns("B:B").Select
            Selection.Insert Shift:=xlToRight
        End If
        Next
    End With
End Sub

Merci infiniement !
Roukkeus
 
Dernière édition:

Roukkeus

XLDnaute Nouveau
Re : For each cell non vide > exécuter une série d'action

Trouvé,
ça m'apprendra à persévérer, le code fonctionne avec un petit changement au début.
Il s'agit de ne pas utiliser la commande "Cell" mais de définir "c" en Range pour y appliquer les commandes (je me comprends...) :
Code:
Sub Engine()
Dim c As Range
    With Feuil1
        For Each c In Feuil1.Range("E7:E30")
        If c.Value <> "" Then
        c.Copy
        Sheets("Engine").Select
        Range("C1").Select
Etc...

A+
 

Gorfael

XLDnaute Barbatruc
Re : For each cell non vide > exécuter une série d'action

Salut Roukkeus et le forum
ça m'apprendra à persévérer, le code fonctionne avec un petit changement au début.
Ah bon ? Tu me diras, comme je ne connais du fichier que la macro donnée...
Code:
With Feuil1
    For Each cel In Feuil1.Range("E7:E30")
    If cel <> "" Then
    .Copy
    Sheets("Engine").Select
    Range("C1").Select
    ActiveSheet.Paste
    Sheets("Ref_missing_from_DB").Select
    Range("A2").Select
    ActiveSheet.Paste
Si je lis ce début de macro
Pour chaque cel (en admettant que Cel soit déclaré en Range) de Feuil1.[E7:E30]
là, j'arrive à suivre
si cel<>"" alors .copy => comme je commence l'instruction par un point, ça veut dire que je lui associe la valeur déclarée en préfixe. Comme on utilise des select qui ne servent à rien, on les supprime, ce qui fait que ça devient
si cel<>"" alors Feuil1.copy Sheets("Engine").Range("C1")
Autrement dit : pour chaque cellule de E7:E30 recopier Feuil1(CodeName) dans la feuille de nom d'onglet Engine à partir de C1

Bon, évidemment, je ne fais que regarder un code qui ne veut rien dire si on a pas les données. Mais l'algorithme me semble un peu étrange : j'ai 20 cellules non vides, je recopie la même feuille au même endroit 20 fois ???
De plus, utiliser soit le nom informatique des feuilles, soit leurs noms d'onglet, ça ne facilite pas ma compréhension. Peut-être que si tout le code avait une cohérence visible, j'aurais pu trouver à le simplifier... mais il fonctionne comme ça, et tout le monde n'est pas forcément pressé.
A+
 

Mehmery

XLDnaute Nouveau
Bonjour
j'ai une question svp
je veux développer une macro sur VBA , le traitement est le suivant
L’onglet intéressant est l’onglet « Bilan Volumes Matériels » et les colonnes intéressantes sont B, C, D, E, H.
il faut choisir la bonne feuille ( bilan volumes matériels) , puis les informations en J doit aller en D et les informations en K doivent aller en E. à Remplacement. ( sachant que on copie colle que les cellules qui sont remplis )
please help je ne suis pas experte en VBA
 

vgendron

XLDnaute Barbatruc
Bonjour
j'ai une question svp
je veux développer une macro sur VBA , le traitement est le suivant
L’onglet intéressant est l’onglet « Bilan Volumes Matériels » et les colonnes intéressantes sont B, C, D, E, H.
il faut choisir la bonne feuille ( bilan volumes matériels) , puis les informations en J doit aller en D et les informations en K doivent aller en E. à Remplacement. ( sachant que on copie colle que les cellules qui sont remplis )
please help je ne suis pas experte en VBA
Bonjour @Mehmery

Déjà.. commence par créer ton propre post !
dans la vie, lorsque deux personnes parlent d'une émission de télé.. toi tu arrives en plein milieu pour parler du menu de demain?
 

Statistiques des forums

Discussions
312 185
Messages
2 086 016
Membres
103 093
dernier inscrit
Molinari