IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

For-next loop anidé, conditionné avec if


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Femme Profil pro
    Chimie
    Inscrit en
    Juin 2018
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chimie
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2018
    Messages : 7
    Par défaut For-next loop anidé, conditionné avec if
    Bonjour,

    Je débute avec excel vba et j'ai besoin de beaucoup d'aide svp.

    J'ai initialement un livre de 3 feuilles. Mais qui va grandir au four et à mesure.

    feuil1 = "Listes" : contienne 106 arrays 2D avec row(27) avec des codes à 3 lettres comme entêtes et range("a1:db47") pour les arrays, nommés par colonnes
    feuil2 = "MENU" : l'endroit où je determine le code à chercher
    feuil3 = "1" : feuille où je dois imprimer mes arrays

    feuil4 = "2"
    feuil5 = "3"...

    Avec un code à 3 lettres trouvé en "MENU" je dois balayer les entêtes de la feuille "Listes" row(27) afin d'imprimer sur la feuille respective "1" ou "2" ou "3"... etc... l'array qui corresponde.

    J'ai essayé ça:
    ---

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    Sub prueba()
     
    Dim i As Integer
    Dim example, example2 As Range
    Dim cel As Variant
    Dim cherche As String
     
    Set example = Sheets("Listes").Rows(27)
    Set example2 = Sheets("Listes").Range("b28:db47")
     
    cel = Left(ActiveCell, 3)
    cherche = ActiveCell.Offset(0, -2).Value
     
    For i = 2 To 106
    If example.Columns(i) = cel Then
    Sheets(cherche).Range("d6:d25").Value = example2.Columns(i).Value
    End If
    Next
     
    End Sub
    ---

    Qu'est-ce qui ne va pas, svp?
    Merci.
    Rose

  2. #2
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 974
    Par défaut
    Bonjour
    ta demande n'est pas du tout claire au moins pour moi ...avec ton LIVRE qui va grandir au four
    J'ai initialement un livre de 3 feuilles. Mais qui va grandir au four
    faute de frappe je sais mais juste pour plaisanter...Pour espérer un aide reformule ta demande et si nécessaire joindre un capture écran de ton travail et un capture d'écran pour le résultat à atteindre ...Bonne journée à toutes et à tous

  3. #3
    Membre régulier
    Femme Profil pro
    Chimie
    Inscrit en
    Juin 2018
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chimie
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2018
    Messages : 7
    Par défaut
    Citation Envoyé par BENNASR Voir le message
    Bonjour
    ta demande n'est pas du tout claire au moins pour moi ...avec ton LIVRE qui va grandir au four

    faute de frappe je sais mais juste pour plaisanter...Pour espérer un aide reformule ta demande et si nécessaire joindre un capture écran de ton travail et un capture d'écran pour le résultat à atteindre ...Bonne journée à toutes et à tous
    Merci beaucoup. Je vais reformuler. Je m'excuse pour la mauvaise écriture, orthographie, syntaxe, et tout ça.

  4. #4
    Membre régulier
    Femme Profil pro
    Chimie
    Inscrit en
    Juin 2018
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chimie
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2018
    Messages : 7
    Par défaut
    J'ai ce code qui marche bien mais qui est extrêmement long:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
        If cel = Sheets("Listes").Cells(27, 2) Then
        ActiveSheet.Range("d6:d25").Value = Sheets("Listes").Range("B28:B47").Value
        End If '1 AIC
     
        If cel = Sheets("Listes").Cells(27, 3) Then
        ActiveSheet.Range("d6:d25").Value = Sheets("Listes").Range("C28:C47").Value
        End If '2 BAB
     
        If cel = Sheets("Listes").Cells(27, 4) Then
        ActiveSheet.Range("d6:d25").Value = Sheets("Listes").Range("d28:d47").Value
        End If '3 BAZ
     
        If cel = Sheets("Listes").Cells(27, 5) Then
        ActiveSheet.Range("d6:d25").Value = Sheets("Listes").Range("e28:e47").Value
        End If '4 BIB
     
        If cel = Sheets("Listes").Cells(27, 6) Then
        ActiveSheet.Range("d6:d25").Value = Sheets("Listes").Range("f28:f47").Value
        End If '5 BIZ
     
        If cel = Sheets("Listes").Cells(27, 7) Then
        ActiveSheet.Range("d6:d25").Value = Sheets("Listes").Range("g28:g47").Value
        End If '6 LPC
     
        If cel = Sheets("Listes").Cells(27, 8) Then
        ActiveSheet.Range("d6:d25").Value = Sheets("Listes").Range("h28:h47").Value
        End If '7 MFC
     
        If cel = Sheets("Listes").Cells(27, 9) Then
        ActiveSheet.Range("d6:d25").Value = Sheets("Listes").Range("i28:i47").Value
        End If '8 PS_
     
        If cel = Sheets("Listes").Cells(27, 10) Then
        ActiveSheet.Range("d6:d25").Value = Sheets("Listes").Range("j28:j47").Value
        End If '9 RMA
     
        If cel = Sheets("Listes").Cells(27, 11) Then
        ActiveSheet.Range("d6:d25").Value = Sheets("Listes").Range("k28:k47").Value
        End If '10 RUR
     
        If cel = Sheets("Listes").Cells(27, 12) Then
        ActiveSheet.Range("d6:d25").Value = Sheets("Listes").Range("l28:l47").Value
        End If '11 SBC
     
        If cel = Sheets("Listes").Cells(27, 13) Then
        ActiveSheet.Range("d6:d25").Value = Sheets("Listes").Range("m28:m47").Value
        End If '12 SBI
     
        If cel = Sheets("Listes").Cells(27, 14) Then
        ActiveSheet.Range("d6:d25").Value = Sheets("Listes").Range("n28:n47").Value
        End If '13 SBL
     
        If cel = Sheets("Listes").Cells(27, 15) Then
        ActiveSheet.Range("d6:d25").Value = Sheets("Listes").Range("o28:o47").Value
        End If '14 SBP
     
        If cel = Sheets("Listes").Cells(27, 16) Then
        ActiveSheet.Range("d6:d25").Value = Sheets("Listes").Range("p28:p47").Value
        End If '15 SBR
     
        If cel = Sheets("Listes").Cells(27, 17) Then
        ActiveSheet.Range("d6:d25").Value = Sheets("Listes").Range("q28:q47").Value
        End If '16 SDC
     
        If cel = Sheets("Listes").Cells(27, 18) Then
        ActiveSheet.Range("d6:d25").Value = Sheets("Listes").Range("r28:r47").Value
        End If '17 SDP
     
        If cel = Sheets("Listes").Cells(27, 19) Then
        ActiveSheet.Range("d6:d25").Value = Sheets("Listes").Range("s28:s47").Value
        End If '18 SGC
     
        If cel = Sheets("Listes").Cells(27, 20) Then
        ActiveSheet.Range("d6:d25").Value = Sheets("Listes").Range("t28:t47").Value
        End If '19 SGE
     
        If cel = Sheets("Listes").Cells(27, 21) Then
        ActiveSheet.Range("d6:d25").Value = Sheets("Listes").Range("u28:u47").Value
        End If '20 SGL
     
        If cel = Sheets("Listes").Cells(27, 22) Then
        ActiveSheet.Range("d6:d25").Value = Sheets("Listes").Range("v28:v47").Value
        End If '21 SGP
     
        If cel = Sheets("Listes").Cells(27, 23) Then
        ActiveSheet.Range("d6:d25").Value = Sheets("Listes").Range("w28:w47").Value
        End If '22 SGR
     
        If cel = Sheets("Listes").Cells(27, 24) Then
        ActiveSheet.Range("d6:d25").Value = Sheets("Listes").Range("x28:x47").Value
        End If '23 SKG
     
        If cel = Sheets("Listes").Cells(27, 25) Then
        ActiveSheet.Range("d6:d25").Value = Sheets("Listes").Range("y28:y47").Value
        End If '24 SMC
     
        If cel = Sheets("Listes").Cells(27, 26) Then
        ActiveSheet.Range("d6:d25").Value = Sheets("Listes").Range("z28:z47").Value
        End If '25 SMP
     
        If cel = Sheets("Listes").Cells(27, 27) Then
        ActiveSheet.Range("d6:d25").Value = Sheets("Listes").Range("aa28:aa47").Value
        End If '26 SPC
     
        If cel = Sheets("Listes").Cells(27, 28) Then
        ActiveSheet.Range("d6:d25").Value = Sheets("Listes").Range("ab28:ab47").Value
        End If '27 SPE
     
        If cel = Sheets("Listes").Cells(27, 29) Then
        ActiveSheet.Range("d6:d25").Value = Sheets("Listes").Range("ac28:ac47").Value
        End If '28 SRA
     
        If cel = Sheets("Listes").Cells(27, 30) Then
        ActiveSheet.Range("d6:d25").Value = Sheets("Listes").Range("ad28:ad47").Value
        End If '29 SRC
     
        If cel = Sheets("Listes").Cells(27, 31) Then
        ActiveSheet.Range("d6:d25").Value = Sheets("Listes").Range("ae28:ae47").Value
        End If '30 SRP
     
        If cel = Sheets("Listes").Cells(27, 32) Then
        ActiveSheet.Range("d6:d25").Value = Sheets("Listes").Range("af28:af47").Value
        End If '31 STB
     
        If cel = Sheets("Listes").Cells(27, 33) Then
        ActiveSheet.Range("d6:d25").Value = Sheets("Listes").Range("ag28:ag47").Value
        End If '32 STS
     
        If cel = Sheets("Listes").Cells(27, 34) Then
        ActiveSheet.Range("d6:d25").Value = Sheets("Listes").Range("ah28:ah47").Value
        End If '33 SZZ
     
        If cel = Sheets("Listes").Cells(27, 35) Then
        ActiveSheet.Range("d6:d25").Value = Sheets("Listes").Range("ai28:ai47").Value
        End If '34 TAC
     
        If cel = Sheets("Listes").Cells(27, 36) Then
        ActiveSheet.Range("d6:d25").Value = Sheets("Listes").Range("aj28:aj47").Value
        End If '35 TAE
     
        If cel = Sheets("Listes").Cells(27, 37) Then
        ActiveSheet.Range("d6:d25").Value = Sheets("Listes").Range("ak28:ak47").Value
        End If '36 TAI
     
        If cel = Sheets("Listes").Cells(27, 38) Then
        ActiveSheet.Range("d6:d25").Value = Sheets("Listes").Range("al28:al47").Value
        End If '37 TAR
     
        If cel = Sheets("Listes").Cells(27, 39) Then
        ActiveSheet.Range("d6:d25").Value = Sheets("Listes").Range("am28:am47").Value
        End If '38 TAZ
     
        If cel = Sheets("Listes").Cells(27, 40) Then
        ActiveSheet.Range("d6:d25").Value = Sheets("Listes").Range("an28:an47").Value
        End If '39 TIC
     
        If cel = Sheets("Listes").Cells(27, 41) Then
        ActiveSheet.Range("d6:d25").Value = Sheets("Listes").Range("ao28:ao47").Value
        End If '40 TIE
     
        If cel = Sheets("Listes").Cells(27, 42) Then
        ActiveSheet.Range("d6:d25").Value = Sheets("Listes").Range("ap28:ap47").Value
        End If '41 TII
     
        If cel = Sheets("Listes").Cells(27, 43) Then
        ActiveSheet.Range("d6:d25").Value = Sheets("Listes").Range("aq28:aq47").Value
        End If '42 TIR
     
        If cel = Sheets("Listes").Cells(27, 44) Then
        ActiveSheet.Range("d6:d25").Value = Sheets("Listes").Range("ar28:ar47").Value
        End If '43 TIZ
     
        If cel = Sheets("Listes").Cells(27, 45) Then
        ActiveSheet.Range("d6:d25").Value = Sheets("Listes").Range("as28:as47").Value
        End If '44 TME
     
        If cel = Sheets("Listes").Cells(27, 46) Then
        ActiveSheet.Range("d6:d25").Value = Sheets("Listes").Range("at28:at47").Value
        End If '45 WBL
     
        If cel = Sheets("Listes").Cells(27, 47) Then
        ActiveSheet.Range("d6:d25").Value = Sheets("Listes").Range("au28:au47").Value
        End If '46 WGC
     
        If cel = Sheets("Listes").Cells(27, 48) Then
        ActiveSheet.Range("d6:d25").Value = Sheets("Listes").Range("av28:av47").Value
        End If '47 WGL
     
        If cel = Sheets("Listes").Cells(27, 49) Then
        ActiveSheet.Range("d6:d25").Value = Sheets("Listes").Range("aw28:aw47").Value
        End If '48 WNE
     
        If cel = Sheets("Listes").Cells(27, 50) Then
        ActiveSheet.Range("d6:d25").Value = Sheets("Listes").Range("ax28:ax47").Value
        End If '49 WRL
     
        If cel = Sheets("Listes").Cells(27, 51) Then
        ActiveSheet.Range("d6:d25").Value = Sheets("Listes").Range("ay28:ay47").Value
        End If '50 XAI
     
        If cel = Sheets("Listes").Cells(27, 52) Then
        ActiveSheet.Range("d6:d25").Value = Sheets("Listes").Range("az28:az47").Value
        End If '51 XAX
     
        If cel = Sheets("Listes").Cells(27, 53) Then
        ActiveSheet.Range("d6:d25").Value = Sheets("Listes").Range("ba28:ba47").Value
        End If '52 XII
     
        If cel = Sheets("Listes").Cells(27, 54) Then
        ActiveSheet.Range("d6:d25").Value = Sheets("Listes").Range("bb28:bb47").Value
        End If '53 XIX
     
        If cel = Sheets("Listes").Cells(27, 55) Then
        ActiveSheet.Range("d6:d25").Value = Sheets("Listes").Range("bc28:bc47").Value
        End If '54 NSP
     
        If cel = Sheets("Listes").Cells(27, 56) Then
        ActiveSheet.Range("d6:d25").Value = Sheets("Listes").Range("bd28:bd47").Value
        End If '55 DEC
    Je voudrais le raccourcir avec un cycle for. J'ai essayé:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Dim i As Integer, nc As Integer
    Dim cel As Variant
     
    cel = ActiveSheet.Range("b6")
    nc = Selection.Columns.Count
     
    For i = 1 To nc
        If Selection.Cells(27, i) = cel Then
        ActiveSheet.Range("d6:d25") = Sheets("Listes").Range(Cells(28, i), Cells(47, i))
    End If
     
    Next i
    Mais ça n'a pas marché.

    Je voudrais remplir la colonne "D": voir image
    avec une des choix sur la feuille: "Listes" : voir image
    selon leur entête: voir image

    Quoi faire, svp?Nom : cuerpo.JPG
