Problème lecture de cellule, valeur retourné vide

Bonjour,

Je cherche à faire une macro permettant d'envoyer des informations d'une feuille vers une autre.

Jusqu'ici rien de bien compliqué seulement lorsque qu'une de mes variable prend la valeur 21 impossible de lire une case !

Sub Macro1()

'Déclaration des variables pour le fonctionnement du programme
    Dim existance%
    Dim ligne_graph%
    Dim ligne_analyse%
    Dim technique%
    Dim N_technique$

    'Initialisation de celles-ci
    existance = 0
    ligne_graph = 2             'initialisation sur 2 puisque la ligne de départ d'utilisation de cette variable est la numéro 2
    ligne_analyse = 3           'initialisation sur 3 puisque la ligne de départ d'utilisation de cette variable est la numéro 3
    technique = 0
    N_technique = ""

    Application.ScreenUpdating = False
    Sheets("Graphique").Select

    'permet de savoir combien de lignes sont renseignées
    While Cells(ligne_graph, 1) <> ""
        ligne_graph = ligne_graph + 1
    Wend

    'Efface les anciens résultats
    Range(Cells(2, 2), Cells(ligne_graph, 7)).Select
    Selection.ClearContents

    Sheets("Analyse").Select

    'permet de savoir combien de lignes sont renseignées
    While Cells(ligne_analyse, 2) <> ""
        ligne_analyse = ligne_analyse + 1
    Wend

    'boucle pour remplir à nouveau le tableau
    For i = 3 To ligne_analyse

        'enregistrement du numéro technique sur une variable
        N_technique = Cells(i, 2)
        MsgBox N_technique
        existance = 0

        Sheets("Graphique").Select

        'cherche si le numéro technique existe déjà sur la page graphique
        For a = 2 To ligne_graph

            If N_technique = Cells(a, 1) Then

                existance = 1
                technique = a
                Exit For

            End If
        Next

        'si il n'existe pas alors il crée une nouvelle ligne et indente le nombre de ligne maximum puisque celui ci augmente de 1
        If existance = 0 Then

            Cells(ligne_graph + 1, 1) = N_technique
            ligne_graph = ligne_graph + 1
            technique = ligne_graph

        End If

        'cherche des croix dans le tableau si une croix est présente alors elle est reporté sur la page graphique
        For b = 4 To 9

            Sheets("Analyse").Select

            If Cells(i, b) <> "" Then

                Sheets("Graphique").Select
                Cells(technique, b - 2) = Cells(technique, b - 2) + 1

            End If

        Next

    Next

End Sub

C'est au niveau de la variable "i" dès qu'elle prend la valeur 21 alors "Cells(i, 2)" ne prend aucune valeur et donc "technique" est vide.

J'ai remarqué cela à l'aide de la MsgBox. J'ai beau chercher je ne trouve aucune solution à mon problème.

Merci d'avance pour votre aide, je vous ai joint un fichier simplifié (l'erreur reste toujours présente)

15classeur1.xlsm (29.33 Ko)

Bonjour et

Il faudrait peut-être que ta cellule A21 soit rempli dans ta feuille [Graphique] non !?

Ensuite il y a bien plus rapide que faire 2 boucles imbriquées

A+

Merci pour cette réponse pertinente et très rapide

effectivement l'erreur vient sans doute du fait que la cellule soit vide. Je suis sur la bonne voie pour trouver mon erreur je cherche encore

Bien-sur il doit exister plus simple comme syntaxe pour réaliser ma macro mais je ne connais pas les fonctions excel je développe du C habituellement j'utilise donc mes bonnes vielles boucles je fais des macros depuis seulement 1 semaine dans le cadre de mon emploi d'été.

Je continue de chercher

EDIT :

j'ai trouvé l'erreur elle reste bizarre il suffit de sélectionner la feuille Analyse après avoir lancé la boucle "For" principale, je vous laisse le code

'boucle pour remplir à nouveau le tableau
    For i = 3 To ligne_analyse

        Sheets("Analyse").Select    'LIGNE ENLEVANT L'ERREUR

        'enregistrement du numéro technique sur une variable
        N_technique = Cells(i, 2)
        existance = 0

        Sheets("Graphique").Select

        'cherche si le numéro technique existe déjà sur la page graphique
        For a = 2 To ligne_graph - 1

            If N_technique = Cells(a, 1) Then

                existance = 1
                technique = a
                Exit For

            End If
        Next

        'si il n'existe pas alors il crée une nouvelle ligne et indente le nombre de ligne maximum puisque celui ci augmente de 1
        If existance = 0 Then

            Cells(ligne_graph + 1, 1) = N_technique
            ligne_graph = ligne_graph + 1
            technique = ligne_graph

        End If

        'cherche des croix dans le tableau si une croix est présente alors elle est reporté sur la page graphique
        For b = 4 To 9

            Sheets("Analyse").Select

            If Cells(i, b) <> "" Then

                Sheets("Graphique").Select
                Cells(technique, b - 2) = Cells(technique, b - 2) + 1

            End If

        Next

    Next

Re,

Juste comme ça, voici le code optimisé à la façon BM

Sub VersionBM45()
  Dim Col As Integer, DLig As Long, Lig As Long, LigF As Long
  Dim Sht As Worksheet
  ' Définir la feuille de destination
  Set Sht = Sheets("Graphique")
  Sht.Range("A2:G" & Rows.Count).ClearContents
  ' Avec la feuille Analyse
  With Sheets("Analyse")
    ' Récupérer le numéro de la dernière ligne
    DLig = .Range("A" & Rows.Count).End(xlUp).Row
    ' Pour chaque ligne du tableau en partant de la 3ème
    For Lig = 3 To DLig
      ' Trouver la ligne dans la feuille graphique
      ' Match(ValeurCherchée,TableauRecherche,0=Strictemetn exacte)
      LigF = 0
      On Error Resume Next  ' En cas d'erreur, pas de valeur, on continue
      LigF = Application.Match(.Range("B" & Lig), Sht.Range("A:A"), 0)
      On Error GoTo 0
      ' Si pas de ligne trouvée
      If LigF = 0 Then
        ' Calculer la prochaine ligne vide
        LigF = Sht.Range("A" & Rows.Count).End(xlUp).Row + 1
        ' Inscrire le numéro
        Sht.Range("A" & LigF).Value = .Range("B" & Lig)
      End If
      ' Trouver la colonne ou est la valeur
      Col = .Range("C" & Lig).End(xlToRight).Column - 3
      ' Ajouter 1 à la colonne
      Sht.Cells(LigF, Col).Value = Sht.Cells(LigF, Col).Value + 1
    Next Lig
  End With
End Sub

Remplace celui que tu utilises

A+

Merci beaucoup

Rechercher des sujets similaires à "probleme lecture valeur retourne vide"