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 :

Aide sur "erreur type" [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 5
    Points : 3
    Points
    3
    Par défaut Aide sur "erreur type"
    Bonjour à tous
    je suis nouveau ici, je vous explique mon problème:
    j'ai un code que j'arrive pas à faire marcher:

    Je souhaite incrémenter la valeur d'une cellule à chaque fois que le contenu de cette cellule est compris dans une plage.
    (du genre: si E4=2 et que 2 est dans ma plage, faire E4=3 et si 3 est dans la plage, faire E4=4 jusu'à ce que la valeur de E4 est différente de toutes les valeurs de ma plage)

    Voilà le code qui me met "erreur type":

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub recherche()
    Dim a As Range, mad As Date, plage As Range, cell As Range
    Set plage = Range("B3:B127")
    mad = Range("E2") + Range("E3")
    Cells(4, "E") = mad
    For Each cell In plage
        Do
    Set a = Range("B3:B127").Find(Range("E4"), Range("B3"))
            If Not Range("B3:B127") Is Nothing Then
            Cells(4, "E") = mad + 1
            End If
        Loop Until Cells(4, "E") <> plage.Value
    Next cell
    End Sub

  2. #2
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    Bonjour,

    sans refléchir plus loin, cette partie m'étonne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        Set a = Range("B3:B127").Find(Range("E4"), Range("B3"))
            If Not Range("B3:B127") Is Nothing Then
    je remplacerais par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        Set a = Range("B3:B127").Find(Range("E4"), Range("B3"))
            If Not a Is Nothing Then

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    tu compares une cellule a une plage de cellules?

    Cellule <> de CelluleS
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cells(4, "E") <> plage.Value ' Range("B3:B127")

  4. #4
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    Suite à ma 1ere remarque et à la remarque de rdurupt, j'aurais écrit comme ç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
    Sub recherche()
    Dim a As Range, mad As Date, plage As Range, cell As Range
    Set plage = Range("B3:B127")
    mad = Range("E2") + Range("E3")'ici c'est ton problème
    Cells(4, "E") = mad
    For Each cell In plage
      Set a = plage.Find(Range("E4"), Range("B3"))
      If Not a Is Nothing Then
        Cells(4, "E") = mad + 1
      Else
        Exit For
      End If
    Next cell
    End Sub

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    c'est çà rdurupt, la comparaison doit être faite et le résultat incrémenter

    Merci Casefayer,
    mais le soucis c'est que çà me donne une valeur qui est déjà comprise dans ma plage.
    il faut une boucle For afin que toute les fois que le résultat est compris dans la plage, ce résultat soit incrémenté

    Le problème c'est que je dois également vérifier si mad+1 n'est pas dans la plage aussi, je dois utiliser un loop until mais je connais pas le code svp

  6. #6
    Invité
    Invité(e)
    Par défaut
    utilise un dictionary!

  7. #7
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Ok rdurupt!
    j'ai insérer une boucle Do et çà me met: Erreur de compilation "boucle sans Do"

    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
    Sub recherche()
    Dim a As Range, mad As Date, plage As Range, cell As Range
    Set plage = Range("B3:B127")
    mad = Range("E2") + Range("E3")
    Cells(4, "E") = mad
    For Each cell In plage
            Do
        Set a = Range("B3:B127").Find(Range("E4"), Range("B3"))
            If Not a Is Nothing Then
            Cells(4, "E") = mad + 1
            Loop Until Cells(4, "E").Value <> plage.Value
            Else
        Exit For
        End If
    Next cell
    End Sub

  8. #8
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 674
    Points
    18 674
    Par défaut




    Bonjour, bonjour !

    Tu as inséré ton bloc Do … Loop au milieu d'un bloc If … End If d'où l'erreur ‼




    __________________________________________________________________________________________________
    Tous unis, tous Charlie

  9. #9
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    ok, mais du coup je dois faire comment?
    je m'y connais pas vraiment en Vba et c'est la galère pour moi

    Incompatibilité de type.....
    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
    Sub recherche()
    Dim a As Range, mad As Date, plage As Range, cell As Range
    Set plage = Range("B3:B127")
    mad = Range("E2") + Range("E3")
    Cells(4, "E") = mad
        For Each cell In plage
            Do
            Set a = Range("B3:B127").Find(Range("E4"), Range("B3"))
                If Not a Is Nothing Then
                Cells(4, "E") = mad + 1
                Else
                End If
            Loop Until Cells(4, "E") <> plage.Value
        Exit For
        Next cell
    End Sub

  10. #10
    Invité
    Invité(e)
    Par défaut
    tu fais une boucle de ta plage et du fais next Cell!!! Next Plage, mais tu n'a pas besoin de précise le Next
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub recherche()
    Dim a As Range, mad As Date, plage As Range, cell As Range
    Set plage = Range("B3:B127")
    mad = Range("E2") + Range("E3")'ici c'est ton problème
    Cells(4, "E") = mad
    For Each cell In plage
      Set a = plage.Find(Range("E4"), Range("B3"))
      If Not a Is Nothing Then
        Cells(4, "E") = mad + 1
      Else
        Exit For
      End If
    Next 
    End Sub
    Dernière modification par Invité ; 12/02/2015 à 11h40.

  11. #11
    Membre émérite
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Points : 2 684
    Points
    2 684
    Par défaut
    Bonjour


    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
     
    Sub rerecherche_001()
    Dim a As Range, mad As Date, plage As Range
     
    Set plage = Range("B3:B127")
    mad = Range("E2") + Range("E3")
    Cells(4, "E") = mad
     
    ok = True
    Do While ok = True
     
    For Each cell In plage
     If cell = Range("E4") Then
      Range("E4") = Range("E4") + 1
      ok = True
      Exit For
     Else
      ok = False
     End If
    Next
     
    Loop
     
    MsgBox Range("E4") & " non trouvé"
     
    End Sub

  12. #12
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Merci beaucoup Docmarti pour votre intervention, votre code fait exactement ce que je veux.

    Je suis très hereux, encore merci à tous

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

Discussions similaires

  1. Besoin d'aide sur une erreur javascript Uncaught Exception
    Par Jim_Nastiq dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 29/11/2007, 16h11
  2. aide sur l'erreur ora-12520
    Par patricia_kouassi dans le forum Oracle
    Réponses: 1
    Dernier message: 31/01/2007, 21h48
  3. Aide sur gestion erreur
    Par Virgile59 dans le forum Access
    Réponses: 6
    Dernier message: 05/01/2006, 18h05

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