Affichages : 167
Taille : 38,3 KoNom : colonne D.JPG
Affichages : 163
Taille : 24,6 KoNom : Listes.JPG
Affichages : 105
Taille : 18,8 Ko

  5. #5
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 122
    Par défaut
    Salut

    Peux-tu placer un fichier exemple pour voir comment sont organisée tes données stp.

    Pour ce qui est du code, il y aura plusieurs choses à revoir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim example, example2 As Range
    équivaut à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim example as variant, example2 As Range
    Si tu veux déclarer deux range il faut le dire à chaque variable
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim example as range, example2 As Range
    Il vaut mieux éviter les ActiveCell, Select, ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim cel as Variant
    If example.Columns(i) = cel Then
    Cel devrait être déclaré en String (Cel as String)
    Columns(i) fait référence à toue la colonne pas juste à une cellule.

    Pour le reste il faudrait plus de renseignement sur ce que tu souhaites faire, il est peut-être possible de mettre des formules avant de te lancer dans le code VBA

    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  6. #6
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 122
    Par défaut
    Nos messages se sont croisés.

    Qu'est ce qui ne marche pas dans ton code?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Dim i As Integer, nc As Integer
    Dim cel As String' Variant
     
    cel = ActiveSheet.Range("b6").value
    nc = Selection.Columns.Count 'on pourra remplacer ça en regardant combien de colonnes contiennent des données
     
    For i = 1 To nc
        If Selection.Cells(27, i).value = cel Then
        ActiveSheet.Range("d6:d25").value = Sheets("Listes").Range(Cells(28, i), Cells(47, i)).value
    End If
     
    Next i
    essai comme ça

    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

Discussions similaires

  1. For-next loop anidé, conditionné avec if
    Par RosseAcevedo dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 06/06/2018, 10h54
  2. Réponses: 2
    Dernier message: 28/08/2008, 16h36
  3. [VB.net] Boucle for next avec un tableau
    Par grand_prophete dans le forum Windows Forms
    Réponses: 4
    Dernier message: 31/05/2006, 11h08
  4. Réponses: 3
    Dernier message: 03/11/2005, 19h22
  5. qbasic : pause avec FOR-NEXT
    Par clood200 dans le forum Langages de programmation
    Réponses: 2
    Dernier message: 08/08/2003, 16h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo