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 :

comment faire varier une variable [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 19
    Points : 11
    Points
    11
    Par défaut comment faire varier une variable
    bonjour,
    je voudrai effectuer un test entre une variable valeur (qui peut prendre n'importe quelle valeur entre la cellule C5 et C407) et ma variable code qui a été demandé précédemment. En fonction de si elles sont égales ou différente je voudrai supprimer l'intégralité de la ligne en gros si oui je conserve que les lignes ou valeur=code ni non je supprime toute les lignes où valeur=code. Or ne n'arrive pas a faire varier ma variable valeur. Pour l'instant j'ai testé ç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
    21
    22
    Sub trie_bom_1()
    Dim Code As String
    Dim Valeur As String
             Code = InputBox("Entrez le code produit à 10 chiffres.", "demande de code", "exemple : 4612091900")
             If Len(Code) = 10 And IsNumeric(Code) Then
                      If MsgBox("Voulez-vous conserver ou supprimer les lignes contenant ce code ?" & Chr(10) & "oui pour conserver" & Chr(10) & "non pour supprimer", vbYesNo, choix) = vbYes Then
                      Range (Cells(5, 3)) < Valeur > Range(Cells(407, 3))
                               If Valeur = Code Then
                               MsgBox ("Seul les lignes contenant le code ont été conservé.")
                               Else
                               Range("valeur").Select
                               Selection.Delete Shift:=xlUp
                               MsgBox ("Seul les lignes contenant le code ont été conservé.")
                               MsgBox ("Seul les lignes contenant le code ont été conservé.")
                                Else
                               'meme chose sauf que j'inverse le then et le else'
                      MsgBox ("Seul les lignes contenant le code ont été suprimmé.")
                      End If
             Else
                     MsgBox ("Opération annulé, le code ne contient pas 10 chiffres ou vous avez appuyé sur annuler. ")
             End If
    End Sub
    merci de votre aide (je tiens à préciser que j'ai un niveau plus que faible en vba donc désolé si j'ai écris de grosses bourdes) dsl j'ai pas réussi a mettre les alinéas comme dans vba pourtant je les ai bien tapé

  2. #2
    Expert éminent sénior
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    6 803
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 6 803
    Points : 32 058
    Points
    32 058
    Par défaut
    La ligne qui déconne, c'est celle-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range (Cells(5, 3)) < Valeur > Range(Cells(407, 3))
    C'est de la programmation par requête. Or VBA est un langage impératif, il ne fait qu'obéir aux ordres. Tu ne peux pas travailler comme ça(même si parfois ça serait bien pratique)

    un exemple de code pour selectionner plusieurs colonnes, renvoyé par l'éditeur de macros, c'est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        Range("19:19,22:22,23:23,24:24,27:27,28:28").Select
    Evidemment, tu ne peux pas taper en dur les numéros de colonne, tu dois les récupérer en dynamique. Exemple(pourri mais qui devrait marcher) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Dim ii as Integer, ss as String
    ss = ""
    For ii = 5 to 407
        if Cells(ii, 3) = Valeur Then
            If ss <> "" Then ss = ss & ","
            ss = ss & Cstr(ii)
        End If
    Next ii
    Range(ss).Select
    Et là, normalement, tu as selectionné toutes les lignes contenant ta Valeur. Après, à toi d'en faire ce que tu veux.
    Les 4 règles d'airain du développement informatique sont, d'après Michael C. Kasten :
    1)on ne peut pas établir un chiffrage tant qu'on a pas finalisé la conception
    2)on ne peut pas finaliser la conception tant qu'on a pas complètement compris toutes les exigences
    3)le temps de comprendre toutes les exigences, le projet est terminé
    4)le temps de terminer le projet, les exigences ont changé
    Et le serment de non-allégiance :
    Je promets de n’exclure aucune idée sur la base de sa source mais de donner toute la considération nécessaire aux idées de toutes les écoles ou lignes de pensées afin de trouver celle qui est la mieux adaptée à une situation donnée.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 19
    Points : 11
    Points
    11
    Par défaut
    merci de ta réponse je me doutais bien que c’était cette ligne qui n’était pas bonne. j'ai intégrer ton code mais ca me dit erreur d'exécution 1004 et ca me souligne range(ss).select
    ps tu fais comment pour afficher le code correctement dans les message ?

  4. #4
    Expert éminent sénior
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    6 803
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 6 803
    Points : 32 058
    Points
    32 058
    Par défaut
    (1) Oups, j'ai été trop vite, il faut écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ss = ss & CStr(ii) & ":" & CStr(ii)
    au lieu de Tout simplement parceque je générais "6,8,10" au lieu de "6:6,8:8,10:10" qui est la bonne syntaxe. J'ai testé, ça marche.

    (par contre, il y a semble-t-il une limite au nombre de lignes disjointes selectionnables, à vérifier que tu n'en selectionne pas 200 - si tu en as beaucoup, alors il faut selectionner les lignes une à une, et agir dessus une à une).

    (2) Tu utilises la balise code - avec le bouton [#] présent au-dessus de la zone ou tu tapes ton texte. Le texte présent entre CODE et /CODE(avec les [] autour pour que ça marche)
    Les 4 règles d'airain du développement informatique sont, d'après Michael C. Kasten :
    1)on ne peut pas établir un chiffrage tant qu'on a pas finalisé la conception
    2)on ne peut pas finaliser la conception tant qu'on a pas complètement compris toutes les exigences
    3)le temps de comprendre toutes les exigences, le projet est terminé
    4)le temps de terminer le projet, les exigences ont changé
    Et le serment de non-allégiance :
    Je promets de n’exclure aucune idée sur la base de sa source mais de donner toute la considération nécessaire aux idées de toutes les écoles ou lignes de pensées afin de trouver celle qui est la mieux adaptée à une situation donnée.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 19
    Points : 11
    Points
    11
    Par défaut
    merci beaucoup de ton aide
    le message d'erreur intervient toujours sur la même ligne

    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
    [Sub trie_bom_1()
    Dim Code As String
    Dim Valeur As String
    Dim x As Long
    Dim y As String
        Code = InputBox("Entrez le code produit à 10 chiffres.", "demande de code", "exemple : 4612091900")
        If Len(Code) = 10 And IsNumeric(Code) Then
            If MsgBox("Voulez-vous conserver ou supprimer les lignes contenant ce code ?" & Chr(10) & "oui pour conserver" & Chr(10) & "non pour supprimer", vbYesNo, choix) = vbYes Then
                y = ""
                For x = 5 To 407
                    If Cells(x, 3) = Valeur Then
                        If y <> "" Then y = y & ","
                        y = y & CStr(x) & ":" & CStr(x)
                    End If
                Next x
                Range(y).Select
     
            Else
                y = ""
                For x = 5 To 407
                    If Cells(x, 3) = Valeur Then
                        If y <> "" Then y = y & ","
                        y = y & CStr(x) & ":" & CStr(x)
                    End If
                Next x
                Range(y).Select
                Selection.Delete Shift:=xlUp
                MsgBox ("Seul les lignes contenant le code ont été suprimmé.")
            End If
        Else
            MsgBox ("Opération annulé, le code ne contient pas 10 chiffres ou vous avez appuyé sur annuler. ")
        End If
    End Sub]
    par contre je comprend pas ce que veut dire ":"

  6. #6
    Expert éminent sénior
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    6 803
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 6 803
    Points : 32 058
    Points
    32 058
    Par défaut
    Tu as beaucoup de lignes correspondant à ta valeur? C'est probablement le problème(parceque sinon, chez moi, ça passe très bien).

    Donc il faut ruser. Par exemple, en remplaçant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    For x = 5 To 407
                    If Cells(x, 3) = Valeur Then
                        If y <> "" Then y = y & ","
                        y = y & CStr(x) & ":" & CStr(x)
                    End If
                Next x
                Range(y).Select
                Selection.Delete Shift:=xlUp
    par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
            For x = 407 To 5 Step -1
                If Cells(x, 3) = Valeur Then
                    Rows(CStr(x)).Delete Shift:=xlUp
                End If
            Next x
    Testé, ça marche.

    Comme ça, on se débarrasse complètement des select. Ca permet de gagner en performance et en lisibilité

    Il est important de commencer par la fin, quand on supprime ligne à ligne, pour éviter de louper des effacements. En effet, si les lignes 67 et 68 sont à effacer et que j'efface la 67 d'abord, la 68 va monter en 67...et ne pas être effacée, puisqu'à ce moment, le compteur est à 68. Alors que si on efface la 68 d'abord, le compteur est ensuite en 67...et on peut l'effacer aussi. C'est pourquoi je pars du dernier vers le premier(et je dois aussi mettre step -1, sinon il ne devine pas que je vais en arrière, et ne fait rien du tout).

    A noter que ça, c'est si tu veux effacer les éléments de cette valeur. Pour le cas ou tu veuilles garder les lignes de cette valeur, et supprimer les autres, alors il te faudra remplacer If Cells(x, 3) = Valeur par If Cells(x, 3) <> Valeur.

    Par contre, ça m'amène au 407. C'est une donnée fixe, ou tu as un nombre de lignes variables? Si tu dois traiter toutes les lignes sans savoir combien il y en a, il y a alors la formule magique :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For x = Range("C" & Rows.Count).End(xlUp).Row To 5 Step -1
    suivi des autres lignes. Comme ça, tu sais que tu prends toutes les lignes.

    mais si les 407 est pertinent dans ton cas, alors garde-le.
    Les 4 règles d'airain du développement informatique sont, d'après Michael C. Kasten :
    1)on ne peut pas établir un chiffrage tant qu'on a pas finalisé la conception
    2)on ne peut pas finaliser la conception tant qu'on a pas complètement compris toutes les exigences
    3)le temps de comprendre toutes les exigences, le projet est terminé
    4)le temps de terminer le projet, les exigences ont changé
    Et le serment de non-allégiance :
    Je promets de n’exclure aucune idée sur la base de sa source mais de donner toute la considération nécessaire aux idées de toutes les écoles ou lignes de pensées afin de trouver celle qui est la mieux adaptée à une situation donnée.

  7. #7
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 19
    Points : 11
    Points
    11
    Par défaut
    non je n'ai pas beaucoup de ligne contenant ma valeur 5-6 tout au plus. en utilisant la formule magique ca ne risque pas de fortement alourdir le code ? Dans mon tableaux, la colonne testé comprend des codes différents, le ou les codes cherchés et enfin des cases vides. quand j'effectue les suppressions ca me supprime dans un cas toutes les cases vides et dans l'autre toutes les cases contenant un code que ce soit le bon ou le mauvais. j'ai l'impression qu'il teste seulement si j'ai une valeur ou non. il faudrait pas faire le test deux fois ? un pour les cases vides et un pour les codes ?
    en pièce jointe ya un exemple du genre de tableau que je peux avoir
    Fichiers attachés Fichiers attachés

  8. #8
    Expert éminent sénior
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    6 803
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 6 803
    Points : 32 058
    Points
    32 058
    Par défaut
    Citation Envoyé par lysander31 Voir le message
    non je n'ai pas beaucoup de ligne contenant ma valeur 5-6 tout au plus. en utilisant la formule magique ca ne risque pas de fortement alourdir le code ? Dans mon tableaux, la colonne testé comprend des codes différents, le ou les codes cherchés et enfin des cases vides. quand j'effectue les suppressions ca me supprime dans un cas toutes les cases vides et dans l'autre toutes les cases contenant un code que ce soit le bon ou le mauvais. j'ai l'impression qu'il teste seulement si j'ai une valeur ou non. il faudrait pas faire le test deux fois ? un pour les cases vides et un pour les codes ?
    Ah mais si tu ne nous dis pas tout, c'est plus difficille. reprenons :

    (1)Faut-il effacer toute la ligne, ou seulement la case? (j'étais parti sur un effacement de ligne complète, comme dans ton code, mais en te relisant, je me demande si tu ne veux pas juste effacer la cellule, et ne pas toucher aux autres colonnes)
    (2)Y-a-t-il des cases vides ENTRE les cases remplies dans cette colonne? Si oui, faut-il les effacer, ou les garder?
    (3)La formule magique n'alourdit pas le code(enfin, il est légèrement plus difficille à lire, mais ça reste quand même, je crois, digeste). Elle ne le rend pas plus lent(de toutes façons, sur 400 lignes, même du code non optimisé passe quand même rapidement. Elle a l'immense avantage de s'adapter pour le jour ou tu a plus de 407 lignes significatives. D'ou la question : y-a-t-il des lignes contenant autre chose que la valeur à trouver, ou les valeurs à effacer, dans la colonne, outre le vide?

    Parceque si il y a autre chose que les numéros à garder/éliminer dans ta colonne, il faudra être plus futé. Si par contre il n'y a que ça, avec la formule "magique", tu as la certitude de ne jamais manquer un seul numéro à effacer. Le jour ou tu as 700 lignes, ça marche toujours, sans aller modifier le 407 en dur dans le programme.

    Enfin, il faut adapter le code - comme la plupart des habitués, je n'ai pas fait un cas code complet, juste un exemple a adapter. L'exemple que j'ai mis vérifie juste si le contenu est égal à la valeur recherchée. Si il ne l'est pas(et ça vaut pour les cases vides), alors j'efface la ligne complète. Si ta règle est plus compliquée que celà, il faut le préciser - ou, mieux, adapter le code exemple à ton exigence exacte.

    Bref, pour effacer toutes les lignes Ayant une valeur remplie mais pas celle selectionnée, tu aurais quelquechose du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
            For x = 407 To 5 Step -1
                If (Cells(x, 3) <> Valeur) and (Trim(Cells(x, 3)) <> "") Then
                    Rows(CStr(x)).Delete Shift:=xlUp
                End If
            Next x
    (le Trim ote les espaces non significatifs, c'est une sécurité pour ne pas effacer les cases "vides" ayant en fait des espaces)
    Plus blindé encore, pour effacer toutes les lignes ayant une longueur de 10(il me semble que toutes tes valeurs ont une longueur de 20) mais pas la valeur selectionnée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
            For x = 407 To 5 Step -1
                If (Cells(x, 3) <> Valeur) and (Len(Cells(x, 3)) = 10) Then
                    Rows(CStr(x)).Delete Shift:=xlUp
                End If
            Next x
    pour effacer toutes les lignes ayant la valeur demandée, tu auras
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
            For x = 407 To 5 Step -1
                If (Cells(x, 3) = Valeur) Then
                    Rows(CStr(x)).Delete Shift:=xlUp
                End If
            Next x
    Pour n'effacer qu'une cellule au lieu d'une ligne, tu aurais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("C" & CStr(x)).Delete Shift:=xlUp
    Les 4 règles d'airain du développement informatique sont, d'après Michael C. Kasten :
    1)on ne peut pas établir un chiffrage tant qu'on a pas finalisé la conception
    2)on ne peut pas finaliser la conception tant qu'on a pas complètement compris toutes les exigences
    3)le temps de comprendre toutes les exigences, le projet est terminé
    4)le temps de terminer le projet, les exigences ont changé
    Et le serment de non-allégiance :
    Je promets de n’exclure aucune idée sur la base de sa source mais de donner toute la considération nécessaire aux idées de toutes les écoles ou lignes de pensées afin de trouver celle qui est la mieux adaptée à une situation donnée.

  9. #9
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 19
    Points : 11
    Points
    11
    Par défaut
    merci de ta réponse je vais tester tout ça et je reviens vers toi

    (1) oui j'efface toute la ligne
    (2) dans la colonne ya 3 types de cases vides, avec le bon code, avec le mauvais code. Soit j'efface tout et je garde les bonnes soit je fais le contraire.
    (3) non il n'y aura rien d'autre dans la colonne testé

  10. #10
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 19
    Points : 11
    Points
    11
    Par défaut
    j'ai toujours le même problème
    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
     
    [Sub trie_bom_1()
    Dim Code As String
    Dim Valeur As String
    Dim x As Long
    Dim y As String
        Code = InputBox("Entrez le code produit à 10 chiffres.", "demande de code", "exemple : 4612091900")
        If Len(Code) = 10 And IsNumeric(Code) Then
            If MsgBox("Voulez-vous conserver ou supprimer les lignes contenant ce code ?" & Chr(10) & "oui pour conserver" & Chr(10) & "non pour supprimer", vbYesNo, choix) = vbYes Then
                Application.ScreenUpdating = False
                y = ""
                'supprime les lignes ou les cellules sont vides'
                For x = 407 To 5 Step -1
                    If (Cells(x, 3) = Valeur) Then
                    Rows(CStr(x)).Delete Shift:=xlUp
                    End If
                Next x
                'supprime les cellules ayant un code different'
     
     
     
     
                Application.ScreenUpdating = True
                MsgBox ("Seul les lignes contenant le code ont été conservé.")
            Else
                Application.ScreenUpdating = False
                'supprime les cellules ayant le bon code'
     
     
     
                Application.ScreenUpdating = True
                MsgBox ("Seul les lignes contenant le code ont été supprimé.")
            End If
        Else
            MsgBox ("Opération annulé, le code ne contient pas 10 chiffres ou vous avez appuyé sur annuler. ")
        End If
    End Sub
    ]
    j'ai testé ce que tu ma dis mais ça ne marche pas en fait ca permet de supprimer ou non les cellules avec du vide
    il est pas possible d'utiliser un case is ? du genre ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    [
    For x = 407 To 5 Step -1
                    If (Cells(x, 3) = Valeur) Then
                    select case valeur
                    case is = code
                    Rows(CStr(x)).Delete Shift:=xlUp
                    case is <>code
                    End If
    Next x
    ]

  11. #11
    Expert éminent sénior
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    6 803
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 6 803
    Points : 32 058
    Points
    32 058
    Par défaut
    Mmmmmh, je viens de voir un problème qui m'avait échappé jusque là(parceque chez moi, ça marche comme du papier à musique) : le code remplit la variable Code avec la valeur demandée, mais tests la variable Valeur.

    Reprenons ton code, virons l'inutile, et blindons le reste :

    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
    Sub trie_bom_1()
    Dim Code As String
    Dim x As Long
    Dim y As String
        Application.ScreenUpdating = False
        Code = Trim(InputBox("Entrez le code produit à 10 chiffres.", "demande de code", "exemple : 4612091900"))
        If Len(Code) = 10 And IsNumeric(Code) Then
            If MsgBox("Voulez-vous conserver ou supprimer les lignes contenant le code " & Code  & " ?"  & Chr(10) & "oui pour conserver" & Chr(10) & "non pour supprimer", vbYesNo, choix) = vbYes Then
                y = ""
                For x = 407 To 5 Step -1
                    If (Trim(Cells(x, 3)) <> Code) And (Trim(Cells(x, 3)) <> "") Then
                    Rows(CStr(x)).Delete Shift:=xlUp
                    End If
                Next x
                MsgBox ("Seul les lignes contenant le code " & Code & " ont été conservé.")
            Else
                y = ""
                For x = 407 To 5 Step -1
                    If (Trim(Cells(x, 3)) = Code) Then
                    Rows(CStr(x)).Delete Shift:=xlUp
                    End If
                Next x
                MsgBox ("Seul les lignes contenant le code " & Code & " ont été supprimé.")
            End If
        Else
            MsgBox ("Opération annulé, le code " & Code & " ne contient pas 10 chiffres ou vous avez appuyé sur annuler. ")
        End If
        Application.ScreenUpdating = True
     
    End Sub
    Les 4 règles d'airain du développement informatique sont, d'après Michael C. Kasten :
    1)on ne peut pas établir un chiffrage tant qu'on a pas finalisé la conception
    2)on ne peut pas finaliser la conception tant qu'on a pas complètement compris toutes les exigences
    3)le temps de comprendre toutes les exigences, le projet est terminé
    4)le temps de terminer le projet, les exigences ont changé
    Et le serment de non-allégiance :
    Je promets de n’exclure aucune idée sur la base de sa source mais de donner toute la considération nécessaire aux idées de toutes les écoles ou lignes de pensées afin de trouver celle qui est la mieux adaptée à une situation donnée.

  12. #12
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 19
    Points : 11
    Points
    11
    Par défaut
    super ça marche !! mille merci pour ton aide tu m'as rendu un fier service ! pour info voila le code final (j'ai rajouté un des bouts de code que on utilisé avant pour virer les lignes où la cellule est vide)
    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
    [
    Sub trie_bom_1()
    Dim Code As String
    Dim x As Long
    Dim y As String
        Application.ScreenUpdating = False
        Code = Trim(InputBox("Entrez le code produit à 10 chiffres.", "demande de code", "exemple : 4612091900"))
        If Len(Code) = 10 And IsNumeric(Code) Then
            If MsgBox("Voulez-vous conserver ou supprimer les lignes contenant le code " & Code & " ?" & Chr(10) & "oui pour conserver" & Chr(10) & "non pour supprimer", vbYesNo, choix) = vbYes Then
                y = ""
                For x = 407 To 5 Step -1
                    If (Trim(Cells(x, 3)) <> Code) And (Trim(Cells(x, 3)) <> "") Then
                    Rows(CStr(x)).Delete Shift:=xlUp
                    End If
                Next x
                For x = 407 To 5 Step -1
                    If (Cells(x, 3) = Valeur) Then
                    Rows(CStr(x)).Delete Shift:=xlUp
                    End If
                Next x
                MsgBox ("Seul les lignes contenant le code " & Code & " ont été conservé.")
            Else
                y = ""
                For x = 407 To 5 Step -1
                    If (Trim(Cells(x, 3)) = Code) Then
                    Rows(CStr(x)).Delete Shift:=xlUp
                    End If
                Next x
                MsgBox ("Seul les lignes contenant le code " & Code & " ont été supprimé.")
            End If
        Else
            MsgBox ("Opération annulé, le code " & Code & " ne contient pas 10 chiffres ou vous avez appuyé sur annuler. ")
        End If
        Application.ScreenUpdating = True
     
    End Sub
     
    ]
    et encore une fois un GRAND MERCI

    dernière petite question : si au lieu de supprimer l'intégralité de la ligne j'avais voulu supprimer seulement de la cellule Ax a la cellule Ex en remontant il aurait fallu faire comment ?
    avec un truc de ce genre ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    [
    Cells(x, 1).Select
    Selection.Delete Shift:=xlUp
    Cells(x, 2).Select
    Selection.Delete Shift:=xlUp
    Cells(x, 3).Select
    Selection.Delete Shift:=xlUp
    Cells(x, 4).Select
    Selection.Delete Shift:=xlUp
    ]

  13. #13
    Expert éminent sénior
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    6 803
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 6 803
    Points : 32 058
    Points
    32 058
    Par défaut
    Citation Envoyé par lysander31 Voir le message
    dernière petite question : si au lieu de supprimer l'intégralité de la ligne j'avais voulu supprimer seulement de la cellule Ax a la cellule Ex en remontant il aurait fallu faire comment ?
    avec un truc de ce genre ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    [
    Cells(x, 1).Select
    Selection.Delete Shift:=xlUp
    Cells(x, 2).Select
    Selection.Delete Shift:=xlUp
    Cells(x, 3).Select
    Selection.Delete Shift:=xlUp
    Cells(x, 4).Select
    Selection.Delete Shift:=xlUp
    ]
    ça devrait marcher, mais c'est moche(tant qu'on peut éviter les select, il vaut mieux éviter). Préfère :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("A" & x & ":E" & x).Delete Shift:=xlUp
    pour les colonnes A à E.
    Les 4 règles d'airain du développement informatique sont, d'après Michael C. Kasten :
    1)on ne peut pas établir un chiffrage tant qu'on a pas finalisé la conception
    2)on ne peut pas finaliser la conception tant qu'on a pas complètement compris toutes les exigences
    3)le temps de comprendre toutes les exigences, le projet est terminé
    4)le temps de terminer le projet, les exigences ont changé
    Et le serment de non-allégiance :
    Je promets de n’exclure aucune idée sur la base de sa source mais de donner toute la considération nécessaire aux idées de toutes les écoles ou lignes de pensées afin de trouver celle qui est la mieux adaptée à une situation donnée.

  14. #14
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 19
    Points : 11
    Points
    11
    Par défaut
    re
    j'ai tenté de généraliser ce code en l'appliquant à deux tableaux. en gros au lieu de tester par rapport a un code comme avant j'ai testé par rapport a un autre tableau qui est du même genre. le but étant de garder les codes présents dans les deux tableaux. avec le code que j'ai créé il me supprime l'intégralité de mes ligne du tableau 1
    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
     
    Sub appel1()
    Dim x As Long
    Dim u As Long
    Dim y As String
    Application.ScreenUpdating = False
     
    y = ""
    For x = 500 To 5 Step -1
        For u = 5 To 500
            If (Cells(x, 3)) <> (Cells(u, 10)) And (Trim(Cells(x, 3)) <> "") Then
            Range("A" & x & ":E" & x).Delete Shift:=xlUp
            End If
        Next u
    Next x
    For x = 500 To 5 Step -1
        If (Cells(x, 3) = Valeur) Then
        Range("A" & x & ":E" & x).Delete Shift:=xlUp
        End If
    Next x
     
    Application.ScreenUpdating = True
    Range("A1").Select
    End Sub

  15. #15
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 19
    Points : 11
    Points
    11
    Par défaut
    c'est bon j'ai trouvé ! juste un petit changement a faire pour les curieux ( si un jour y'en a un qui visite cette discussion )
    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
     
    Sub appel2()
    Dim x As Long
    Dim u As Long
    Dim y As String
    Application.ScreenUpdating = False
     
    y = ""
    For x = 1000 To 5 Step -1
        If (Cells(x, 10) = Valeur) Then
        Range("H" & x & ":L" & x).Delete Shift:=xlUp
        End If
    Next x
    For x = 1000 To 5 Step -1
        For u = 5 To 500
            If ((Cells(x, 10)) = (Cells(u, 3))) And (Trim(Cells(x, 10)) <> "") Then
            Range("H" & x & ":L" & x).Delete Shift:=xlUp
            End If
        Next u
    Next x
    Application.ScreenUpdating = True
    Range("A1").Select
    End Sub
    Voila

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

Discussions similaires

  1. [Macro de Recherche] Comment faire varier une 4eme variable
    Par Vin_SuFu_R@T dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 15/01/2008, 12h35
  2. [JMeter]Comment faire suivre une variable ?
    Par cobios dans le forum Outils
    Réponses: 2
    Dernier message: 15/06/2007, 14h57
  3. [XSL FO]Comment faire évoluer une variable
    Par Little_flower dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 31/05/2007, 15h03
  4. Réponses: 1
    Dernier message: 20/10/2006, 18h46
  5. Réponses: 15
    Dernier message: 25/04/2006, 17h59

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