Copier une plage d'information non vide

Cydor007

XLDnaute Occasionnel
Bonjour à tous,

Je ne suis pas très certain comment bien identifier une cellule non vide dans une macro. C'est pour cela que j'ai besoin de vous pour m'aider à corriger le tout.

Voici mon problème:

1- J'aimerais pouvoir copier les informations onglets (Table transfert facture client) de ma facture de A3:G? c'est à dire copier les infos jusqu'à temps que la ligne (dans mon exemple est la ligne 10) ou une cellule vide comme G10 soit vide. Dans ma situation les factures peuvent variées d'une fois à l'autre. Avec la bonne sélection (range), coller le tout dans l'autre onglet (Table facture client)

2- Dans l'onglet Table facture client, j'aimerais que la macro colle les informations à partir de la prochaine cellule vide (dans mon exemple c'est A17) et ainsi de suite pour n'importe quelle facture.

je vous laisse mon exemple et j'attends vos suggestions.

Merci de votre aide.

Cydor007:)
 

Pièces jointes

  • Copier plage avec cellule non vide 1.xlsm
    41 KB · Affichages: 91

Papou-net

XLDnaute Barbatruc
Re : Copier une plage d'information non vide

Bonsoir Cydor007,

Je te propose de modifier ton code comme suit:

Code:
Sub Testcellnonvide()
'
' Testcellnonvide Macro
'

'
    Range("A3:G" & Rows.Count).SpecialCells(xlCellTypeConstants).Copy
    Sheets("Table Facture client").Range("A" & Rows.Count).End(xlUp).Offset(1, 0).PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
        xlNone, SkipBlanks:=False, Transpose:=False
    Application.CutCopyMode = False
    Range("H3").Select
End Sub
Tu noteras qu'il n'est pas besoin de sélectionner des cellules ni des feuilles pour y faire des opérations de copier-coller.

Cordialement.

PS: ce code ne fonctionnera pas avec des cellules qui contiennent des formules, il faudrait alors modifier le paramètre de SpecialCells.
 

Cydor007

XLDnaute Occasionnel
Re : Copier une plage d'information non vide

Salut Papou-net,

Effectivement, le code ne fonctionne pas car toutes mes cellules dans l'onglet Table transfert facture client contiennent des formules. Est-ce que je dois transformer toutes mon contenu en valeur unique avant de les copier dans l'autre onglet? Il doit y a avoir une fonction qui transforme le contenu d'une cellule avec formule en valeur unique...?

J'ai essayé de modifier les paramètres de SpecialCells, mais sans succès. Avez-vous une idée comment le modifier?

Merci de votre aide.

Cydor007:)
 

Cydor007

XLDnaute Occasionnel
Re : Copier une plage d'information non vide

Salut à tous,

Je viens de faire un test simple pour ma macro.

Je copie la plage d'information et je la colle de façon à avoir juste des valeurs. Par la suite je recopie ces mêmes valeurs et je les colles dans mon onglet désigné. Je trouve le processus un peu long.

Quelqu'un a une idée ou une méthode qui me permettrait de copier du contenu avec des formules et coller ce contenu en valeur et format unique dans une seule étape de conversion d'un onglet à l'autre... tout en validant que je copie les cellules non-vide et que je les colles dans un autre onglet qui valide la prochaine cellule vide et qui y colle mes valeurs.

Merci de votre aide.

Cydor007
 

Papou-net

XLDnaute Barbatruc
Re : Copier une plage d'information non vide

Bonsoir Cydor007,

Alors essaie avec la macro modifiée comme suit :

Sub Testcellnonvide()
'
' Testcellnonvide Macro
'

'
Range("A3:G" & Range("A" & Rows.Count).End(xlUp).Row).Copy
Sheets("Table Facture client").Range("A" & Rows.Count).End(xlUp).Offset(1, 0).PasteSpecial _
Paste:=xlPasteValuesAndNumberFormats, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
Range("H3").Select
End Sub
A +

Cordialement.
 

Cydor007

XLDnaute Occasionnel
Re : Copier une plage d'information non vide

Salut papou-net,

La macro ne fonctionne car elle copie tous les cellules qui on une formule, même les cellules avec aucune valeur. Dans mon test, j'ai des formules de E3 à P102. Elle copie toutes les cellules dans ce range là et les colles dans mon onglet Table facture client. Donc, elle colle quand même des informations sur 101 lignes même si j'ai que 3 lignes actives avec des formules utilisables.

Le but c'est que je puisse copier seulement les cellules non vide avec les formules et les coller dans l'autre onglet à partir de A avec seulement la valeur des cellules correspondant. Je viens de valider que les cellules vides ne sont pas réellement vide. Voici un ex.: =SI(D6=VRAI;'Formulaire de facturation'!F$8;" "). Je pense que pour la macro, elle traite ca comme une valeur et c'est pour ca qu'elle copie quand même la ligne avec les cellule qui sont fausses.

Merci et laisse moi savoir si tu as besoin plus de détails.

Cydor
 
Dernière édition:

Papou-net

XLDnaute Barbatruc
Re : Copier une plage d'information non vide

Bonjour Cydor,

Le but c'est que je puisse copier seulement les cellules non vide avec les formules et les coller dans l'autre onglet à partir de A avec seulement la valeur des cellules correspondant.
Dans ce cas, il faudrait utiliser SpecialCells(xlCellTypeFormulas) et tester si la cellule contient une valeur.

Mais le plus simple serait que tu joignes la dernière version de ton fichier car l'actuel ne contient aucune formule.

A +

Cordialement.
 

Cydor007

XLDnaute Occasionnel
Re : Copier une plage d'information non vide

Bonjour Papou-net,

