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 SubC'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)
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 continue de chercher
EDIT :
j'ai trouvé l'erreur
'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
NextRe,
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 SubRemplace celui que tu utilises
A+