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 :

probleme de if..elseif..


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2013
    Messages
    238
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 238
    Par défaut probleme de if..elseif..
    Bonjour a tous !

    J'ai un petit problème de code,
    j'ai ce code :


    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
    Sub Macro_Maj()
     
            Workbooks.Open (Chemin& Dossier)
            Windows(Dossier).Activate
            Sheets("feuil1").Activate
     
            Dim i As Integer
            Dim i2 As Integer
     
            For i = 1 To 700 Step 1
     
                    If i = 4 Or i = 35 Or i = 51 Or i = 71 Or i = 97 Or i = 134 Or i = 151 Or i = 168 Or i = 184 Or i = 198 Or i = 212 Or i = 228 Or i = 246 Or i = 262 Or i = 277 Or i = 293 Or i = 309 Or i = 319 Or i = 330 Or i = 350 Or i = 375 Or i = 386 Or i = 393 Or i = 463 Or i = 502 Or i = 503 Or i = 511 Or i = 526 Or i = 551 Or i = 565 Or i = 616 Or i = 644 Then
     
                        If i = 4 Then i2 = 19
                        ElseIf i = 35 Then i2 = 49
                        ElseIf i = 51 Then i2 = 64
                        ElseIf i = 71 Then i2 = 82
                        ElseIf i = 97 Then i2 = 108
                        ElseIf i = 134 Then i2 = 126
                        ElseIf i = 151 Then i2 = 142
                        ElseIf i = 168 Then i2 = 158
                        ElseIf i = 184 Then i2 = 173
                        ElseIf i = 198 Then i2 = 186
                        ElseIf i = 212 Then i2 = 199
                        ElseIf i = 228 Then i2 = 214
                        ElseIf i = 246 Then i2 = 231
                        ElseIf i = 262 Then i2 = 246
                        ElseIf i = 277 Then i2 = 259
                        ElseIf i = 293 Then i2 = 274
                        ElseIf i = 309 Then i2 = 289
                        ElseIf i = 319 Then i2 = 298
                        ElseIf i = 330 Then i2 = 308
                        ElseIf i = 350 Then i2 = 336
                        ElseIf i = 375 Then i2 = 359
                        ElseIf i = 386 Then i2 = 370
                        ElseIf i = 393 Then i2 = 384
                        ElseIf i = 463 Then i2 = 460
                        ElseIf i = 502 Then i2 = 498
                        ElseIf i = 503 Then i2 = 509 
                        ElseIf i = 511 Then i2 = 515 
                        ElseIf i = 526 Then i2 = 531
                        ElseIf i = 551 Then i2 = 563
                        ElseIf i = 565 Then i2 = 578
                        ElseIf i = 616 Then i2 = 628
                        ElseIf i = 644 Then i2 = 654
     
                        Windows("Départs.xls").Activate
                        Sheets("Départs1").Activate
                        Range("E" & i).Select
                        Range(Selection, Selection.End(xlDown)).Select
                        Selection.Copy
                        Windows(Dossier).Activate
                        Sheets("feuil1").Activate
                        Range("I" & i).Select
                        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                        :=False, Transpose:=False
     
                        End If
     
            Next
     
     Workbooks(Dossier).Close
     
    End Sub
    et donc le problème c'est que ce code ne fonctionne pas comme je veux ^^

    Donc pour moi, ce code devrai fonctionner comme ceci:

    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
     
    For i = 1 To 700 Step 1
          If i = 4
                  If i = 4 Then i2 = 19
                        Windows("Départs.xls").Activate
                        Sheets("Départs (SCHNEIDER-SOCOMEC)").Activate
                        Range("E" & i).Select
                        Range(Selection, Selection.End(xlDown)).Select
                        Selection.Copy
                        Windows(Dossier_Chiffrage_Elec_Energence_Clauger).Activate
                        Sheets("Chiffrage").Activate
                        Range("I" & i).Select
                        Selection.PasteSpecial Paste_
                        :=xlPasteValues,Operation:=xlNone,SkipBlanks _
                        :=False, Transpose:=False
    et la ca reviens au départ et ca fait pareil mais pour i = 35

    Mais il ne fonctionne pas comme cela... je pense que c'est a cause des elseif car c'est la premier fois que je m'en sert

    Cordialement

  2. #2
    Membre Expert
    Homme Profil pro
    retraité
    Inscrit en
    Mars 2013
    Messages
    885
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 885
    Par défaut problème de if
    Bonjour,

    Et si tu commençais par utiliser "case select" plutôt que "if elseif" ?

    De plus les 'select' et 'activate' à profusion ne servent dans beaucoup de cas à rien dès lors que le fichier est ouvert.

    cordialement,

  3. #3
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2013
    Messages
    238
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 238
    Par défaut
    C'est bon j'ai résolu mon problème
    j'ai simplement mis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    If i = 4 Then
        i2 = 19: GoTo prog
    et la suite c'est

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    prog:                     Windows("Départs.xls").Activate
                        Sheets("Départs (SCHNEIDER-SOCOMEC)").Activate
                        Range("E" & i).Select
                        Range(Selection, Selection.End(xlDown)).Select
                        Selection.Copy
                        Windows(Dossier_Chiffrage_Elec_Energence_Clauger).Activate
                        Sheets("Chiffrage").Activate
                        Range("I" & i).Select
                        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                        :=False, Transpose:=False
    Je laisse le post actif pour voir des réponses qui serait pas une échappatoire pas très jolie..

    Cordialement

  4. #4
    Inactif  
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    1 733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 1 733
    Par défaut
    Un code un peu plus simple qui fait la même chose...

    Par contre i2 n'est utilisé nulle part... Donc je ne vois pas l'intérêt.
    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
            Sub toto()
    Dim i As Integer, j As Integer, i2 As Integer
     
     tablo1 = Array(4, 35, 51, 71, 97, 134, 151, 168)
     tablo2 = Array(19, 49, 64, 82, 108, 126, 142, 158)
     
            For j = LBound(tablo1) To UBound(tablo1)
            i2 = tablo2(j)
            i = tablo1(i)
     
                        Windows("Départs.xls").Activate
                        Sheets("Départs1").Activate
                        Range("E" & i).Select
                        Range(Selection, Selection.End(xlDown)).Select
                        Selection.Copy
                        Windows(Dossier).Activate
                        Sheets("feuil1").Activate
                        Range("I" & i).Select
                        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                        :=False, Transpose:=False
     
     
     
            Next j
            End Sub

  5. #5
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2013
    Messages
    238
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 238
    Par défaut
    Bonjour, et merci pour vos réponses
    nibledispo
    le : Je laisse le post actif pour voir des réponses qui serait pas une échappatoire pas très jolie..
    n'est pas pour toi, je n'avais pas vu ton post désolé ^^

    je vais me renseigné sur ce que tu m'as dit

    EngueEngue
    je me suis trompé i2 sert enfaite ici

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Range("I" & i2).Select
                        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                        :=False, Transpose:=False
    et je vais testé ton programme desuite.

    Merci
    pour mes tests je l'avais changé et j'ai oublié de le reprendre désolé ^^

  6. #6
    Inactif  
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    1 733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 1 733
    Par défaut
    coquille dans le code:

    i = tablo1(i)


  7. #7
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2013
    Messages
    238
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 238
    Par défaut
    EngueEngue

    J'ai testé ce que tu m'as donné, mais cela ne fonctionne pas, je t'explique

    donc au début ca va, ca marche comme je veux ca copie la sélection qui commence a E4, et y colle en I19 dans l'autre classeur
    nickel
    mais le deuxième, il me copie la sélection qui commence à E97 et y colle en I49 ^^
    j'ai testé 2 fois ton programme et il fait la même donc ce n'est pas aléatoire
    (excuse moi je ne connais pas ce que tu a mis donc j'émets des hypothèses surement fausse)

    et je ne sais pas quoi modifié car pour moi ce que tu as mis a l'air juste.

    ha bah voila ^^
    tu l'as modifié
    merci bien !!

    maintenant je vais testé la case select

    Donc voila j'ai testé les deux techniques
    Merci a vous deux : EngueEngue et nibledispo

    La méthode de nibledispo est la même que la mienne niveau longueur ( même plus long je trouve si on utilise pas le "goto")

    Mais il faut le dire la méthode de EngueEngue est la plus courte et la plus simple si il y a des modifications a faire ^^

    Merci encore

  8. #8
    Inactif  
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    1 733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 1 733
    Par défaut
    En effet, il paraît que ceux qui en ont une plus longue font des codes plus courts..

  9. #9
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2013
    Messages
    238
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 238
    Par défaut
    ha bon ^^
    moi je pense que c'est plus pour l'utilisation, plus le code est court, moins ca dure

    (et c'est prouvé, mon code en pas à pas dur plus longtemps )

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2010] Probleme pour tester avec if et elseif sous vba
    Par rabah14 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 15/02/2013, 16h53
  2. [MySQL] Probleme de elseif
    Par kikou732 dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 14/07/2011, 10h25
  3. probleme des if & elseif
    Par Mon_ami dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 18/01/2009, 09h51
  4. [Système] probleme dans la structure if/elseif/else
    Par samsso2005 dans le forum Langage
    Réponses: 9
    Dernier message: 14/03/2006, 17h50
  5. [Kylix] Probleme d'execution de programmes...
    Par yopziggy dans le forum EDI
    Réponses: 19
    Dernier message: 03/05/2002, 14h50

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