Voici le fichier que je t'ai parlé. Mon but est de pouvoir copier dans l'onglet Facture client, tous les informations de ma facture. Les données que je veux copier viennent de l'onglet Feuille liaison BD (E3 à P27). Ces informations sont différentes d'une facture à l'autre.

J'aimerais être capable de copier seulement les cellules non vide ( cellule avec de l'information visible) et les copier dans l'autre onglet. Le collage dans l'onglet Facture achat doit se faire aussitôt qu'il a une ligne vide. Dans mon ex. la prochaine ligne vide sera à patir de A4 et ainsi de suite.

Cela ressemble au premier code que tu m'as donné, mais avec la difficulté de copier les cellules non vides avec information autre que 0 ou '' ''.

J'espère avoir été assez précis. :)

Merci

Cydor
 

Pièces jointes

  • Copier plage avec cellule non vide 3.xlsm
    863.3 KB · Affichages: 203
  • Copier plage avec cellule non vide 3.xlsm
    863.3 KB · Affichages: 215
  • Copier plage avec cellule non vide 3.xlsm
    863.3 KB · Affichages: 219

Papou-net

XLDnaute Barbatruc
Re : Copier une plage d'information non vide

Bonjour Cydor,

J'ai regardé ton fichier et je ne retrouve pas la correspondance exacte des colonnes à recopier dans ta macro testcopieclient2.

Pourrais-tu me dire quelles colonnes de la feuille14 correspondent aux colonnes de la feuille8 ?

A +

Cordialement.
 

Cydor007

XLDnaute Occasionnel
Re : Copier une plage d'information non vide

Salut papou-net,

Je ne suis pas certain qu'est-ce que représente les feuilles 14 et feuille 8.

Par contre, le but c'est que dans l'onglet (feuille) nommée Feuille liaison BD c'est là que se retrouve les données que je veux copier. L'information à copier se retrouve à partir de la cellule E3 et juqu'à P27.

Donc, tout dépendant quels seront les choix de no pièce dans ma facture (onglet Formulaire de facturation), l'information (le résumé) de ma facture se retrouvera dans l'onglet Feuille liaison BD. Et c'est ces données là (cellule E3 à P27 j'ai mis en vert les cellule consernées) que je souhaite copier dans le tableau Facture achat (à partir de A4). N'oublie pas, seulement les informations qui apparaissent (tous les vrais cellules non-vides dans l'onglet (feuille) nommée Feuille liaison BD) doivent être copiées.

Dernière étape, je souhaite que les informations copiées se colle dans le tableau à la suite de la dernière ligne non vide (entre A et L). je te renvoie le fichier.

En espérant avoir été assez claire:)

Cydor007
 

Pièces jointes

  • Copier plage avec cellule non vide 3.xlsm
    923.3 KB · Affichages: 179
  • Copier plage avec cellule non vide 3.xlsm
    923.3 KB · Affichages: 174
  • Copier plage avec cellule non vide 3.xlsm
    923.3 KB · Affichages: 176
Dernière édition:

Papou-net

XLDnaute Barbatruc
Re : Copier une plage d'information non vide

RE:

Voila qui me paraît plus clair.

Regarde si la macro modifiée sur la copie ci-jointe te convient.

Si tu as besoin d'explications complémentaires, je reste à ta disposition.

A +

Cordialement.

Ps: les feuilles 8 et 14 représentent les feuilles Facture achat et Feuille liaison BD. C'est le CodeName des feuilles, c'est-à-dire le nom que donne automatiquement Excel aux feuilles qui sont créées. Je préfère utiliser ce nom système qui ne varie jamais, même si on change les noms d'onglets.
 

Pièces jointes

  • Copie de Copier plage avec cellule non vide 3-2.xlsm
    937 KB · Affichages: 211
Dernière édition:

Cydor007

XLDnaute Occasionnel
Re : Copier une plage d'information non vide

Bonjour papou-net,

Très beau travail dans l'ensemble.

Il y a 2 points à corriger si possible:

1- Le résultat du collage des données dans le tableau n'est pas correct. J'aimerais que la macro colle les données aussitôt qu'il y a une ligne vide (de A à L) dans l'onglet Facture achat. Je t'ai mis un commentaire en rouge pour t'indiquer ou l'information est collé et en jaune ou elle devrait se situer.

2- est-ce que c'est possible de laisser les valeurs 0 quand on copie les informations?

Je te renvoie une copie du ficheir avec mes commentaires.

Merci:)

Cydor007
 

Pièces jointes

  • Copier plage avec cellule non vide 3-2 (résultat).xlsm
    893.2 KB · Affichages: 187

Papou-net

XLDnaute Barbatruc
Re : Copier une plage d'information non vide

RE:

Voici une proposition de modification de la macro:

Code:
Sub testcopieclient2()
Dim celS As Range 'celS=cellule source
Dim col As Integer, lgC As Integer ' col=décalage de colonne, lgC=n° de ligne cible

With Feuil14
  .Select
  For Each celS In .Range("E3:E" & Rows.Count).SpecialCells(xlCellTypeFormulas)
    If celS.Value <> "" Then
      For col = 0 To 11
        lgC = Feuil8.Cells(Rows.Count, col + 1).End(xlUp).Row + 1
        If celS.Offset(0, col).Value <> "" Then
          Feuil8.Cells(lgC, col + 1).Value = celS.Offset(0, col).Value
        End If
      Next
    End If
  Next
End With
Sheets("Formulaire de facturation").Select
End Sub
Je te laisse le soin de vérifier si ça répond à ta demande.

A+

Cordialement.
 

Discussions similaires

Statistiques des forums

Discussions
312 352
Messages
2 087 538
Membres
103 582
dernier inscrit
didinex