XL 2013 Probleme derniere cellule non vide Range.End.Row

memns

XLDnaute Nouveau
Bonjour a tous,

J'aimerai importer des valeurs d'une feuille Excel dans des signets Word pour cela j'ai decoupé mon code en 3 parties car mon document Word l'est aussi.

Je me retrouve a tester mes 2 parties les plus simples mais elles ne fonctionnent pas en raison d'une mauvaise attribution de la valeur de ma variable NumeroDerniereLigneCelluleNonVide (nomme identique dans les 2 sub mais j'ai teste independamment les 2 sub pour savoir si le rendu etait tel que je le voulais).

J'ai respectivement dans mon 1er et 2eme sub defini cette variable tel que :

NumeroDerniereLigneCelluleNonVide = Range("A300").End(xlUp).Row
NumeroDerniereLigneCelluleNonVide = Range("C300").End(xlUp).Row

Afin qu'elle me renvoie le numero de la ligne contenant la derniere cellule non vide des colonnes A et C en partant a chaque fois de la ligne 300 et sans prendre en compte les resultats "" des formules (=SIERREUR(SI(B33<>"";SI(B32<>"";A32+1;SI(B31<>"";A31+1;""));"");"") et =SI(_xlfn.NUMBERVALUE(Feuil1!N15;".")<=0;"";Feuil1!Q15) ) contenus respectivement dans chaque cellule A et C (de la ligne 1 a 500).
Cependant dans le 1er cas elle me renvoie 20 alors que (code ci-joint) ma boucle For debute a 21 ce qui implique que ma boucle est saute mais le code tourne sans que les signets de la partie Findings soient remplaces par la valeur voulu ...
Et dans le 2eme cas elle me renvoie 520 (encore plus etrange) ... et un message d'erreur "Overflow" apparait

Je ne comprends pas alors que dans mon tableau Excel feuille "Finding report" la derniere cellule non vide pour les colonnes A et C est 41.
Cela est surement du aux resultats qui composent ces cellules A et C, la methode Find n'est pas efficace je ne vois pas comment realiser autrement ou ou est mon erreur.

Si vous avez une idee je suis preneur, merci d'avance
icon_biggrin.gif


Ci-joint le code de mon 1er sub (les 2 se ressemblent) :

VB:
Private Sub ConcatenerFindings()
 
Dim i, j, X, k As Byte
Dim NumeroDerniereLigneCelluleNonVide As Integer
 
 
 
With Sheets("Finding report")
 
j = 21
NumeroDerniereLigneCelluleNonVide = Range("A300").End(xlUp).Row
 
For j = 21 To NumeroDerniereLigneCelluleNonVide
 
    If Cells(j, 1) <> "" Then
     .Cells(j, 12) = .Cells(j, 1) & "" & .Cells(j, 2) & "" & .Cells(j, 3) & "" & .Cells(j, 6)
 
    Else
    .Cells(j, 12) = ""
 
    End If
 
 Next j
 
Dim WordApp As Word.Application
Dim WordDoc As Word.Document
Set WordApp = CreateObject("word.application") 'ouvre session word
Set WordDoc = WordApp.Documents.Open("C:\Users\Utilisateur\Desktop\SIN-ENG-P04-F02_maintenance_work_sheet_ANNEX Revision 1.docx")
 
i = 1
j = 21
 
 
 
Do While True
    If Cells(j, 12) <> "" Then
        WordDoc.Bookmarks("Signet" & i).Range.Text = Cells(j, 12)
        i = i + 1
    End If
    j = j + 1
    If j = 300 Or i = 12 Then
        Exit Do
    End If
Loop
 
End With
End Sub
 

memns

XLDnaute Nouveau
Merci Laurent pour ta réponse

Cependant meme apres le redimensionnement de mes variables cela n'a pas fonctionne.

J'ai donc realise cette etape de mon code autrement avec une boucle Do While True et comme par magie cela a fonctionne
Bizarre quand on sait que les donnees dans les colonnes A, C et E s'arretaient a la ligne 41 mais que la fonction Range.End.Row ne fonctionnait pas pour les colonnes A et C

Merci quand meme pour tes precisions cela m'a permis de m'instruire un peu plus en VBA
 

JM27

XLDnaute Barbatruc
Bonjour
issu de l'aide VBA

pour info Laurent 950

Vous pouvez déclarer plusieurs variables dans une instruction. Pour spécifier un type de données, vous devez inclure le type de données pour chaque variable. Dans l'instruction suivante, les variables intX, intY et intZ sont déclarées avec le type Integer.

Dim intX As Integer, intY As Integer, intZ As Integer


Dans l'instruction suivante, intX et intY sont déclarés avec le type Variant ; seul intZ est déclaré avec le type Integer.

Dim intX, intY, intZ As Integer

en conclusion : dans la procédure de memns J n'est pas déclaré en byte mais en variant
mais sans fichier fourni on ne peut pas l'aider.
nota: dans sa procédure des variables sont déclarées (X et k) mais pas utilisées?
je pense que c'est NumeroDerniereLigneCelluleNonVide qui est en dépassement de capacité (overflow)
 
Dernière édition:

Statistiques des forums

Discussions
314 647
Messages
2 111 533
Membres
111 193
dernier inscrit
Raf'